我们拥有启用了文档ID的sharepoint 2010环境。
给定(部分)Doc ID,我们希望以编程方式检索与该ID匹配的文档。问题似乎是这个专栏很特别,因为它可能需要特殊处理。
使用SPSiteDataQuery,将_dlc_DocId字段作为 viewfields 的一部分提取工作正常。但是,将其作为的一部分包含在查询中,永远不会导致获取任何文档。
使用搜索API让我们无处可去。
是否有人撤消此消息,或有任何关于如何解决此问题的建议?
[更新] 原来我们被XML中的细微错误和糟糕的调试错误解释所迷惑。这个东西工作正常。
答案 0 :(得分:4)
我通常不会为这些事情做出贡献,因为比我更聪明的人总是在我之前到达那里,但由于这是一个没有正确答案的老人,我想我会为找到这个页面的人添加我的想法
我正在努力解决这个问题,但经过一番挖掘并学习了一点Caml后,我得到了这个工作。 我正在使用针对SharePoint 2010和Office365测试版的SharePoint客户端对象模型。
通过查看所有列表项查询来开始查询:
Microsoft.SharePoint.Client.CamlQuery.CreateAllItemsQuery()。ViewXml
"<View Scope=\"RecursiveAll\">\r\n <Query>\r\n </Query>\r\n</View>"
在查询中粘贴一个孩子
然后加入
<Eq><FieldRef Name="_dlc_DocId" /><Value Type="Text">MDXC2KE55ASN-3-80</Value></Eq>
将MDXC2KE55ASN-3-80替换为您在其中寻找的文档ID。
另外请不要忘记您也可能想要使用这些:
<ViewFields><FieldRef Name="_dlc_DocId" /></ViewFields>
<RowLimit>1</RowLimit>
然后使用List.GetItems()方法返回ListItemCollection。
答案 1 :(得分:0)
以防万一没有人从Sharepoint基础架构深处获得灵活的解决方案:
Google会做什么?
Slice is,Dice it并将其转储到反向索引中。
Solr和Lucene为此提供了至高无上的工具。我们的想法是将DocId切成小块,并将文档的位置添加到该块的桶中。
说我们拥有Id ABCD123的“真正优秀的文档”。您可以将其添加到存储桶
ABCD,BCD1,CD12,D123
当搜索部分ID(+其他数据,如日期,类型......)时,您(以及搜索引擎)会创建存储桶的并集+应用附加约束。
要实现这一点,您需要为sharepoint服务器编写一个蜘蛛,并编写一个例程,用于记录要编制索引的数据元素。
在其中放置一个漂亮的REST接口(实际上SOLR已经有了),将它集成到主sharepoint服务器中,没有人需要知道其后面还有其他东西在运行。
这些产品还可以逐步更新索引,因此可以保持最新状态。
答案 2 :(得分:0)
您可以使用以下内容获取文档ID。
SPFile file = MethodToUploadFileToServer(web,filepath); SPListItem item = file.Item; string DocID = item.Properties [“_ dlc_DocId”]。ToString();