2013-04-13 80 views
0

我們有一個系統,使用Web界面將文檔上傳到SharePoint庫。我正在使用客戶端API完成此操作。具體而言,我使用SaveBinaryDirect上傳文檔,之後使用CAML查詢檢索文檔,以便可以設置元數據列。 CAML查詢根據FileLeafRef字段檢索文檔,該字段用上載的文檔的文件名填充。Sharepoint 2010:以編程方式將文檔添加到大型圖書館

問題是,SharePoint強加任何查詢返回5000個項目的最大限制,所以一旦文檔庫增長到5000個項目,CAML查詢將不再起作用。 (儘管它只返回單個文檔,但顯然需要掃描整個庫)

我已經調查了索引列,但顯然你不能索引FileLeafRef,並且它似乎是唯一的字段是上傳後立即填入文檔名稱。 我已經通過將項目限制從5000增加到10000來推遲了這個問題,但我們即將迎頭趕上這個新的限制,並且人們開始報告間歇性的性能問題。

是否有任何方法通過客戶端API上傳文檔並設置其元數據,但不會超過最大項目限制?

+1

您可以嘗試查看使用連接器是否有任何性能優勢。例如http://www.bendsoft.com/net-sharepoint-connector/。這種工具的建立是爲了處理像你這樣的情況。 –

+0

而且,如果第三方軟件不是一個選項,請考慮發佈一些你的caml,以便我們可以看到你正在做什麼樣的選擇。 –

+0

有趣的軟件。你知道是否有能力規避上述項目限制? – Trent

回答

0

通過不依靠CAML找到文件解決了這個問題。相反,我使用GetFileByServerRelativeUrl,它不受項目限制。該文件對象有一個名爲ListItemAllFields的方法,它允許您查詢和設置元數據。

如果需要返回具有文件名以外的條件的項目,上述方法將允許最初設置元數據,從而可以存儲和索引滿足查詢所需的任何條件。

如果需要根據未建立索引或無法建立索引的條件來查詢大型列表,則顯示解決方案涉及使用ContentIterator對象以小批量方式將列表分出。但是,這似乎並不適用於客戶端API,所以我不知道如何以編程方式使用大型列表。

0

也許你可以創建另一個字段(一個文本字段),它將成爲FileLeafRef的一個簡單副本,然後索引這個新字段?

+0

不幸的是,複製FileLeafRef的行爲需要讀取有問題的字段,由於列表視圖閾值而導致該字段失敗。 – Trent

相關問題