首页 > 解决方案 > C# sharepoint 如何从特定视图中检索列表项

问题描述

我想检索特定视图的所有列表项。现在我可以检索项目,但每次我有 22000 个项目。但是在主要视图中我只有两个项目。

在此处输入图像描述

我的代码基于 Stackoverflow 中的其他帖子编写的:

using (var ctx = new ClientContext("http://sp2.intranet.mmmm.net/LWW/Europe/Warsaw/loc/eng/"))
{
      Web web = ctx.Web;
      var tasksList = web.Lists.GetByTitle("Collaboration-Intracompany");

      ctx.ExecuteQuery();
      Microsoft.SharePoint.Client.View view = tasksList.Views.GetByTitle("Main");
      ctx.Load(view);
      ctx.ExecuteQuery();

      CamlQuery camlQuery1 = new CamlQuery();
      camlQuery1.ViewXml = view.ViewQuery;
      // camlQuery1.ViewXml = @"<View><Query><Where><IsNotNull><FieldRef Name='ID' /></IsNotNull></Where></Query><ViewFields><FieldRef Name='ID' /></ViewFields></View>";
      //camlQuery1.ViewXml = @"<View><Query><Where><Eq><FieldRef Name=\'DisplayName\' /><Value Type=\'Text\'>Main</Value></Eq></Where></Query></View>";

      ListItemCollection listItems = tasksList.GetItems(camlQuery1);

      ctx.Load(listItems);
      ctx.ExecuteQuery();
}

我当前的 ViewXml 如下。它返回 4 个具有“ENG In Progress”的项目。但这4项来自不同的观点。如何过滤以仅从视图 Main 返回项目?

     CamlQuery camlQuery1 = new CamlQuery();

        camlQuery1.ViewXml = "<View Name="{326A70B3-515F-4B92-B8FA-506865D192AF}" DefaultView="TRUE" Type="HTML" TabularView="FALSE" DisplayName="Main" Url="/LWW/Europe/Warsaw/loc/eng/Lists/CollaborationIntracompany/all.aspx" Level="1" BaseViewID="1" ContentTypeID="0x" ImageUrl="/_layouts/images/generic.png">
   <ViewFields>
      <FieldRef Name="LinkTitle" />
      <FieldRef Name="Task_x0020_Status" />
      <FieldRef Name="Priority" />
      <FieldRef Name="Assigned_x0020_To2" />
      <FieldRef Name="Deadline" />
      <FieldRef Name="Author" />
      <FieldRef Name="Modified" />
      <FieldRef Name="Activity" />
   </ViewFields>
   <Query>
      <Where>
         <Eq>
            <FieldRef Name="Task_x0020_Status" />
            <Value Type="Text">ENG In Progress</Value>
         </Eq>
      </Where>
   </Query>
   <Aggregations Value="Off" />
   <RowLimit Paged="TRUE">300</RowLimit>
   <Mobile MobileItemLimit="3" MobileSimpleViewField="LinkTitle" />
   <Toolbar Type="Standard" ShowAlways="TRUE" />
   <XslLink Default="TRUE">main.xsl</XslLink>
   <ParameterBindings>
      <ParameterBinding Name="NoAnnouncements" Location="Resource(wss,noXinviewofY_LIST)" />
      <ParameterBinding Name="NoAnnouncementsHowTo" Location="Resource(wss,noXinviewofY_DEFAULT)" />
   </ParameterBindings>
</View>";

         ListItemCollection listItems = tasksList.GetItems(camlQuery1);

当我删除查询时:

 camlQuery1.ViewXml = ""
                        + "<View Name='{326A70B3-515F-4B92-B8FA-506865D192AF}' DefaultView='TRUE' Type='HTML' TabularView='FALSE' DisplayName='Main' Url='/LWW/Europe/Warsaw/loc/eng/Lists/CollaborationIntracompany/all.aspx' Level='1' BaseViewID='1' ContentTypeID='0x' ImageUrl='/_layouts/images/generic.png'>"
                        + "<ViewFields>"
                         + "<FieldRef Name='LinkTitle' /><FieldRef Name='Task_x0020_Status' /><FieldRef Name='Priority' /><FieldRef Name='Assigned_x0020_To2' /><FieldRef Name='Deadline' /><FieldRef Name='Author' /><FieldRef Name='Modified' /><FieldRef Name='Activity' /></ViewFields>"
                        //  + "<Query><Where><Eq><FieldRef Name='Task_x0020_Status' /><Value Type='Text'>ENG In Progress</Value></Eq></Where></Query>"
                           + "<Aggregations Value='Off' /><RowLimit Paged='TRUE'>300</RowLimit><Mobile MobileItemLimit='3' MobileSimpleViewField='LinkTitle' />"
                           + "<Toolbar Type='Standard' ShowAlways='TRUE' /><XslLink Default='TRUE'>main.xsl</XslLink><ParameterBindings>"
                           + "<ParameterBinding Name='NoAnnouncements' Location='Resource(wss,noXinviewofY_LIST)' />"
                           + "<ParameterBinding Name='NoAnnouncementsHowTo' Location='Resource(wss,noXinviewofY_DEFAULT)' /></ParameterBindings></View>";

它返回 300 个项目,因为限制是 300。在图片上,您可以看到 Main 视图只有 4 个位置。如何获得这 4 个职位?

标签: c#sharepoint

解决方案


我以前见过这方面的东西。

尝试

camlQuery1.ViewXml = "<View><Query>" + view.ViewQuery + "</Query></View>";

干杯

特鲁兹


推荐阅读