2011-11-18 4 views
4

Je tente d'obtenir un objet SPListItem à partir d'un ID unique (GUID). De regarder plusieurs sites (inc http://sharepoint400.blogspot.com/2011/04/using-spsitedataquery-to-find-list.html et http://www.chakkaradeep.com/post/Retrieving-an-Item-from-the-RootWeb-and-Subwebs-using-its-UniqueId.aspx) je suis venu avec le code ci-dessous.SharePoint: Get SPListItem par ID unique

const string QueryFormat = 
@"<Where> 
    <Eq> 
     <FieldRef Name='UniqueId' /> 
     <Value Type='Lookup'>{0}</Value> 
    </Eq> 
</Where>"; 

      SPSiteDataQuery query = new SPSiteDataQuery(); 
      query.Webs = "<Webs Scope='SiteCollection' />"; 
      query.Lists = "<Lists BaseType='0'/>"; 
      query.Query = string.Format(QueryFormat, itemUniqueId); 
      query.RowLimit = 1; 
      //query.ViewFields = "<FieldRef Name='WebID' /><FieldRef Name='ListID' /><FieldRef Name='ID' />"; 

      var results = SPContext.Current.Web.GetSiteData(query); 

Cependant, peu importe ce que ... Je semble toujours obtenir zéro lignes retournées. Je ne comprends pas pourquoi, parce que je sais que les Guids que j'utilise sont corrects.

Des idées?

+0

Avez-vous envisagé d'ajouter un type récursif à votre requête? Pourriez-vous également nous montrer comment et où vous passez dans le GUID et sous quelle forme? Etes-vous uniquement concerné par des éléments de liste et non par des listes, des sites Web ou des sites? Connaissez-vous la liste cible ou le web de l'article? Etes-vous limité à utiliser CAML? Connaissez-vous la méthode '$ listItem = $ spList.GetItemByUniqueId ($ targetGuid)'? Comme vous pouvez le voir, il y a beaucoup de questions qui exigent des réponses avant que quiconque puisse fournir une réponse significative. – Panoone

Répondre

-2

Veuillez essayer de supprimer tous les espaces de la chaîne QueryFormat. Utilisez quelque chose comme ceci:

"<Where><Eq><FieldRef Name=\"UniqueId\" /><Value Type=\"Lookup\">{0}</Value></Eq></Where>" 

SharePoint n'aime pas ces espaces.

Je suggère également d'utiliser l'une des bibliothèques pour générer des requêtes Caml comme: http://camldotnet.codeplex.com/ ou http://camlex.codeplex.com/

-1

Il y a un type non valide pour l'identification unique, il devrait être Guid. Mettez à jour votre requête:

<Where> 
    <Eq> 
     <FieldRef Name='UniqueId'/> 
     <Value Type='Guid'>{0}</Value> 
    </Eq> 
</Where> 
+0

Ceci est incorrect. Le champ Type et TypeAsString pour UniqueId est en effet Lookup. – Panoone