2013-04-13 82 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

相关问题