Вопрос

Я собираюсь использовать новую захватывающую функцию внешнего типа контента, чтобы отобразить список данных из внешней системы LOB. Список потенциально длинный, поэтому предпочтение предпочтительнее подготовку к фильтрации на стороне системы LOB. http://msdn.microsoft.com/en-us/library/ee556392(office.14).aspx Подразумевает, что у BCS могут быть некоторые положения для пейджинга (фильтр PageNumber). Но документация еще неполна. Вот образец Как сделать пейджинг для метода idenumerator для поискового хлистого, но не имеет образцов для подготовки к Spview. У кого -нибудь есть опыт работы с BCS Paging?


  • Как BCS узнает общее количество элементов в списке?
  • Как BCS передает параметры пейджинга в систему LOB?
  • Как сделать работу Spview с BCS Server Paging и Sorting?
Это было полезно?

Решение

Спасибо, ребята, я уже создаю пейджинг и сортировку с BCS. В моем случае BCS отлично работает со службами WCF. Сначала я разрабатываю веб -сервис с контрактом «Следующий»:

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

Затем я создал определение BDC с методом чтения списка для этого WCF-метода с фильтрами для всех этих параметров. Я создал фильтры для сравнения, но в этом случае фильттип не имеет никакого смысла. После этого я создал внешний список с представлением для этого метода. Открыл это представление в 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 добавить «следующую кнопку». Например: вам нужно получить 121 элемент для BCS, если вы хотите получить 4 -ю страницу, а размер страницы - 30 элементов

Другие советы

Забудьте о любых сторонних инструментах. Я смог решить эту проблему, изменив вызов SQL в службе WCF и используя фильтрацию, которая встроена в BCS через SharePoint Designer. Я написал об этом здесь.

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

Вот основные шаги:

  1. Создайте метод в службе WCF, чтобы вызвать базу данных, используя какой -то параметр для возврата ограничений строк.
  2. Создайте функцию чтения списка для WCF с помощью SharePoint Designer.enter image description hereУбедитесь, что тип фильтра является номером страницыenter image description here
  3. Установите фильтр для этого метода в SharePoint Designer. Убедитесь, что вы передаете фильтр PageNumber в качестве параметра этого метода

public ienumerable getallitemspaged (int pagenum) {}

  1. В вашем методе WCF примите этот параметр фильтрации и выполните некоторые расчеты, чтобы определить, какой набор данных для запроса. Ваш запрос SQL будет чем -то вроде:

string sqlquerystr = @"select * from (select row_number () over (order by orderdate) как rownum, * из заказов, где orderdate> = '1980-01-01') как RowConstressultaultult, где rownum> =" + (1000 * pagenum ) + 1) + "и rownum <" + overslimit + "порядок от Rownum";

Так что в основном вы собираетесь ползать по 1000 за раз.

  1. Ползти. Когда вы сканируете это, SharePoint назовет этот метод и передаст Pagenum этому методу, как 0, затем назовет его снова и пройдет «1», а затем «2», ... так далее и так далее, пока он не ползет.

надеюсь, это поможет

Вот образец пейджинг на стороне сервера от инструментов Lightning:

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

Это образец подключения .NET, так что вы можете заставить его работать с любым бэк -эндом, включая SQL Server. Это лучшее, что мы могли бы найти, но он не идеален, так как он делает топ N, а не на странице.

Имейте в виду, что это окажет влияние на фильтрацию, поскольку тот же метод считывания будет вызван, когда фильтр заполняется, поэтому данные фильтра тоже накрываются. Вы можете сделать это с помощью инспективных переменных формы, но это черный и хакерский процесс.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top