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


Создание надстроек SharePoint, размещаемых у поставщика

Надстройки, размещаемые у поставщика, — это один из двух основных типов надстроек SharePoint. Обзор надстроек SharePoint и этих основных типов см. в статье Надстройки SharePoint.

Ниже представлен обзор надстроек, размещаемых у поставщика.

  • К ним относятся веб-приложения, службы или базы данных, которые размещены на компьютерах, не относящихся к ферме SharePoint или подписке на SharePoint Online. Они также могут содержать компоненты SharePoint. Вы можете размещать внешние компоненты в любом стеке веб-хостинга, включая стек LAMP (Linux, Apache, MySQL и PHP).
  • Пользовательская бизнес-логика надстройки должна запускаться на внешних компонентах или в JavaScript пользовательских страниц SharePoint.

В этой статье описаны следующие действия:

  • Настройка среды разработки
  • Создание проекта надстройки
  • Написание кода надстройки

Настройка среды разработки

Настроить среду для разработки надстроек SharePoint можно разными способами. Здесь описан самый простой из них. Информацию о настройке локальной среды и других альтернативных способах см. в этой статье.

Установите инструменты

Сверяйтесь с более ранними версиями Visual Studio или другой документацией по Visual Studio.

Получение подписки разработчика Office 365

Примечание.

Возможно, у вас уже есть доступ к подписке разработчика Office 365:

Чтобы получить план Office 365:

Открытие сайта разработчика

Перейдите по ссылке Создание надстроек в левом верхнем углу страницы, чтобы открыть сайт разработчика. Открывшийся сайт должен выглядеть так, как показано на следующем рисунке. Наличие на странице списка Тестируемые надстройки подтверждает, что веб-сайт был создан с помощью шаблона "Сайт разработчика" SharePoint. Если вместо этого отображается обычный сайт группы, подождите несколько минут и перезагрузите сайт.

Примечание.

Запишите URL-адрес сайта. Он используется при создании проектов надстроек SharePoint в Visual Studio.

Домашняя страница сайта разработчика со списком "Тестируемые надстройки"

Снимок экрана: домашняя страница сайта разработчика.

Создание проекта надстройки

  1. Запустите Visual Studio, выбрав команду Запуск от имени администратора.

  2. В Visual Studio выберите Файл>Создать>Проект.

  3. В диалоговом окне Создание проекта последовательно разверните узлы Visual C# и Office/SharePoint, а затем выберите Надстройки>Надстройка SharePoint.

  4. Назовите проект SampleAddIn и нажмите кнопку ОК.

  5. В диалоговом окне Укажите параметры надстройки SharePoint выполните указанные ниже действия.

    • Укажите полный URL-адрес сайта SharePoint, который вы хотите использовать для отладки надстройки. Это URL-адрес сайта разработчика. В URL-адресе используйте протокол HTTPS, а не HTTP. В какой-то момент выполнения этой процедуры или вскоре после его завершения вам будет предложено войти на сайт. Это не всегда происходит в одно и то же время. Используйте учетные данные администратора (в домене *.onmicrosoft.com), созданные при регистрации на сайте разработчика; например MyName@contoso.onmicrosoft.com.

    • В разделе Как требуется разместить надстройку SharePoint? выберите элемент Размещено у поставщика.

    • Нажмите кнопку Далее.

  6. На странице Указание целевой версии SharePoint выберите SharePoint Online, а затем нажмите кнопку Далее.

  7. В разделе Какой тип проекта веб-приложения требуется создать? выберите пункт Приложение веб-форм ASP.NET, а затем нажмите кнопку Далее.

  8. В разделе Как требуется выполнять проверку подлинности надстройки? выберите пункт Использовать службу контроля доступа Microsoft Azure.

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

    Основная часть операций по настройке совершается при открытии решения. В решении Visual Studio создаются два проекта: один для надстройки SharePoint, а другой — для веб-приложения ASP.NET.

Написание кода надстройки

  1. Откройте файл AppManifest.xml. На вкладке Разрешения укажите область Семейства веб-сайтов и уровень разрешений Чтение.

  2. Удалите разметку в теге <body> файла Pages/Default.aspx веб-приложения, а затем добавьте приведенные ниже элементы управления HTML и ASP.NET в <body>. В этом примере используется элемент управления UpdatePanel для обеспечения частичной отрисовки страницы.

     <form id="form1" runat="server">
       <div>
         <asp:ScriptManager ID="ScriptManager1" runat="server"
                 EnablePartialRendering="true" />
         <asp:UpdatePanel ID="PopulateData" runat="server" UpdateMode="Conditional">
           <ContentTemplate>      
             <table border="1" cellpadding="10">
              <tr><th><asp:LinkButton ID="CSOM" runat="server" Text="Populate Data" 
                                    OnClick="CSOM_Click" /></th></tr>
              <tr><td>
    
             <h2>SharePoint Site</h2>
             <asp:Label runat="server" ID="WebTitleLabel"/>
    
             <h2>Current User:</h2>
             <asp:Label runat="server" ID="CurrentUserLabel" />
    
             <h2>Site Users</h2>
             <asp:ListView ID="UserList" runat="server">     
                 <ItemTemplate >
                   <asp:Label ID="UserItem" runat="server" 
                                     Text="<%# Container.DataItem.ToString()  %>">
                   </asp:Label><br />
                </ItemTemplate>
             </asp:ListView>
    
             <h2>Site Lists</h2>
                    <asp:ListView ID="ListList" runat="server">
                        <ItemTemplate >
                          <asp:Label ID="ListItem" runat="server" 
                                     Text="<%# Container.DataItem.ToString()  %>">
                         </asp:Label><br />
                       </ItemTemplate>
                   </asp:ListView>
                 </td>              
               </tr>
              </table>
            </ContentTemplate>
          </asp:UpdatePanel>
       </div>
     </form>
    
  3. Добавьте приведенные ниже объявления в файл Default.aspx.cs веб-приложения.

       using Microsoft.SharePoint.Client;
       using Microsoft.IdentityModel.S2S.Tokens;
       using System.Net;
       using System.IO;
       using System.Xml;
    
  4. В файле Default.aspx.cs веб-приложения добавьте указанные ниже переменные в класс Page.

      SharePointContextToken contextToken;
      string accessToken;
      Uri sharepointUrl;
      string siteName;
      string currentUser;
      List<string> listOfUsers = new List<string>();
      List<string> listOfLists = new List<string>();
    
  5. Добавьте метод RetrieveWithCSOM в класс Page. Этот метод использует CSOM SharePoint, чтобы получать сведения о вашем сайте и отображать их на странице.

        // This method retrieves information about the host web by using the CSOM.
      private void RetrieveWithCSOM(string accessToken)
      {
    
          if (IsPostBack)
          {
              sharepointUrl = new Uri(Request.QueryString["SPHostUrl"]);
          }            
    
          ClientContext clientContext =
                          TokenHelper.GetClientContextWithAccessToken(
                              sharepointUrl.ToString(), accessToken);
    
          // Load the properties for the web object.
          Web web = clientContext.Web;
          clientContext.Load(web);
          clientContext.ExecuteQuery();
    
          // Get the site name.
          siteName = web.Title;
    
          // Get the current user.
          clientContext.Load(web.CurrentUser);
          clientContext.ExecuteQuery();
          currentUser = clientContext.Web.CurrentUser.LoginName;
    
          // Load the lists from the Web object.
          ListCollection lists = web.Lists;
          clientContext.Load<ListCollection>(lists);
          clientContext.ExecuteQuery();
    
          // Load the current users from the Web object.
          UserCollection users = web.SiteUsers;
          clientContext.Load<UserCollection>(users);
          clientContext.ExecuteQuery();
    
          foreach (User siteUser in users)
          {
              listOfUsers.Add(siteUser.LoginName);
          }
    
          foreach (List list in lists)
          {
              listOfLists.Add(list.Title);
          }
      }
    
  6. Добавьте метод CSOM_Click в класс Page. Этот метод вызывает событие, которое происходит, когда пользователь переходит по ссылке Заполнение данными.

      protected void CSOM_Click(object sender, EventArgs e)
    {
        string commandAccessToken = ((LinkButton)sender).CommandArgument;
        RetrieveWithCSOM(commandAccessToken);
        WebTitleLabel.Text = siteName;
        CurrentUserLabel.Text = currentUser;
        UserList.DataSource = listOfUsers;
        UserList.DataBind();
        ListList.DataSource = listOfLists;
        ListList.DataBind();    
     }
    
  7. Замените существующий метод Page_Load указанным ниже. Метод Page_Load использует методы файла TokenHelper.cs, чтобы извлечь контекст из объекта Request и получить маркер доступа от службы контроля доступа Microsoft Azure (ACS).

      // The Page_load method fetches the context token and the access token. 
    // The access token is used by all of the data retrieval methods.
    protected void Page_Load(object sender, EventArgs e)
    {
         string contextTokenString = TokenHelper.GetContextTokenFromRequest(Request);
    
        if (contextTokenString != null)
        {
            contextToken =
                TokenHelper.ReadAndValidateContextToken(contextTokenString, Request.Url.Authority);
    
            sharepointUrl = new Uri(Request.QueryString["SPHostUrl"]);
            accessToken =
                        TokenHelper.GetAccessToken(contextToken, sharepointUrl.Authority)
                        .AccessToken;
    
             // For simplicity, this sample assigns the access token to the button's CommandArgument property. 
             // In a production add-in, this would not be secure. The access token should be cached on the server-side.
            CSOM.CommandArgument = accessToken;
        }
        else if (!IsPostBack)
        {
            Response.Write("Could not find a context token.");
            return;
        }
    }
    
  8. После этого файл Default.aspx.cs должен выглядеть, как показано ниже.

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Web;
      using System.Web.UI;
      using System.Web.UI.WebControls;
    
      using Microsoft.SharePoint.Client;
      using Microsoft.IdentityModel.S2S.Tokens;
      using System.Net;
      using System.IO;
      using System.Xml;
    
      namespace SampleAddInWeb
      {
          public partial class Default : System.Web.UI.Page
          {
              SharePointContextToken contextToken;
              string accessToken;
              Uri sharepointUrl;
              string siteName;
              string currentUser;
              List<string> listOfUsers = new List<string>();
              List<string> listOfLists = new List<string>();
    
              protected void Page_PreInit(object sender, EventArgs e)
              {
                  Uri redirectUrl;
                  switch (SharePointContextProvider.CheckRedirectionStatus(Context, out redirectUrl))
                  {
                      case RedirectionStatus.Ok:
                          return;
                      case RedirectionStatus.ShouldRedirect:
                          Response.Redirect(redirectUrl.AbsoluteUri, endResponse: true);
                          break;
                      case RedirectionStatus.CanNotRedirect:
                          Response.Write("An error occurred while processing your request.");
                          Response.End();
                          break;
                  }
              }
    
              protected void CSOM_Click(object sender, EventArgs e)
              {
                  string commandAccessToken = ((LinkButton)sender).CommandArgument;
                  RetrieveWithCSOM(commandAccessToken);
                  WebTitleLabel.Text = siteName;
                  CurrentUserLabel.Text = currentUser;
                  UserList.DataSource = listOfUsers;
                  UserList.DataBind();
                  ListList.DataSource = listOfLists;
                  ListList.DataBind();
              }
    
              // This method retrieves information about the host web by using the CSOM.
              private void RetrieveWithCSOM(string accessToken)
              {
    
                  if (IsPostBack)
                  {
                      sharepointUrl = new Uri(Request.QueryString["SPHostUrl"]);
                  }
    
                  ClientContext clientContext =
                          TokenHelper.GetClientContextWithAccessToken(
                              sharepointUrl.ToString(), accessToken);
    
                  // Load the properties for the web object.
                  Web web = clientContext.Web;
                  clientContext.Load(web);
                  clientContext.ExecuteQuery();
    
                  // Get the site name.
                  siteName = web.Title;
    
                  // Get the current user.
                  clientContext.Load(web.CurrentUser);
                  clientContext.ExecuteQuery();
                  currentUser = clientContext.Web.CurrentUser.LoginName;
    
                  // Load the lists from the Web object.
                  ListCollection lists = web.Lists;
                  clientContext.Load<ListCollection>(lists);
                  clientContext.ExecuteQuery();
    
                  // Load the current users from the Web object.
                  UserCollection users = web.SiteUsers;
                  clientContext.Load<UserCollection>(users);
                  clientContext.ExecuteQuery();
    
                  foreach (User siteUser in users)
                  {
                      listOfUsers.Add(siteUser.LoginName);
                  }
    
                  foreach (List list in lists)
                  {
                      listOfLists.Add(list.Title);
                  }
              }
    
              protected void Page_Load(object sender, EventArgs e)
              {
                  string contextTokenString = 
                       TokenHelper.GetContextTokenFromRequest(Request);
    
                  if (contextTokenString != null)
                  {
                      contextToken =
                          TokenHelper.ReadAndValidateContextToken(contextTokenString, Request.Url.Authority);
    
                      sharepointUrl = new Uri(Request.QueryString["SPHostUrl"]);
                      accessToken =
                          TokenHelper.GetAccessToken(contextToken, sharepointUrl.Authority)
                                     .AccessToken;
                      CSOM.CommandArgument = accessToken;
                  }
                  else if (!IsPostBack)
                  {
                      Response.Write("Could not find a context token.");
                      return;
                  }
              }
          }
      }
    
    
  9. Нажмите клавишу F5, чтобы развернуть и запустить надстройку. Если отобразится окно Оповещение системы безопасности с предложением доверять самозаверяющему сертификату Localhost, нажмите кнопку Да.

  10. Выберите Сделать доверенным на странице подтверждения, чтобы предоставить надстройке разрешения. Visual Studio установит веб-приложение в IIS Express, а затем установит надстройку на тестовом сайте SharePoint и запустит ее. Откроется страница с таблицей, как на приведенном ниже снимке экрана. Чтобы просмотреть сводную информацию о сайте SharePoint, выберите Заполнение данных.

Страница запуска базовой надстройки с размещением у поставщика

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

Порядок дальнейших действий с надстройкой:

  1. Настройка внешнего вида надстройки SharePoint с размещением у поставщика
  2. Добавление настраиваемой кнопки в надстройку, размещенную у поставщика
  3. Краткий обзор объектной модели SharePoint
  4. Добавление операций записи SharePoint в надстройку, размещенную у поставщика
  5. Добавление веб-части надстройки в надстройку, размещенную у поставщика
  6. Обработка событий надстройки, размещенной у поставщика
  7. Добавление логики, выполняемой при первом запуске, в надстройку, размещаемую у поставщика
  8. Программное развертывание собственной кнопки в надстройке с размещением у поставщика
  9. Обработка событий элементов списков в надстройке с размещением у поставщика