2017-03-20 14 views
0

私の特定の問題は、私は次の形式でURLを与えられていますということです。SharePointサイトでCSOMを使用して複数のリストを照会することはできますか?

https://sharepoint.business.com/sites/SHAREPOINT/_layouts/15/DocIdRedir.aspx?ID=SHAREPOINT-823645913-12

直接最初のサーバ絶対ファイルパスに変換せずに、リンクの種類を使用して文書データを取得する方法はありません例えば:指定されたURLから

https://sharepoint.business.com/sites/SHAREPOINT/Documents/TestDocument.pdf

、私は本当に思われるので、現在、私の唯一の解決策は、ループ内のすべてのリストを照会することで、私は実際の文書を見つけるなるリストの兆候を持っていません悪い不完全な

一意のドキュメントIDを使用して、SharePointサイト全体のすべてのデータを照会するシンプルでエレガントな方法はありますか?

現在の擬似コード:

ListCollection lists = SharePoint.Client.Web.Lists; 

ctx.Load(lists); 

ctx.ExecuteQuery(); 

Loop at all lists { 
    Use CAML query to grab absolute file path from Document ID. 
} 

Retrieve individual file that I actually want, using GetFileByServerRelativeUrl API method. 

事前のおかげで、私は何かを明確にする必要がある場合は私に知らせてください。

答えて

1

はい、検索APIを使用してウェブまたはサイトコレクション全体を検索します。

using Microsoft.SharePoint.Client.Search; 
using Microsoft.SharePoint.Client.Search.Query; 

string documentId = "SHAREPOINT-823645913-12"; 
KeywordQuery kQry = new KeywordQuery(clientContext); 
kQry.QueryText = "DocId:" + documentId; 
SearchExecutor searchExec = new SearchExecutor(clientContext); 
ClientReuslt<ResultTableCollection> results = searchExec.ExecuteQuery(kQry); 
clientContext.ExecuteQuery(); 

foreach(var result in results.Value[0].ResultRows) 
{ 
    //do stuff with result which contains the URL property for the document 
    //along with any other crawled attribtues 
} 
+0

ありがとう@マートン、これは動作します。しかし、サーバーがSearch API要求を拒否しないように、私が使用していた認証(私の特定のシナリオで)を変更しなければならないことに注意する価値があります。 –

+0

素晴らしい、私はそれがうまくいってうれしい:)あなたが特定の認証要件のために少し微調整しなければならなかった – Maarten

関連する問題