GUIDでドキュメントを検索します
-
16-10-2019 - |
質問
尋ねる価値さえないほど単純なものが欠けています...しかし、私はオブジェクトID(GUID)を持っています...それが指し示すドキュメントをどのように把握するのですか?
たとえば、ガイドがあります 137DA01F-9AFD-5d9d-80C7-02AF85C822A8
また、どのファイル/URLを指しているかを知る必要があります。
解決
spwebを知っているがドキュメントライブラリではない場合は、使用できます SPWeb.GetFile
:
SPFile file = web.GetFile(guid);
他のヒント
最も簡単なケース
ドキュメントは、チームサイトテンプレートから標準の「共有ドキュメント」ライブラリに保存されていることをご存知だと思います。このコードを使用する必要があります。
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[])
MSDN参照:
- splistitemcollection.item(guid)
- spfile.openbinary (サンプルコード付き)
フォルダー付きライブラリ
より複雑な場合、ドキュメントライブラリにいくつかのフォルダーがある場合、おそらく最良の方法は、この目的のためにCAMLクエリを使用することです。
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);
図書館不明
ファイルがどのライブラリに保存されているかわからない場合は、サイトのすべてのライブラリを通過する必要があります。
foreach (var library in web.Lists)
{
if (!library.Hidden && library is SPDocumentLibrary)
{
// ... try to get the file and so on
}
}
ドキュメントID
また、ドキュメントID機能についてはきっと読む必要があります。これにより、どこからでもドキュメントを参照できます。
http://blogs.technet.com/b/blairb/archive/2009/10/20/new-document-id-feature-in-sharepoint-2010.aspx
注:もちろん、GUIDはドキュメントIDではありません。
あります splist.getItembyuniqueid 機能しますが、どのリストを検索するかわからない場合は、運が悪いです。
SharePoint 2010を使用している場合は、ドキュメントID機能(一意のIDをリストアイテムに添付し、検索を使用してアイテムを見つける)をご覧ください。要件に応じて、ドキュメントIDに同様のアプローチを使用して「findIteminsitecollectionbyuniqueid」を実装し、GUIDが管理されたプロパティを作成し、コードを介して検索を実施することを検討する場合があります。