Введение:
Работая с окружениями, где ограничен доступ к (продуктовой) ферме, часто для выполнения каких-либо операций требуется прибегать к некоторым хитростям: модификациям параметров, недоступных для использования через обычное веб-приложение, получение расширенных данных нежели доступных нам через обычные представления (view).
Так, любимые всеми администраторами и дизайнерами Sharepoint Designer и PowerShell могут быть запрещены на фермах, не давая нам полностью насладиться всей гибкостью предоставляемой платформы. Это наверняка правильно, потому что любая модификация на продуктовой должна быть обоснована и, если Вы прибегаете к клиентской модели, значит это действительно нужно.
Клиентская объектная модель и сборки
Для начала работы не обязательно иметь установленную у себя ферму Sharepoint, достаточно иметь недалеко в сети у своего друга по соседству. На то она и клиентская объектная модель, чтобы проводить множественные требуемые махинации не у себя на компьютере.
Клиентская объектная модель доступна в 3х вариациях:
- Клиентские приложение (WinForms, Console)
- Ecmascript
- Silverlight
В данной статье я буду ориентироваться на некоторые тонкости клиентских приложений, с которыми пришлось столкнуться именно мне.Чтобы начать работать необходимо иметь у себя распределяемые сборочки SCOM:
- Microsoft.SharePoint.Client.dll,
- Microsoft.SharePoint.Client.Runtime.dll
- Получить их можно 2мя способами:
- 1. Забрать их с Sharepoint сервера
- Путь для получения сборок: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI
- 2. Скачать и установить пакет со сборками
- MS SharePoint Foundation 2010 Client Object Model Redistibutable - http://www.microsoft.com/en-us/download/details.aspx?id=21786
- В последнем случае требуемые сборки после установки пакета находятся по адресу – C:\Program Files\Common Files\Microsoft Shared\SharePoint Client
401 Unathorized
Эту же вы ошибку Вы можете иногда встретить и при вызове CAML Builder приложения (http://www.u2u.net/Tools/wincamlquerybuilder/CamlQueryBuilder.aspx) . Насколько я понимаю, ошибка связана с тем, что либо изначально при составлении запросов клиентской объектной модели не указываются учетные данные пользователя, либо они не проходят на при повторной (second-hop) передаче данных.
- Что же, выход есть: используйте учетные данные (credentials) явно:
ClientContext Context = new ClientContext(http://…webadress…);
NetworkCredential Cred = new NetworkCredential("username", "password", "Domain");
Context.Credentials = Cred ;
Заполнение данными объектов клиентской моделью
Обращаясь к свойствам объектов SCOM, необходимо понимать, что данные в объектах заполняются не сразу. Что это значит? Это значит, что объявление объекта не дает Вам права сразу получить требуемое значение, скажем, какого-нибудь свойства объекта.
- Наверняка Вы еще не раз столкнетесь с такой или подобными ошибками, пророчишими отсутствие значения даже в переменной типа string:
ArgumentOutOfRangeException : index and count must refer to a location within the string
- Поэтому необходимо точно понимать, получили ли Вы значение в ходе запроса к удаленному серверу (Load, LoadQuery, ExecuteQueryAsync) или требуются дополнительные уточнения.
Полезные ссылки:
- Пакет для установки сборок клиентской удаленной модели -http://www.microsoft.com/en-us/download/details.aspx?id=21786
- Описание способов извлечения данных с использованием клиентской модели – http://msdn.microsoft.com/en-us/library/ee539350(v=office.14).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-11
- Описание классов клиентской объектной модели для Sharepoint 2010 находится по адресу: http://msdn.microsoft.com/en-us/library/ee544361(v=office.14).aspx
- Небольшая статья. Введение по клиентской объектной модели – http://praveenbattula.blogspot.ru/2010/02/sharepoint-2010-complete-details-about.html
- Разрешение ошибки 401 Unathorized – http://sharepoint.stackexchange.com/questions/10364/http-401-unauthorized-using-the-managed-client-object-model
