Trouver un document en GUID
-
16-10-2019 - |
Question
Il me manque quelque chose qui doit être si simple qu'il est même pas demander la peine ... mais j'ai un ID d'objet (GUID) ... Comment puis-je savoir le document il pointe?
Par exemple, j'ai un GUID de 137DA01F-9AFD-5d9d-80C7-02AF85C822A8
et le besoin de savoir quel fichier / url il pointe.
La solution
Si vous connaissez le SPWeb, mais pas la bibliothèque de documents, vous pouvez utiliser SPWeb.GetFile
:
SPFile file = web.GetFile(guid);
Autres conseils
Simpliest cas
Considérez-vous que le document est stocké dans la norme « Documents partagés » bibliothèque de l'équipe modèle de site, vous devez utiliser ce code:
var library = web.GetListFromUrl("http://site/Shared%20Documents/Forms/AllItems.aspx");
var file = library.Items[new Guid("137DA01F-9AFD-5d9d-80C7-02AF85C822A8")].File;
// file.Url - site-relative url of the file
// file.OpenBinary() - get file contents (returns byte[])
Références MSDN:
- SPListItemCollection.Item (Guid)
- SPFile.OpenBinary (avec un exemple de code)
Bibliothèque avec des dossiers
Dans le cas plus complexe, lorsque vous avez des dossiers dans votre bibliothèque de documents, probablement la meilleure façon sera d'utiliser la requête CAML à cet effet:
var query = new SPQuery();
query.ViewAttributes = "Scope=\"Recursive\"";
query.View =
@"<Where>
<Eq>
<FieldRef Name=\"UniqueId\">
<Value Type='Text'>137DA01F-9AFD-5d9d-80C7-02AF85C822A8</Value>
</Eq>
</Where>";
var items = library.GetItems(query);
Bibliothèque inconnue
Si vous ne savent même pas dans quelle bibliothèque le fichier est stocké, vous devez passer par toutes les bibliothèques du site:
foreach (var library in web.Lists)
{
if (!library.Hidden && library is SPDocumentLibrary)
{
// ... try to get the file and so on
}
}
ID document
En outre, vous devriez certainement lire sur la fonction ID du document, qui vous permet de faire référence à un document où que vous soyez:
Note:. Votre Guid, bien sûr, n'est pas un numéro de document
Il y a la fonction SPList.GetItemByUniqueId , mais si vous ne sais pas quelle liste vous recherchez pas de chance.
Si vous utilisez SharePoint 2010, regardez la fonctionnalité ID document (qui se fixe un identifiant unique à un élément de la liste et utilise ensuite Rechercher pour trouver l'article). En fonction de vos besoins, vous pourriez envisager de mettre en œuvre « FindItemInSiteCollectionByUniqueId » en utilisant une approche similaire à ID document, faisant une guid propriété gérée et effectuer une recherche par code.