Запрос и / или поиск идентификатора документа SharePoint - PullRequest
1 голос
/ 04 июня 2010

У нас есть среда sharepoint 2010 с включенным Document ID.

Учитывая (часть) ID документа, мы хотим программно получить документ (ы), соответствующий этому идентификатору. Кажется, проблема в том, что этот столбец довольно особенный, потому что он может нуждаться в особой обработке.

Используя SPSiteDataQuery, выборка поля _dlc_DocId как части полей просмотра работает нормально. Однако включение его как части запроса , где никогда не приводит к извлечению каких-либо документов.

Использование API поиска ни к чему нас не привело.

Кто-нибудь проверял это или какие-либо предложения о том, как решить эту проблему?

[Обновление] Оказывается, нас одурачили тонкие ошибки в XML и неправильная интерпретация отладки. Этот материал просто отлично работает.

Ответы [ 3 ]

4 голосов
/ 14 июня 2011

Я обычно не участвую в такого рода вещах, потому что умнее людей, чем я всегда получаю, до меня, но так как это старый, без правильного ответа, я думаю, что я добавлю свои мысли для тех, кто находит эту страницу .

Я боролся с этим, но, немного покопавшись и немного изучив Caml, я заработал. Я использую объектную модель клиента SharePoint против бета-версии SharePoint 2010 и Office365.

Начните свой запрос, посмотрев на запрос всех элементов списка:

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 идентификатором документа, который вы ищете внутри где.

Также не забывайте, что вы тоже можете использовать их:

<ViewFields><FieldRef Name="_dlc_DocId" /></ViewFields>

<RowLimit>1</RowLimit>

Затем используйте метод List.GetItems (), чтобы вернуть коллекцию ListItemCollection.

0 голосов
/ 01 декабря 2010

Вы можете использовать следующее для получения идентификатора документа.

SPFile file = MethodToUploadFileToServer (web, filepath); SPListItem item = file.Item; строка DocID = item.Properties ["_ dlc_DocId"]. ToString ();

0 голосов
/ 12 июня 2010

На всякий случай, если никто не придет с изящными решениями из глубины инфраструктуры Sharepoint:

Что бы сделал Google?

Кусочек есть, нарезать кубиками и выбросить в обратный индекс.

Solr и Lucene предлагают превосходные инструменты для этого. Идея состоит в том, чтобы разрезать DocId на маленькие кусочки и добавить местоположение документа в корзину для этого кусочка.

Скажем, у нас есть "Отличный документ" с идентификатором ABCD123. Вы бы добавили его в ведра

ABCD, BCD1, CD12, D123

При поиске частичного идентификатора (+ другие данные, такие как даты, типы, ...) вы (в общем, поисковая система) создаете объединение сегментов + применяете дополнительные ограничения.

Чтобы это произошло, вам нужно написать паука для сервера sharepoint и подпрограмму, которая делает запись элементов данных для индексации.

Поместите хороший REST-интерфейс в него (на самом деле это есть в SOLR), интегрируйте его в основной сервер sharepoint, и никто не должен знать, что за ним что-то еще работает.

Эти продукты также могут постепенно обновлять индексы, чтобы их можно было обновлять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...