Поделиться через


Краткий обзор объектной модели SharePoint

Это четвертая часть серии статей, посвященной основам разработки надстроек SharePoint, размещаемых у поставщика. Для начала вам следует ознакомиться со статьей Надстройки SharePoint и предыдущими статьями этой серии, представленными в разделе Знакомство с созданием надстроек SharePoint, размещаемых у поставщика.

Примечание.

Если вы изучали предыдущие статьи этой серии о размещаемых у поставщика надстройках, то у вас уже есть решение Visual Studio, которое можно использовать для работы с данной статьей. Кроме того, вы можете скачать репозиторий SharePoint_Provider-hosted_Add-Ins_Tutorials и открыть файл BeforeSharePointWriteOps.sln.

В этой статье мы немного отвлечемся от программирования и кратко рассмотрим клиентскую объектную модель (CSOM) SharePoint. Это большая модель. Она хорошо задокументирована на сайте MSDN в виде справочных статей, инструкций и примеров кода. В этой статье мы предоставим вам только самые поверхностные сведения. Тем не менее благодаря даже такому краткому описанию большая часть кода, с которым вы столкнетесь в этой серии статей, станет намного понятнее.

Иерархия контента

В таблице ниже показана иерархия контента в SharePoint, а также представляющие его классы CSOM. У каждого из этих объектов имеется дочерний элемент указанного непосредственно под ним типа.

Объект Класс Замечания
Локальная ферма SharePoint или подписка на SharePoint Online (также называемая клиентом) К этому уровню CSOM можно получить только ограниченный программный доступ. Например, нет классов Farm, Subscription или Tenant. (в серверной объектной модели SharePoint, которую невозможно использовать в надстройках, имеется программный доступ к этим объектам.)
Семейство веб-сайтов Site Семейство веб-сайтов, сгруппированных вместе большей частью по причинам, связанным с администрированием, а также для размещения компонентов SharePoint, например эталонных страниц с фирменным оформлением или пользовательских групп безопасности, которые можно применить ко всем дочерним веб-сайтам. Все веб-сайты принадлежат каким-либо семействам веб-сайтов.
веб-сайт Web Набор страниц и компонентов SharePoint. В нем могут содержаться вложенные веб-сайты.
список List На этом уровне размещаются библиотеки документов и другие типы библиотек файлов. Библиотека документов — это особый тип списка, в котором каждая строка содержит вложенный документ, а в других столбцах содержатся данные об этом документе, например сведения об авторе, дате и времени последнего изменения документа и о том, кто последним извлекал его.
элемент списка ListItem Строка в списке, то есть элемент списка, с определенными значениями в полях строки. Также имеет тип . См. следующую строку.
элемент списка Тип контента Тип элемента списка. Представлен классом ContentType. В своей основе каждый тип элемента списка это набор столбцов и метаданных. Самый простой тип содержимого встроенный Item. Все другие типы содержимого являются производными от типа Item. В SharePoint имеется много встроенных типов содержимого, например Event и Announcement.
столбец Field Объект Field включает не только информацию о базовом для него типе данных, но и сведения о том, каким образом форматировать и отображать данные в формах, например в формах создания, отображения и изменения элементов списка.

Вы можете программным способом создавать собственные списки, типы контента, типы столбцов и элементы списков.

Помимо доступа к контенту CSOM предоставляет доступ к пользователям, группам, ролям и разрешениям, таксономии, поиску и многому другому.

Клиентская среда выполнения и пакетная обработка

В CSOM используется система пакетной обработки. Она преобразовывает блоки управляемого кода в XML и отправляет их на сервер в одном HTTP-запросе. Для каждой команды система совершает вызов соответствующей серверной объектной модели, а сервер возвращает клиенту отклик в формате нотации объектов JavaScript (JSON).

Код SharePoint на клиенте начинается с получения клиентом объекта контекста, представляющего текущий контекст запроса, который включает идентификатор веб-сайта SharePoint (и его родительского семейства веб-сайтов). С помощью этого контекста вы можете получить доступ к объектам CSOM. Обратите внимание на

  using (var clientContext = spContext.CreateUserClientContextForSPHost())
  {
      // CRUD operation or query code goes here.

      clientContext.ExecuteQuery();
  }

указанные ниже особенности этого кода.

  • Объект spContext имеет тип SharePointContext и определен в файле SharePointContext.cs (или в файле SharePointContext.vb), который создается пакетом "Инструменты разработчика Office для Visual Studio". Вы можете изменять этот файл, но это требуется не так и часто. Для многих проектов надстройки SharePoint этот файл и файл TokenHelper.cs (или файл TokenHelper.vb), который также создается с помощью этих инструментов, эффективно работает в качестве расширений CSOM.

  • Объект clientContext относится к типу ClientContext модели CSOM.

  • Метод ExecuteQuery объединяет код операции CRUD в XML-сообщение, которое затем отправляет на сервер SharePoint. Там оно преобразуется в эквивалентный код серверной объектной модели, а затем выполняется.

В одной из предыдущих статей этой серии был пример этого шаблона (в приведенном ниже методе GetLocalEmployeeName).

private string GetLocalEmployeeName()
{
    ListItem localEmployee;

    using (var clientContext = spContext.CreateUserClientContextForSPHost())
    {
        List localEmployeesList = clientContext.Web.Lists.GetByTitle("Local Employees");
        localEmployee = localEmployeesList.GetItemById(listItemID);
        clientContext.Load(localEmployee);
        clientContext.ExecuteQuery();
    }
    return localEmployee["Title"].ToString();
}

Обратите внимание на указанные ниже особенности этого метода.

  • Первые две строки в блоке using получают ссылки на список и объект элемента списка. Но на самом деле, когда эти строки выполняются в клиентской среде выполнения SharePoint, они просто преобразовываются в формат XML. Метод ExecuteQuery отправляет полученный XML на сервер.

  • Метод Load добавляет дополнительную информацию в сообщение: он сообщает серверу, что указанный объект необходимо отправить на клиент. Метод ExecuteQuery получает этот объект (в виде JSON) и использует его для инициализации переменной localEmployee в клиенте. Последующий клиентский код затем ссылается на этот объект ListItem и его члены. Как вы видите, следующая строка ссылается на значение поля "Title" элемента. Если не вызван метод Load, то эта срока приведет к исключению, так как чтобы этот объект появился на стороне клиента, его необходимо загрузить.

Дальнейшие действия

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