我将使用新的激动人心的外部内容类型功能显示来自外部LOB系统的数据列表。该列表可能很长,因此在LOB系统侧进行过滤的分页是可取的。 http://msdn.microsoft.com/en-us/library/ee556392(Office.14).aspx 意味着BCS可能有一些分页的规定(Pagenumber滤波器)。但是文档尚不完整。 这是一个样本 如何进行iDenumerator方法进行搜索爬行者的分页,但没有SPView的示例。有人在BCS分页上有一些经验吗?


  • BC如何了解列表中的项目总数?
  • BCS如何将分页参数传递给LOB系统?
  • 如何使用BCS服务器端分页和排序制作工作SPView?
有帮助吗?

解决方案

谢谢,伙计们,我已经在与BCS进行分类和分类。就我而言,BCS可以与WCF服务一起使用。首先,我使用以下合同开发Web服务:

[OperationContract]
IEnumerable<Employee> GetEmployeesPaged(int startRowNumber, int pageCount, string sortColumn, string sortDir);

然后,我创建了使用此参数的过滤器的WCF方法的读取列表方法的BDC定义。我创建了比较过滤器,但是在这种情况下,FilterType没有任何条件。之后,我创建了使用此方法的视图的外部列表。在SharePoint Designer中打开了此视图,并将某些参数更改为XSLTLISTVIEWWEBPART:

        <View Name="{50E1E936-0A3F-4096-84D2-FBDC194B4BAE}" DefaultView="TRUE" MobileView="TRUE" Type="HTML" DisplayName="Employee Read List Paged" Url="/Lists/Contracts/GetEmployeesPaged.aspx" Level="1" BaseViewID="1" ContentTypeID="0x" ImageUrl="/_layouts/images/generic.png">
            <Method Name="GetEmployeesPaged">
                <Filter Name="FilterRowNum" Value="{dvt_firstrow}"/>
                <Filter Name="FilterPageCount" Value="30"/>
                <Filter Name="FilterSortColumn" Value="{dvt_sortfield}"/>
                <Filter Name="FilterSortDir" Value="{dvt_sortdir}"/>
            </Method>
            <RowLimit Paged="TRUE">30</RowLimit>
            <Aggregations Value="Off"/>
        </View>

毕竟,我的WCF服务在此参数方面正常运行,这使服务器端的分页和排序都可以。

该解决方案的一个特定是 - 从BCS检索到的项目计数必须在[页面大小] +1的每个页面上掩盖。 “ +1”使SharePoint添加“ Next”按钮。例如:如果要获取第4页,并且页面大小为30个项目,则需要检索BCS的121个项目

其他提示

忘记任何第三方工具。我能够通过在WCF服务中修改SQL调用并使用SharePoint Designer内置到BCS的过滤来解决这个问题。我在这里写了博客。

http://www.spcrew.com/blogs/lists/posts/post.aspx?id=47

这是基本步骤:

  1. 在WCF服务中创建一个方法,以使用一些参数返回行限制来调用数据库。
  2. 使用SharePoint Designer为WCF创建列表读取功能。enter image description here确保过滤器类型为页码enter image description here
  3. 在SharePoint Designer中为该方法设置过滤器。确保将Pagenumber滤波器作为参数传递给该方法

公共iEnumerable getallitemspaged(int pagenum){}

  1. 在您的WCF方法中,接受该滤波器参数并执行一些计算以确定要查询的数据集。您的SQL查询将是:

字符串sqlquerystr = @“ select * select * from(select row_number()over(orderdate as dropdate)为rownum, *从orderdate> ='1980-01-01')作为rowconcentainedresult ronnum> = =“ +(1000 * pagenum) ) + 1) +“和rownum <” + upperlimit +“ rownum”;

因此,基本上,您将一次爬行1000个物品。

  1. 爬行。当您爬网时,SharePoint将调用此方法,并将Pagenum传递给该方法0,然后将其再次称为“ 1”,然后将“ 2”,然后...等等,等一下,直到它爬了所有东西为止。

希望有帮助

这是来自闪电工具的服务器端分页样本:

http://lightningtools.com/blog/archive/2010/06/25/sharepoint-2010-external-list-paging-ndash-server-side.aspx

它是.NET连接示例,因此您可以使其与包括SQL Server在内的任何后端一起使用。这是我们能找到的最好的,但是它并不完美,因为它是在上面的N,而不是每次页面。

请记住,由于填充过滤器时,它将调用相同的“读取清单”方法,因此它将对过滤产生效果,因此也将对过滤器数据进行分页。您可以通过检查表单变量进行解决方案,但这是一个笨拙而又黑的过程。

许可以下: CC-BY-SA归因
scroll top