2013-04-13 5 views
0

У нас есть система, в которой документы загружаются в библиотеку 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

И, если стороннее программное обеспечение не является вариантом, рассмотрите вопрос о размещении некоторых ваших камней, чтобы мы могли видеть, какие варианты вы делаете. –

+0

Интересное программное обеспечение. Знаете ли вы, способен ли он обходить указанные пределы? – Trent

ответ

0

Решил проблему, не полагаясь на CAML, чтобы найти файл. Вместо этого я использую GetFileByServerRelativeUrl, который не подпадает под ограничение элемента. Объект файла имеет метод ListItemAllFields, который позволяет запрашивать и устанавливать метаданные.

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

Если требовалось запросить большой список на основе критериев, которые не индексируются или не могут быть проиндексированы, то, по-видимому, решение включает использование объектов ContentIterator для вышивания списка небольшими партиями. Но это не похоже на API-интерфейс Client, поэтому я не понимаю, как вы должны программно работать с большими списками.

0

Возможно, вы могли бы создать другое поле (текстовое поле), которое было бы простой копией FileLeafRef, а затем индексировать это новое поле?

+0

К сожалению, для копирования файла FileLeafRef потребуется прочитать поле, о котором идет речь, что не получилось бы из-за порога представления списка. – Trent