Пейджинг и сортировка с BCS
-
16-10-2019 - |
Вопрос
Я собираюсь использовать новую захватывающую функцию внешнего типа контента, чтобы отобразить список данных из внешней системы 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
Вот основные шаги:
- Создайте метод в службе WCF, чтобы вызвать базу данных, используя какой -то параметр для возврата ограничений строк.
- Создайте функцию чтения списка для WCF с помощью SharePoint Designer.Убедитесь, что тип фильтра является номером страницы
- Установите фильтр для этого метода в SharePoint Designer. Убедитесь, что вы передаете фильтр PageNumber в качестве параметра этого метода
public ienumerable getallitemspaged (int pagenum) {}
- В вашем методе 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 за раз.
- Ползти. Когда вы сканируете это, SharePoint назовет этот метод и передаст Pagenum этому методу, как 0, затем назовет его снова и пройдет «1», а затем «2», ... так далее и так далее, пока он не ползет.
надеюсь, это поможет
Вот образец пейджинг на стороне сервера от инструментов Lightning:
Это образец подключения .NET, так что вы можете заставить его работать с любым бэк -эндом, включая SQL Server. Это лучшее, что мы могли бы найти, но он не идеален, так как он делает топ N, а не на странице.
Имейте в виду, что это окажет влияние на фильтрацию, поскольку тот же метод считывания будет вызван, когда фильтр заполняется, поэтому данные фильтра тоже накрываются. Вы можете сделать это с помощью инспективных переменных формы, но это черный и хакерский процесс.