2010-06-04 3 views
1

Nous avons l'environnement SharePoint 2010 avec les ID de document activés.Requête et/ou recherche de l'ID de document SharePoint

Étant donné (partie d'un) ID de document, nous souhaitons récupérer par programmation les documents correspondant à cet ID. Le problème semble être que cette colonne est plutôt spéciale, en ce sens qu'elle peut nécessiter une manipulation spéciale.

En utilisant une requête SPSiteDataQuery, l'extraction du champ _dlc_DocId dans les champs de vue fonctionne correctement. Cependant, l'inclure dans le cadre de la requête n'aboutit jamais à la récupération de documents. L'utilisation de l'API de recherche ne nous a permis d'obtenir aucun résultat.

Quelqu'un a-t-il tiré ceci, ou des suggestions sur la façon de résoudre ce problème?

[Mise à jour] avère que nous avions trompés par des erreurs subtiles dans le XML et les mauvaises interprétations erronées de débogage. Ce truc fonctionne bien.

Répondre

4

Je ne contribue pas normalement à ce genre de choses parce que les gens plus intelligents que moi y arrivent avant moi, mais comme c'est un vieux sans réponse, je pense que je vais ajouter mes pensées pour ceux qui trouvent ça page.

Je me débattais avec ça mais après avoir creusé un peu et avoir appris un peu de Caml, j'ai réussi à le faire fonctionner. J'utilise le modèle d'objet client SharePoint par rapport à SharePoint 2010 et Office 365 bêta.

Commencez votre recherche en regardant l'ensemble des éléments de la liste requête:.

Microsoft.SharePoint.Client.CamlQuery.CreateAllItemsQuery() ViewXml

"<View Scope=\"RecursiveAll\">\r\n <Query>\r\n </Query>\r\n</View>"

un bâton où l'enfant à l'intérieur de la requête

ajouter ensuite dans

<Eq><FieldRef Name="_dlc_DocId" /><Value Type="Text">MDXC2KE55ASN-3-80</Value></Eq>

en remplaçant MDXC2KE55ASN-3-80 par l'ID de document que vous recherchez dans l'emplacement.

n'oubliez aussi que vous pouvez utiliser ceux-ci aussi:

<ViewFields><FieldRef Name="_dlc_DocId" /></ViewFields>

<RowLimit>1</RowLimit>

Ensuite, utilisez la méthode List.GetItems() pour ramener le ListItemCollection.

+0

Vous avez raison, merci d'avoir pris le temps de poster votre réponse. Depuis que nous avons posé la question, nous avons compris que cela fonctionnait après tout, exactement comme vous le décrivez (ce code a longtemps été utilisé en production). Nous interrogeons simplement le modèle d'objet SharePoint directement, plutôt que via un appel de service Web. –

0

Juste au cas où personne ne vient avec des solutions slicks des profondeurs de l'infrastructure Sharepoint:

Qu'est-ce que Google Do? Slice is, Dice it et le vider dans un index inverse.

Solide et Lucene offrent des outils suprêmes pour cela. L'idée est de couper le DocId en petits morceaux et d'ajouter l'emplacement du document dans le seau pour ce morceau.

Dire Nous avons "Un vrai document sympa" avec Id ABCD123. Vous ajouter aux seaux

ABCD, BCD1, CD12, D123

Lors de la recherche d'un ID partiel (+ d'autres données comme les dates, types, ...) vous (bien le moteur de recherche) crée la union des buckets + applique des contraintes additonnelles. Pour ce faire, vous devez écrire un spider pour le serveur sharepoint et une routine qui enregistre les éléments de données à indexer. Mettez une belle interface REST dans le menu (en fait SOLR l'a déjà), intégrez-la dans le serveur principal de sharepoint, et personne n'a besoin de savoir qu'il y a quelque chose d'autre derrière elle.

Ces produits peuvent également mettre à jour les index de manière incrémentielle afin qu'ils puissent être mis à jour.

0

Vous pouvez utiliser ce qui suit pour obtenir l'ID de document.

Fichier SPFile = MethodToUploadFileToServer (web, filepath); SPListItem item = fichier.Item; chaîne DocID = item.Properties ["_ dlc_DocId"]. ToString();

Questions connexes