Question

Je vais utiliser la nouvelle fonction de type de contenu passionnant externe pour afficher une liste de données à partir d'un système LOB externe. La liste est potentiellement longue, la pagination de manière à filtrer au niveau du côté du système de LOB est préférable. http://msdn.microsoft.com/en-us/library/ee556392 ( office.14) .aspx implique que BCS pourrait avoir des dispositions pour la pagination (filtre PageNumber). Mais la documentation est encore incomplète. Voici un échantillon comment faire pour radiomessagerie méthode IDEnumerator Recherche Crawler, mais n'a pas d'échantillons à pagination avec SPView. Tout le monde a une certaine expérience avec la pagination BCS?


  • Comment le BCS se connaître le nombre total d'éléments dans la liste?
  • Comment le BCS passer des paramètres pagination au système LOB?
  • Comment faire fonctionner SPView avec pagination côté serveur BCS et le tri?
Était-ce utile?

La solution

Merci, les gars, je suis déjà la pagination et créent le tri avec BCS. Dans mon cas, BCS fonctionne très bien avec les services WCF. Au début, je suis développer un service web avec un contrat de suivi:

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

alors je suis créé la définition BDC Lisez la liste Méthode pour cette méthode WCF avec des filtres pour tous ces paramètres. Je créé des filtres de comparaison, mais FilterType n'a pas dans ce cas sence. Après que je crée liste externe avec vue pour cette méthode. Ouvert ce Voir dans SharePoint Designer et modifier certains paramètres pour View 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>

Après tout mon service WCF fonctionne très bien avec ces paramètres et qui font la pagination côté serveur possible et le tri.

L'une spécifique de cette solution - est que le nombre d'éléments, extraites de la BCS doit être encrease sur chaque page le nombre de [taille de la page] +1. « +1 » fait SharePoint pour ajouter « bouton suivant ». Par exemple: vous devez récupérer 121 articles pour BCS si vous voulez obtenir 4ème page et la taille de la page est de 30 éléments

Autres conseils

Oubliez les outils tiers. Je suis capable de gérer ce problème très en modifiant l'appel sql dans le service WCF et en utilisant le filtrage qui est construit pour le BCS via SharePoint Designer. J'ai blogué à ce sujet ici.

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

Voici les étapes de base:

  1. Créer une méthode de service WCF pour appeler la base de données en utilisant un paramètre pour retourner les limites de la ligne.
  2. Créer une liste fonction de lecture pour la WCF en utilisant SharePoint Designer. entrer dans la description d'image ici Assurez-vous que le type de filtre est numéro de page entrer image description ici
  3. Définissez un filtre pour cette méthode dans SharePoint Designer. Assurez-vous que vous passez le filtre PageNumber comme paramètre à cette méthode

IEnumerable publique getAllItemsPaged (int PageNum)         {}

  1. Dans votre méthode WCF, accepter que le paramètre de filtre et effectuer des calculs pour déterminer quel ensemble de données à la requête. Votre requête SQL sera quelque chose comme:

string SqlQueryStr = @ "SELECT *                 FROM (SELECT ROW_NUMBER () OVER (ORDER BY OrderDate) AS ROWNUM, *                 FROM commandes                 OÙ OrderDate> = '1980-01-01'                 ) AS RowConstrainedResult                 OÙ rownum> = "+ ((1000 * PageNum) + 1) +"                 ET ROWNUM < "+ UpperLimit +"                 ORDER BY ROWNUM ";

donc en gros vous allez articles rampants 1000 à la fois.

  1. Vide sanitaire. Lorsque vous analysez cela, SharePoint appellera cette méthode et passer le PageNum à cette méthode 0 puis appellera à nouveau et passer « 1 », puis « 2 », ... ainsi de suite et ainsi de suite jusqu'à ce tout rampe.

L'espoir qui aide

Voici l'exemple d'échange côté serveur dans Outils Foudre:

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

Il est exemple de connectivité .NET, vous pouvez le faire fonctionner avec une extrémité arrière, y compris SQL Server. Il est le meilleur que nous pourrions trouver, mais il est pas parfait, car il fait TOP N, par opposition à une page fois.

Gardez à l'esprit qu'il aura un effet sur le filtrage comme la même méthode « Readlist » est appelée lorsque le filtre est rempli, donc les données du filtre est paginée aussi. Vous pouvez contourner cela avec l'inspection des variables de forme, mais il est un lenghty et processus aki.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top