Domanda

I intenzione di utilizzare la nuova funzionalità di tipo di contenuto esterno emozionante per visualizzare un elenco di dati da un sistema LOB esterno. La lista è potenzialmente lungo, in modo paging con filtraggio sul lato sistema LPP è preferibile. http://msdn.microsoft.com/en-us/library/ee556392 ( office.14) aspx implica che BCS potrebbero avere alcune disposizioni per la paginazione (filtro PageNumber). Ma la documentazione è ancora incompleta. Ecco un esempio come fare di paging per il metodo IdEnumerator per la ricerca Crawler, ma non ha campioni a paginazione con SPView. Chiunque ha una certa esperienza con BCS paging?


  • In che modo BCS di conoscere il numero totale di elementi nella lista?
  • Come funziona BCS passano paging parametri al sistema LOB?
  • Come far funzionare SPView con paginazione BCS lato server e ordinamento?
È stato utile?

Soluzione

Grazie, ragazzi, io sono già creano paging e l'ordinamento con BCS. Nel mio caso BCS funziona bene con servizi WCF. In un primo momento mi sviluppare un servizio web con contratto di seguito:

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

poi ho creato definizione BDC con Leggi Lista Metodo per questo WCF-metodo con i filtri per tutti questi parametri. Sto creato filtri di confronto, ma FilterType ha non ha senso in questo caso. Dopo che ho creato elenco esterno con Vista per questo metodo. Inaugurato questa Altri in SharePoint Designer e modificare alcuni parametri per View in 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>

Dopo tutto il mio servizio WCF funziona bene con questi parametri e che rendono possibile paginazione lato server e ordinamento.

L'unica specifica di questa soluzione - è che il numero di elementi, recuperato dal BCS deve essere rendere più piccante su ogni pagina del numero di [dimensione della pagina] +1. "+1" made SharePoint per aggiungere "accanto". Per esempio: è necessario recuperare 121 articoli per BCS se si vuole ottenere 4 ° pagina e il formato della pagina è di 30 elementi

Altri suggerimenti

dimenticare qualsiasi strumenti di terze parti. Sono stato in grado di gestire questo problema modificando la chiamata SQL nel servizio WCF e l'utilizzo di filtraggio che è costruito per i BCS tramite SharePoint Designer. Ho bloggato su di esso qui.

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

Ecco i passaggi fondamentali:

  1. Crea un metodo in servizio WCF per chiamare il database utilizzando alcuni parametri per tornare limiti di righe.
  2. Crea una funzione elenco lettura per WCF utilizzando SharePoint Designer. entrare descrizione dell'immagine qui Assicurarsi che il tipo di filtro è Numero pagina entrare descrizione dell'immagine qui
  3. impostare un filtro per quel metodo in SharePoint Designer. Assicurarsi che si passa il filtro PageNumber come parametro al metodo che

pubblico IEnumerable getAllItemsPaged (int PageNum) {}

  1. Nel vostro metodo di WCF, accettare che il parametro di filtro ed eseguire qualche calcolo per determinare quale insieme di dati di query. Query SQL sarà qualcosa di simile:

stringa SqlQueryStr = @ "SELECT * FROM (SELECT ROW_NUMBER () OVER (ORDER BY OrderDate) AS ROWNUM, * DA ordini DOVE DataOrdine> = '1980-01-01' ) AS RowConstrainedResult DOVE rownum> = "+ ((1000 * PageNum) + 1) +" E rownum < "+ UpperLimit +" ORDER BY rownum ";

Quindi, in pratica si sta andando ad elementi striscianti 1000 alla volta.

  1. Crawl. Quando si strisciare questo, SharePoint chiamerà questo metodo e passare il PageNum a questo metodo come 0 allora chiamerà di nuovo e passare "1", e poi "2", ... così via e così via fino a che non esegue la scansione di tutto.

La speranza che aiuta

Ecco l'esempio di server side di paging da Lightning Strumenti:

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

E 'campione NET connettività, in modo da poter farlo funzionare con qualsiasi back-end tra cui SQL Server. E 'il migliore che abbiamo trovato, ma non è perfetto in quanto sta facendo TOP N al contrario di una pagina per volta.

tenere presente che avrà un effetto sulla filtraggio come metodo stesso 'ReadList' viene chiamato quando il filtro è popolato, quindi i dati del filtro è paging troppo. È possibile risolvere questo con l'ispezione variabili di modulo, ma è un processo lenghty e hacky.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top