Создание надстроек с размещением у поставщика, включающих пользовательский список SharePoint и тип контента

Узнайте, как создать надстройку SharePoint, которая объединяет веб-приложение, размещаемое в облаке, с размещаемыми в SharePoint пользовательскими шаблонами списков, экземплярами списков и пользовательскими типами контента, с помощью Visual Studio Office Developer Tools. Узнайте, как взаимодействовать с сайтами надстроек SharePoint с помощью веб-службы REST/OData и как реализовать OAuth в надстройке SharePoint.

Большинство классических компонентов SharePoint, таких как пользовательские типы контента, настраиваемые определения списков и рабочие процессы, можно включить в надстройку SharePoint, размещенную в облаке. Простейший пример в данной статье включает в себя следующее:

  • Сайт надстройки:

    • с настраиваемыми столбцами сайтов;

    • пользовательским типом контента, использующим настраиваемые столбцы;

    • пользовательским шаблоном списка, в котором используется этот пользовательский тип контента;

    • экземпляром списка, основанным на пользовательском определении.

  • Веб-приложение ASP.NET, считывающее данные из экземпляра списка.

Необходимые условия для создания этой надстройки SharePoint

  • Visual Studio

  • В состав Visual Studio входят Инструменты разработчика Microsoft Office для Visual Studio, но иногда выход новой версии инструментов не совпадает с выходом обновлений Visual Studio. Чтобы убедиться, что вы используете последнюю версию инструментов, запустите установщик Инструментов разработчика Office для Visual Studio 2013 или установщик Инструментов разработчика Office для Visual Studio 2015.

  • Установка SharePoint для тестирования и отладки

    • Это может быть на том же компьютере, что и компьютер разработчика, или вы можете разрабатывать с помощью удаленной установки SharePoint. Разработка может также выполняться посредством удаленной установки sp15allshort. Если вы работаете с удаленной установкой, необходимо установить распространяемую клиентскую модель объекта для целевой установки. Она доступна в качестве распространяемого пакета в Центре загрузки Майкрософт — выполните поиск по словам "пакет SDK для клиентских компонентов SharePoint Server 2013" или "пакет SDK для клиентских компонентов SharePoint Online".

    • Тестовый веб-сайт SharePoint должен быть основан на определении сайта Сайт разработчика, которое можно создать в центре администрирования.

    • Удаленное веб-приложение взаимодействует с сайтом надстройки либо с помощью JavaScript и междоменной библиотеки, либо с помощью OAuth. Если используется протокол OAuth (как в примере из этой статьи), то установка SharePoint должна быть настроена на использование OAuth.

    Примечание.

    Инструкции по настройке подходящей среды разработки см. в разделе Два типа надстроек SharePoint (с размещением в SharePoint и у поставщика).

Ключевые понятия, которые необходимо знать при создании надстройки

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

Название статьи Описание
Надстройки SharePoint Изучите новую модель надстроек в SharePoint, с помощью которой можно создавать небольшие и удобные в использовании надстройки для пользователей.
Важные аспекты разработки и архитектуры для надстроек SharePoint Изучите аспекты архитектуры надстроек SharePoint и Модель для надстроек SharePoint, в том числе параметры размещения надстроек и пользовательского интерфейса, систему развертывания, систему безопасности и жизненный цикл.
Выбор шаблонов для разработки и размещения надстройки SharePoint Узнайте о различных способах размещения надстроек SharePoint.

Разработка надстройки SharePoint

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

Настройка решения Visual Studio и его элементов

  1. В Visual Studio создайте проект Надстройка для SharePoint из узла Office SharePoint | Надстройки (в разделе C# или Visual Basic) в дереве шаблонов мастера создания проекта. Выберите вариант Размещено у поставщика. В примере из этой статьи используется язык C# и задано имя проекта LocalTheater.

  2. В мастере нажмите кнопку Готово.

  3. Откройте файл AppManifest.xml в конструкторе манифеста. По умолчанию в качестве значения элемента Title используется имя проекта. Замените его более понятным именем, так как именно это имя надстройки будет отображаться в интерфейсе для пользователей.

  4. Укажите имя надстройки. Это внутреннее имя, которое может состоять только из символов ASCII и не содержать пробелов, например LocalTheater.

  5. Откройте файл Web.config в проекте веб-приложения и добавьте элемент <customErrors mode="Off"/> к элементу system.web.

  6. Убедитесь, что в проекте веб-приложения есть ссылки на указанные ниже сборки. Если ваш выпуск Visual Studio не добавил ссылки автоматически, добавьте их сейчас.

    • Microsoft.IdentityModel.dll. Эта сборка устанавливается в глобальном кэше сборок с Windows Identity Foundation (WIF). Так как это сборка .NET Framework 3.5, она по умолчанию отфильтровывается из узла Framework диалогового окна Добавление ссылки. Чтобы добавить ссылку на нее, перейдите непосредственно к каталогу C:\Program Files\Reference Assemblies\Microsoft\Windows Identity Foundation\v3.5 на компьютере для разработки.

    • Microsoft.IdentityModel.Extensions.dll. Чтобы добавить ссылку на нее, перейдите непосредственно к папке C:\Program Files\Reference Assemblies\Microsoft\Microsoft Identity Extensions\1.0 на компьютере для разработки.

    • System.IdentityModel.dll. Эта сборка входит в состав .NET Framework 4 и отображается в узле Сборки | Framework диалогового окна Добавление ссылки.

  7. Если удаленное веб-приложение получает доступ к данным не только на сайте надстройки, но и на хост-сайте, то необходимо добавить элемент AppPermissionRequests с одним или несколькими элементами AppPermissionRequest в файл AppManifest.xml. (Веб-приложение в следующем примере этой статьи обращается только к веб-сайту надстройки. Субъекты надстроек автоматически имеют все разрешения, необходимые для веб-сайта надстройки, поэтому AppManifest.xml в примере не имеет элемента AppPermissionRequests .) Дополнительные сведения о запросах на разрешения надстроек и их добавлении см. в разделе Разрешения надстроек в SharePoint.

Добавление компонентов SharePoint

Компоненты SharePoint добавляются в надстройку точно так же, как и в классическое решение для фермы. Однако в надстройку SharePoint можно включать компоненты SharePoint не всех типов. В надстройках SharePoint задачи этих компонентов выполняются другими способами.

Подробные сведения о том, какие компоненты SharePoint можно включить в надстройку SharePoint и как добавить их в проект, см. в статье Типы компонентов SharePoint, которые можно включать в надстройки SharePoint.

Для примера используйте описанные ниже процедуры. В них приводятся примеры использования Visual Studio, с помощью которых можно добавить настраиваемые столбцы, типы контента, а также шаблоны и экземпляры списков в надстройку SharePoint.

Создание пользовательских типов столбцов

  1. В обозревателе решений добавьте в проект надстройки SharePoint элемент Столбец сайта с именем Actor.

  2. В файле elements.xml нового столбца сайта измените элемент Field так, чтобы он содержал атрибуты и значения, указанные в примере ниже, однако не меняйте GUID атрибута ID. Оставьте для него значение, созданное Visual Studio. Не забудьте добавить фигурные скобки: "{}".

    <Field ID="{generated GUID}" 
        Name="Actor" 
        Title="Actor" 
        DisplayName="Actor/Actress" 
        Group="Theater and Movies" 
        Description="The person cast, perhaps tentatively, in the role" 
        Type="Text" 
    />
  1. Добавьте в проект еще один элемент Столбец сайта с именем CastingStatus.

  2. В файле elements.xml для нового столбца сайта отредактируйте элемент Field, указав атрибуты и значения, показанные в приведенном ниже примере, но не меняйте GUID в атрибуте ID, оставив значение, заданное средой Visual Studio.

  <Field ID="{generated GUID}" 
      Name="CastingStatus" 
      Title="CastingStatus"
      DisplayName="Casting Status" 
      Group="Theater and Movies" 
      Description="The current casting status of the role" 
      Type="Choice">
  </Field>
  1. Так как это поле является полем выбора (Choice), необходимо указать возможные варианты, порядок их отображения в выпадающем списке перед пользователем, который должен сделать выбор, и вариант по умолчанию. Добавьте следующую дочернюю маркировку к элементу Field
  <CHOICES>
      <CHOICE>Not Started</CHOICE>
      <CHOICE>Audition Scheduled</CHOICE>
      <CHOICE>Auditioned</CHOICE>
      <CHOICE>Role Offered</CHOICE>
      <CHOICE>Committed to Role</CHOICE>
  </CHOICES>
  <MAPPINGS>
      <MAPPING Value="1">Not Started</MAPPING>
      <MAPPING Value="2">Audition Scheduled</MAPPING>
      <MAPPING Value="3">Auditioned</MAPPING>
      <MAPPING Value="4">Role Offered</MAPPING>
      <MAPPING Value="5">Committed to Role</MAPPING>
  </MAPPINGS>
<Default>Not Started</Default>

Создание пользовательского типа контента

  1. В обозревателе решений добавьте в проект надстройки SharePoint элемент Тип контента с именем ActingRole. По запросу мастера выберите базовый тип содержимого Элемент и нажмите кнопку Готово.

  2. Если конструктор типа контента не откроется автоматически, выберите тип контента ActingRole в обозревателе решений, чтобы открыть его.

  3. Откройте вкладку Тип контента в конструкторе и заполните текстовые поля следующим образом:

    • Имя типа контента: ActingRole.

    • Описание: "Represents a role in a play or movie" (Соответствует роли в пьесе или фильме).

    • Имя группы: "Theater and Movies" (Театр и кино).

  4. Убедитесь, что на вкладке не установлен ни один флажок. Флажок Наследует столбцы родительского типа содержимого может быть установлен по умолчанию. Обязательно снимите его.

  5. Откройте вкладку конструктора Столбцы.

  6. С помощью сетки добавьте к типу контента два новых столбца сайта. В раскрывающемся списке показаны их отображаемые имена: Actor/Actress (Актер или актриса) и Casting Status (Статус кастинга). (Если они отсутствуют в списке, возможно, вы не сохранили проект с момента добавления столбцов пользовательского сайта. Выберите Сохранить все).

  7. Сохраните файл и закройте конструктор.

  8. На следующем этапе вам потребуется работать непосредственно с необработанным XML-кодом типа контента, поэтому в обозревателе решений необходимо выбрать дочерний файл elements.xml типа контента ActingRole.

  9. В файле для двух добавленных вами столбцов уже есть элементы FieldRef. Добавьте элементы FieldRef для двух встроенных столбцов SharePoint, которые будут равнозначны двум уже имеющимся. Ниже приведена разметка для элементов. Необходимо использовать эти же идентификаторы GUID для атрибута ID, так как это встроенные типы полей с фиксированными ID. Добавьте их над двумя элементами FieldRef настраиваемых столбцов сайта.

  <FieldRef Name="LinkTitle" ID="{82642ec8-ef9b-478f-acf9-31f7d45fbc31}" DisplayName="Character" />
  <FieldRef Name="Title" ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" DisplayName="Character" />

Обратите внимание на то, что мы задали для этих полей отображаемое имя Character (Герой пьесы или фильма).

Создание пользовательского шаблона и экземпляра списка

  1. Добавьте к проекту надстройки SharePoint элемент Список с именем CharactersInShow. На странице Выбор параметров списка в мастере настройки SharePoint оставьте заданное по умолчанию отображаемое имя списка (CharactersInShow), выберите параметр Создать настраиваемый список на основе, а затем выберите из раскрывающегося списка пункт По умолчанию (пустой). Нажмите кнопку Готово.

  2. После завершения работы мастера будет создан шаблон списка CharactersInShow с экземпляром дочернего списка под названием CharactersInShowInstance. По умолчанию может открыться конструктор списка. Он понадобится в следующем шаге.

  3. Откройте дочерний файл elements.xml шаблона списка CharactersInShow (не для списка CharactersInShowInstance).

  4. Измените значение атрибута DisplayName на более понятное: Characters in Show (Герои представления).

  5. Для атрибута Description задайте значение The characters in a play or movie (Персонажи пьесы или фильма).

  6. Оставьте для других атрибутов значения по умолчанию, а затем сохраните и закройте файл.

  7. Если конструктор списка не открыт, выберите узел CharactersInShow в обозревателе решений.

  8. Откройте вкладку Столбцы конструктора и нажмите кнопку Типы контента.

  9. В диалоговом окне настроек типа контента Параметры типов содержимого добавьте тип контента ActingRole.

  10. Выберите в списке тип контента ActingRole, а затем нажмите кнопку По умолчанию.

  11. Выберите тип контента Item, щелкните правой кнопкой мыши маленькую стрелку слева от имени типа контента и выберите пункт Удалить.

  12. Повторите предыдущий этап для типа контента Folder, чтобы в списке остался только тип контента ActingRole. Нажмите кнопку ОК, чтобы закрыть диалоговое окно.

  13. Теперь в списке столбцов три пункта. Выберите тип контента Title, щелкните правой кнопкой мыши маленькую стрелку слева от имени типа контента и выберите пункт Удалить. Теперь должно отображаться только два столбца: Actor/Actress (Актер или актриса) и Casting Status (Статус кастинга).

  14. Откройте вкладку Список конструктора. Данная вкладка используется для настройки определенных значений применительно к экземпляру списка, а не шаблона списка.

  15. Замените значения на этой вкладке следующими:

  • Заголовок: "Герои пьесы «Гамлет»"

  • URL-адрес списка: Lists/CharactersInHamlet

  • Описание: "Герои пьесы «Гамлет» и сведения о кастинге".

Оставьте установленные по умолчанию флажки и закройте конструктор.

  1. В обозревателе решений может отображаться старое имя экземпляра списка. В таком случае откройте контекстное меню элемента CharactersInShowInstance, выберите пункт Переименовать и замените имя на CharactersInHamlet.

  2. Откройте файл schema.xml.

  3. Файл может содержать два ContentType элемента, один со значением атрибута Name, относящегося к ActingRole, другой — под именем ListFieldsContentType. Подходит только один, под названием ActingRole, поэтому удалите остальные элементы ContentType.

    Примечание.

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

  4. Элемент Fields должен включать два элемента Field (если между ними нет разрыва строки, они будут находиться в одной строке). Один из них должен быть точной копией элемента Field из файла elements.xml для столбца сайта Actor, а другой — точной копией элемента Field из файла elements.xml для столбца сайта CastingStatus. Если совпадение не точное (с учетом всех дочерних элементов, например CHOICES и MAPPINGS), скопируйте элемент Field из файла elements.xml в столбце сайта и вставьте его вместо элемента Field в файле schema.xml.

  5. Находясь в файле schema.xml, в элементе View, чье значение BaseViewID равно 0, замените существующий элемент ViewFields следующей разметкой. (Используйте именно этот GUID для параметра FieldRef с именем LinkTitle.)

  <ViewFields>
    <FieldRef Name="Title" ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" DisplayName="Character" />
    <FieldRef Name="Actor" ID="{GUID from the site column elements.xml}" />
    <FieldRef Name="CastingStatus" ID="{GUID from the site column elements.xml}" />
  </ViewFields>
  1. Замените два отсутствующих значения атрибута ID на идентификаторы GUID в соответствующих файлах elements.xml столбцов сайтов. Не забудьте добавить фигурные скобки: "{}".

  2. Не закрывая файл schema.xml, в элементе View, значение BaseViewID которого равно 1, кажите вместо существующего элемента ViewFields следующие исправления. (Используйте именно этот GUID для параметра FieldRef с именем LinkTitle.)

  <ViewFields>
    <FieldRef Name="LinkTitle" ID="{82642ec8-ef9b-478f-acf9-31f7d45fbc31}" DisplayName="Character" />
  </ViewFields>
  1. Скопируйте два элемента FieldRef для Actor иCastingStatus, добавленные в предыдущее представление в этот элемент ViewFields, как одноуровневые LinkTitle элементы FieldRef.

  2. Сохраните и закройте файл schema.xml.

  3. Откройте файл elements.xml, являющийся дочерним объектом экземпляра списка CharactersInHamlet

  4. Заполните список какими-либо начальными данными, добавив приведенную ниже разметку в качестве дочерних объектов элемента ListInstance.

    <Data>
      <Rows>
        <Row>
          <Field Name="Title">Hamlet</Field>
          <Field Name="Actor">Tom Higginbotham</Field>
          <Field Name="CastingStatus">Committed to Role</Field>
        </Row>
        <Row>
          <Field Name="Title">Claudius</Field>
          <Field Name="Actor"></Field>
          <Field Name="CastingStatus">Not Started</Field>
        </Row>
        <Row>
          <Field Name="Title">Gertrude</Field>
          <Field Name="Actor">Satomi Hayakawa</Field>
          <Field Name="CastingStatus">Auditioned</Field>
        </Row>
        <Row>
          <Field Name="Title">Ophelia</Field>
          <Field Name="Actor">Cassi Hicks</Field>
          <Field Name="CastingStatus">Committed to Role</Field>
        </Row>
        <Row>
          <Field Name="Title">The ghost</Field>
          <Field Name="Actor">Lertchai Treetawatchaiwong</Field>
          <Field Name="CastingStatus">Role Offered</Field>
        </Row>
      </Rows>
    </Data>
  1. В обозревателе решений выберите элемент Компонент1, чтобы открыть конструктор компонентов. В конструкторе задайте для поля Заголовок значение Theater and Movie Data Components (Компоненты данных для театра и кино), а для поля ОписаниеSite columns, content types, and list instances for data about theater and movies (Столбцы сайтов, типы контента и экземпляры списков для данных о театре и кино). Сохраните файл и закройте конструктор.

  2. Если элемент Feature1 в обозревателе решений не был переименован, откройте его контекстное меню, выберите пункт Переименовать и укажите имя TheaterAndMovieDataComponents.

Написание кода проекта удаленного веб-приложения

Вы можете разрабатывать веб-приложение аналогично любому другому веб-приложению для предпочитаемой вами платформы. Для стека Майкрософт можно использовать веб-службу REST/OData или одну из клиентских объектных моделей в SharePoint. Для стека, отличного от Корпорации Майкрософт, можно использовать конечные точки REST/OData в SharePoint для выполнения операций создания, чтения, обновления и удаления (CRUD) с данными в веб-сайте надстройки.

Примечание.

Добавляя ссылку на сборку в проект веб-приложения в Visual Studio, присвойте свойству Копировать локально значение True, если не знаете, установлена ли сборка на веб-сервере, или не можете гарантировать, что она будет установлена до развертывания надстройки. Платформа .NET Framework установлена для веб-ролей Microsoft Azure и веб-сайтов Azure. Но сборки клиента SharePoint, а также платформы и расширения управляемого кода Майкрософт не установлены. Инструменты разработчика Office для Visual Studio автоматически добавляют ссылки на некоторые сборки, часто используемые в надстройках SharePoint, и устанавливают свойство Копировать локально.

В следующем примере вы разрабатываете веб-приложение ASP.NET. Выполните следующие действия.

  1. Откройте файл Default.aspx и замените элемент body в файле указанной ниже разметкой. Разметка добавляет кнопку Получить приведение , которая при выборе считывает список Символы в Гамлете , который находится на сайте надстройки, и отображает свои данные в элементе управления GridView , который отображается только после нажатия кнопки.
  <body >
    <form id="form1" runat="server">
      <div>
        <h2>Local Theater</h2>
      </div>
      <asp:Literal ID="Literal1" runat="server"><br /><br /></asp:Literal>
      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Get the Cast"/>
      <asp:Literal ID="Literal2" runat="server"><br /><br /></asp:Literal>
      <asp:GridView ID="GridView1" runat="server" Caption="The Cast" ></asp:GridView>
    </form>
  </body>

  1. Откройте файл Default.aspx.cs и добавьте в него следующие операторы using.
  using Microsoft.SharePoint.Client;
  using Microsoft.IdentityModel.S2S.Tokens;
  using System.Net;
  using System.IO;
  using System.Xml;
  using System.Data;
  using System.Xml.Linq;
  using System.Xml.XPath;
  using Microsoft.SharePoint.Samples;

Последний из этих операторов относится к области имен, указанной в файле TokenHelper.cs.


3. Добавьте следующие поля в класс **Default**. ''csharp SharePointContextToken contextToken; string accessToken; URI sharepointUrl; ```
  1. Замените метод Page_Load следующим кодом, который использует класс TokenHelper для получения токенов из безопасного сервера токенов, совместимого с OAuth. Затем маркер доступа сохраняется в свойстве CommandArgument кнопки для последующего получения обработчиком событий нажатия кнопки.
    protected void Page_Load(object sender, EventArgs e)
  {
      TokenHelper.TrustAllCertificates();
      string contextTokenString = TokenHelper.GetContextTokenFromRequest(Request);

      if (contextTokenString != null)
      {
          // Get context token
          contextToken = TokenHelper.ReadAndValidateContextToken(contextTokenString, Request.Url.Authority);

          // Get access token
          sharepointUrl = new Uri(Request.QueryString["SPAppWebUrl"]);
          accessToken = TokenHelper.GetAccessToken(contextToken, sharepointUrl.Authority).AccessToken;
          
          // Pass the access token to the button event handler.
          Button1.CommandArgument = accessToken;
      }
  }

  1. Добавьте к классу Default следующий обработчик событий. Обработчик начинается с получения маркера доступа, хранящегося в свойстве CommandArgument кнопки .
    protected void Button1_Click(object sender, EventArgs e)
  {
      // Retrieve the access token that the Page_Load method stored
      // in the button's command argument.
      string accessToken = ((Button)sender).CommandArgument;
  }

  1. Обработчик должен заново получить измененный URL-адрес сайта надстройки при обратной передаче, поэтому следует добавить приведенный ниже код.
      if (IsPostBack)
    {
        sharepointUrl = new Uri(Request.QueryString["SPAppWebUrl"]);
    }

  1. Добавьте приведенную ниже строку, в которой указаны конечные точки SharePoint REST/OData для получения данных списка. В этом примере код считывает список Characters in Hamlet (Герои пьесы "Гамлет"), развернутый на сайте надстройки. Благодаря интерфейсам API одной строки кода достаточно, чтобы выбрать список и указать три возвращаемых поля из списка.

Обратите внимание на то, что в URL-адресе списка OData необходимо использовать внутренние имена полей (столбцов), а не отображаемые имена, поэтому в коде используются имена Title, Actor и CastingStatus, а не Character, Actor/Actress и Casting Status. Дополнительные сведения о веб-службе REST/OData см. в статье Использование операций запросов OData в запросах SharePoint REST.

    // REST/OData URL section
    string oDataUrl = "/_api/Web/lists/getbytitle('Characters In Hamlet')/items?$select=Title,Actor,CastingStatus";

  1. Добавьте приведенный ниже код, создающий объекты HTTP-запроса и отклика с помощью классов HttpWebRequest и HttpWebResponse из пространства имен System.Net.
  // HTTP Request and Response construction section
  HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(sharepointUrl.ToString() + oDataUrl);
  request.Method = "GET";
  request.Accept = "application/atom+xml";
  request.ContentType = "application/atom+xml;type=entry";
  request.Headers.Add("Authorization", "Bearer " + accessToken);
  HttpWebResponse response = (HttpWebResponse)request.GetResponse();

  1. Добавьте приведенный ниже код для синтаксического анализа XML-файла отклика в формате ATOM. В нем используются классы System.Xml. Пространство имен Linq для анализа возвращаемых данных и создания списка<T> элементов из списка SharePoint. Вы также можете использовать классы из пространства имен System.Xml.

Обратите внимание на то, что в XML-файле, возвращаемом средой SharePoint, дочерние объекты элемента entry содержат метаданные элемента списка. Фактические данные строки для элемента списка SharePoint вложены на два уровня ниже элемента properties. По этой причине метод расширения Elements<T> используется дважды для фильтрации более высоких уровней.

  // Response markup parsing section
  XDocument oDataXML = XDocument.Load(response.GetResponseStream(), LoadOptions.None);
  XNamespace atom = "http://www.w3.org/2005/Atom";
  XNamespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices";
  XNamespace m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"; 

  List<XElement> entries = oDataXML.Descendants(atom + "entry")
                          .Elements(atom + "content")
                          .Elements(m + "properties")
                          .ToList();

  1. Добавьте следующий запрос LINQ, чтобы создать коллекцию IEnumerable<T> анонимного типа, которая имеет только необходимые свойства и не имеет других. Обратите внимание на то, что хотя код должен ссылаться на поле с заголовком элемента по его внутреннему имени Title, имя свойства анонимного типа, которому назначается значение, может называться Character. В результате после привязки коллекции к элементу управления "Сетка" на странице отображается более подходяще имя Character (Герой пьесы или фильма).
  var entryFieldValues = from entry in entries
  select new { Character=entry.Element(d + "Title").Value, 
               Actor=entry.Element(d + "Actor").Value, 
               CastingStatus=entry.Element(d + "CastingStatus").Value };

  1. Напоследок добавьте к обработчику приведенный ниже код, чтобы привязать данные к элементу управления GridView на странице. По умолчанию заголовкам столбцов сетки назначаются имена свойств анонимного типа: Character, Actor и CastingStatus. У элемента управления GridView есть свойства, позволяющие управлять именами и форматированием заголовков столбцов, поэтому вы можете сделать так, чтобы заголовки Actor/Actress (Актер или актриса) и Casting Status (Статус кастинга) соответствовали заголовкам столбцов в SharePoint. Для простоты здесь не описаны эти методики. Вы также можете воспользоваться элементом управления DataGrid.
    GridView1.DataSource = entryFieldValues;
    GridView1.DataBind();

  1. Сохраните все файлы.

Тестирование и отладка надстройки SharePoint

  1. Чтобы протестировать надстройку SharePoint и ее удаленное веб-приложение, нажмите клавишу F5 в Visual Studio. Веб-приложение будет развернуто в IIS Express по адресу localhost. Надстройка SharePoint будет установлена на целевом веб-сайте SharePoint. В нашем примере удаленная надстройка не пытается взаимодействовать с хост-сайтом, а субъект надстройки автоматически получает разрешения для сайта надстройки, поэтому вам не предлагается предоставить разрешения. Откроется страница Контент сайта целевого веб-сайта SharePoint, где вы увидите новую надстройку.

  2. Выберите надстройку SharePoint, и в удаленном веб-приложении откроется страница, указанная в элементе StartPage файла AppManifest.xml. Поработайте в веб-приложении, чтобы проверить его функциональность. В примере из этой статьи достаточно нажать кнопку. При этом будет создана сетка, в которой появится список Characters in Hamlet (Герои пьесы "Гамлет") с сайта надстройки.

Публикация надстройки SharePoint

Чтобы опубликовать надстройку SharePoint, отправьте пакет надстройки в корпоративный каталог надстроек или Магазин Office. Дополнительные сведения см. в статьях Публикация в Магазине Office или каталоге надстроек организации и Публикация надстроек SharePoint.

Устранение неполадок

Если надстройка не работает, рекомендуется проверить, не является ли это следствием ошибки разметки CAML, блокирующей развертывание компонентов SharePoint. Чтобы проверить развертывание, используйте процедуру, аналогичную описанной ниже.

Проверка подготовки сайта надстройки

  1. Откройте страницу Параметры сайта на хост-сайте. В разделе Администрирование семейства веб-сайтов выберите ссылку Иерархия сайтов.

  2. Ваша надстройка отображается на странице иерархии сайтов в списке, отсортированном по URL-адресам надстроек. Не запускайте ее. Просто скопируйте ее URL-адрес и используйте его в действиях ниже.

  3. Перейдите по адресу URL-адрес_сайта_приложения/_layouts/15/ManageFeatures.aspx и на открывшейся странице Возможности сайта убедитесь, что параметр Theater and Movie Data Components (Компоненты данных театра и кино) указан в алфавитном списке возможностей вашей надстройки SharePoint с состоянием Активна.

  4. Перейдите по адресу URL-адрес_сайта_приложения/_layouts/15/mngfield.aspx и на открывшейся странице Столбцы сайта убедитесь, что группа Theater and Movies (Театр и кино) отображается в списке столбцов сайта и содержит новые настраиваемые столбцы сайта: Actor/Actress (Актер или актриса) и Casting Status (Статус кастинга).

  5. Перейдите по адресу URL-адрес_сайта_приложения/_layouts/15/mngctype.aspx и на открывшейся странице Типы контента сайта убедитесь, что группа Theater and Movies (Театр и кино) указана в списке типов контента и содержит новый тип контента — ActingRole.

  6. Перейдите по ссылке на тип контента ActingRole. На открывшейся странице Тип контента сайта убедитесь, что тип контента содержит два новых типа столбцов сайта, Actor/Actress (Актер или актриса) и Casting Status (Статус кастинга), а в поле названия элемента указано заданное вами отображаемое имя — Character (Герой пьесы или фильма).

  7. Перейдите по адресу URL-адрес_сайта_приложения/_layouts/15/mcontent.aspx и убедитесь, что на открывшейся странице Библиотеки и списки сайта отображается ссылка Настроить "Characters in Hamlet" (Настроить "Герои пьесы «Гамлет»").

  8. Перейдите по ссылке Настроить "Characters in Hamlet" (Настроить "Герои пьесы «Гамлет»") и убедитесь, что на странице параметров списка единственный тип контента для списка — это ActingRole, а два новых столбца сайта, Actor/Actress (Актер или актриса) и Casting Status (Статус кастинга), указаны в разделе Столбцы. Столбец заголовка может быть обозначен внутренним именем Title, а не заданным вами отображаемым именем Character (Герой пьесы или фильма).

Примечание.

Если на странице нет раздела Типы контента, необходимо включить управление типами контента. Перейдите по ссылке Дополнительные параметры и на странице Дополнительные параметры включите управление типами контента, а затем нажмите кнопку ОК. Вы вернетесь на предыдущую страницу, на которой теперь будет отображаться список для раздела Типы контента.

  1. В верхней части страницы указан веб-адрес списка. Скопируйте его и вставьте в адресной строке браузера, а затем перейдите к списку. Убедитесь, что в списке присутствуют созданные вами примеры элементов. Столбец заголовка может быть обозначен внутренним именем Title, а не заданным вами отображаемым именем Character (Герой пьесы или фильма).

См. также