Frage

Ich werde die neue aufregende externe Inhaltstypfunktion verwenden, um eine Liste von Daten aus einem externen LOB -System anzuzeigen. Die Liste ist potenziell lang, daher ist das Paging mit Filterung auf der LOB -Systemseite vorzuziehen. http://msdn.microsoft.com/en-us/library/ee556392(Office.14).aspx Impliziert, dass BCS einige Bestimmungen für Paging (Pagenumber -Filter) haben. Die Dokumentation ist jedoch noch unvollständig. Hier ist eine Probe So machen Sie Paging für die Idenumerator -Methode zum Suchcrawler, enthält jedoch keine Stichproben für das Paging mit Spview. Hat jemand Erfahrung mit BCS Paging?


  • Wie erfahren BCS die Gesamtzahl der Elemente in der Liste?
  • Wie übergeben BCS Paging -Parameter an das LOB -System?
  • Wie mache ich mit BCS Server-Side-Paging und Sortierung eine Arbeit?
War es hilfreich?

Lösung

Danke, Leute, ich erstelle schon Paging und sortiert mit BCS. In meinem Fall funktioniert BCS gut mit WCF -Diensten. Zunächst entwickle ich Webdienst mit Follow -Vertrag: Vertrag:

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

Dann werde ich eine BDC-Definition mit der Leselistenmethode für dieses WCF-Methode mit Filtern für all diese Parameter erstellt. Ich habe Vergleichsfilter erstellt, aber Filtertype hat in diesem Fall keinen Sinn. Danach habe ich externe Liste mit Ansicht für diese Methode erstellt. Öffnete diese Ansicht im SharePoint -Designer und ändern Sie einige Parameter für die Anzeige 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>

Nach all meinem WCF-Dienst funktioniert mit diesen Parametern einwandfrei und ermöglicht das serverseitige Paging und Sortieren möglich.

Die eine Spezifik für diese Lösung ist, dass die Anzahl der aus dem BCS abgerufenen Elemente auf jeder Seite auf der Anzahl der [Seitengröße] +1 eindringen muss. "+1" machte SharePoint, um "nächste Schaltfläche" hinzuzufügen. Zum Beispiel: Sie müssen 121 Elemente für BCS abrufen, wenn Sie die 4. Seite erhalten möchten, und die Seitengröße beträgt 30 Elemente

Andere Tipps

Vergessen Sie Tools Dritter. Ich konnte dieses Problem behandeln, indem ich den SQL -Aufruf im WCF -Dienst geändert und die Filterung verwendete, die über SharePoint Designer in den BCS eingebaut ist. Ich habe hier darüber gebloggt.

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

Hier sind die grundlegenden Schritte:

  1. Erstellen Sie eine Methode im WCF -Dienst, um die Datenbank mithilfe eines Parameters aufzurufen, um Zeilengrenzen zurückzugeben.
  2. Erstellen Sie eine Listen -Lesefunktion für den WCF mit SharePoint Designer.enter image description hereStellen Sie sicher, dass der Filtertyp Seitennummer istenter image description here
  3. Legen Sie einen Filter für diese Methode in SharePoint Designer ein. Stellen Sie sicher, dass Sie den Pagenumber -Filter als Parameter an diese Methode übergeben

public iEnumerable getAllitemSpaged (int pagenum) {}

  1. Akzeptieren Sie in Ihrer WCF -Methode diesen Filterparameter und führen Sie eine Berechnung durch, um zu bestimmen, welche Datenmenge für Abfragen sind. Ihre SQL -Abfrage wird so etwas wie folgt sein:

String SQLQueryStr = @"Select * aus (select row_number () over (orderdate) als Rownum, * aus Bestellungen, wobei Orderdate> = '1980-01-01') als rowconstrainedResult wobei Rownum> =" + ((1000 * pagenum ) + 1) + "und Rownum <" + UpperLimit + "Order by Rownum";

Im Grunde genommen werden Sie 1000 nach dem anderen auf die Gegenstände kriechen.

  1. Kriechen. Wenn Sie dies crawlen, nennt SharePoint diese Methode und übergibt das Pagenum an diese Methode als 0, dann nennt sie erneut und passt "1" und dann "2", ... so weiter und so fort, bis sie alles kriecht.

Ich hoffe, das hilft

Hier ist die serverseitige Paging -Probe aus Lightning -Tools:

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

Es handelt sich um eine .NET -Konnektivitäts -Beispiele, sodass Sie mit jedem Back -End einschließlich SQL Server funktionieren können. Es ist das Beste, was wir finden konnten, aber es ist nicht perfekt, da es Top N im Gegensatz zu einer Seite pro Zeit macht.

Beachten Sie, dass es sich auf die Filterung auswirkt, wie dieselbe "Readlist" -Methode aufgerufen wird, wenn der Filter besiedelt ist, sodass auch die Filterdaten ausgelegt werden. Sie können dies mit der Überprüfung von Formvariablen verarbeiten, aber es handelt sich um einen licht- und hackigen Prozess.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top