Pregunta

Me va a utilizar la nueva e interesante función Tipo de contenido externo para mostrar una lista de datos desde un sistema externo de LOB. La lista es potencialmente mucho tiempo, así localizando con filtrado en el lado del sistema LOB es preferible. http://msdn.microsoft.com/en-us/library/ee556392 ( office.14) .aspx implica que BCS podrían tener algunas disposiciones para paginación (filtro PageNumber). Pero la documentación es todavía incompleta. Aquí está una muestra cómo hacer la paginación para el método de búsqueda IdEnumerator sobre orugas, pero no tiene muestras de paginación con SPView. Alguien tiene alguna experiencia con BCS paginación?


  • ¿Cómo BCS llegan a conocer el número total de elementos en la lista?
  • ¿Cómo BCS pasan parámetros de paginación en el sistema de LOB?
  • ¿Cómo hacer SPView trabajo con paginación del lado del servidor y la clasificación BCS?
¿Fue útil?

Solución

Gracias, chicos, ya estoy crean paginación y la clasificación de BCS. En mi caso BCS bien trabaja con servicios WCF. Al principio estoy desarrollar servicios web con un contrato de la siguiente manera:

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

entonces me creé definición BDC con Read lista de métodos para este método de WCF con los filtros para todos esos parámetros. Estoy creado filtros comparación, pero no tiene FilterType SENCE en este caso. Después de eso me creé lista externa con vistas a este método. Abrió este Ver en SharePoint Designer y cambiar algunos parámetros para Ver en 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>

Después de todo mi servicio WCF funciona bien con estos parámetros y que hacen posible la paginación del lado del servidor y la clasificación.

El uno específico de esta solución - es que el número de elementos, recuperado de la BCS debe ser encrease en todas las páginas del número de [Tamaño de página] 1. "1" hizo de SharePoint para agregar "al lado". Por ejemplo: se necesita para recuperar 121 artículos para BCS si desea obtener cuarta página y el tamaño de página es de 30 artículos

Otros consejos

Olvídate de cualquier herramienta de terceros. Yo era capaz de manejar este mismo problema modificando la llamada SQL en el servicio WCF y el uso de filtrado que está incorporado en la BCS a través de SharePoint Designer. He blog acerca de aquí.

http://www.spcrew.com/blogs /Lists/Posts/Post.aspx?ID=47

Estos son los pasos básicos:

  1. Crear un método en el servicio WCF para llamar a la base de datos utilizando algún parámetro para devolver los límites de fila.
  2. Crear una lista de funciones de lectura de los WCF mediante SharePoint Designer. introducir descripción de la imagen aquí Asegúrese de que el tipo de filtro es un número de página introducir descripción de la imagen aquí
  3. establecer un filtro para ese método en SharePoint Designer. Asegúrese de que se pase el filtro PageNumber como un parámetro para que el método

IEnumerable pública getAllItemsPaged (int PageNum) {}

  1. En el método de WCF, acepta que el parámetro de filtro y realizar algunos cálculos para determinar qué conjunto de datos para consulta. Su consulta SQL será algo como:

string SqlQueryStr = @ "SELECT * FROM (SELECT ROW_NUMBER () OVER (ORDER BY OrderDate) AS ROWNUM, * de las órdenes de DONDE OrderDate> = '1980-01-01' ) AS RowConstrainedResult DONDE ROWNUM> = "+ ((1000 PageNum *) + 1) +" Y ROWNUM < "+ Límite Superior +" ORDER BY ROWNUM ";

Así que básicamente vamos a artículos que se arrastran 1000 a la vez.

  1. Rastreo. Cuando rastrea esto, SharePoint llamará a este método y pasar el PageNum a este método como 0, entonces se llamaría de nuevo y pasar a "1", y luego "2", ... así sucesivamente y así sucesivamente hasta que se arrastra todo.

Espero que ayude

Aquí está la muestra del lado del servidor de localización de los rayos Herramientas:

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

Es ejemplo de .NET de conectividad, por lo que puede hacer que funcione con cualquier parte final incluyendo SQL Server. Es el mejor que pudimos encontrar, pero no es perfecto, ya que está haciendo TOP N en lugar de una página a la vez.

Tenga en cuenta que va a tener un efecto sobre la filtración como método de la misma 'leelista' está siendo llamada cuando el filtro está poblada, por lo que el filtro de datos se pagina también. Puede solucionar esto con la inspección de variables de formulario, pero es un proceso lenghty y hacky.

Licenciado bajo: CC-BY-SA con atribución
scroll top