Commencer à créer des compléments hébergés par un fournisseur pour SharePoint

Les compléments hébergés par un fournisseur sont l’un des deux principaux types de Compléments SharePoint. Pour obtenir un aperçu rapide des Compléments SharePoint et des deux types différents, voir Compléments SharePoint.

Voici les informations principales à savoir sur les compléments hébergés par un fournisseur :

  • Ils incluent une application web, un service ou une base de données qui est hébergé en externe à partir de la batterie de serveurs SharePoint ou de l’abonnement SharePoint Online. Il peuvent également inclure des composants SharePoint. Vous pouvez héberger les composants externes sur n’importe quelle pile d’hébergement web, y compris la pile LAMP (Linux, Apache, MySQL et PHP).
  • La logique métier personnalisée dans le complément doit être exécutée soit sur les composants externes, soit dans JavaScript sur des pages SharePoint personnalisées.

Dans cet article, vous réaliserez les opérations suivantes :

  • Configuration de votre environnement de développement
  • Création du projet de complément
  • Codage de votre complément

Configuration de votre environnement de développement

Pour configurer un environnement de développement pour des compléments SharePoint, plusieurs options s'offrent à vous. Dans cette section, nous vous expliquons l'option la plus simple. Pour d’autres alternatives, comme la configuration d’un environnement « entièrement local », reportez-vous à Outils.

Obtenir les outils

Reportez-vous à des versions antérieures de Visual Studio ou à une autre documentation Visual Studio.

Inscription à un abonnement Office 365 pour les développeurs

Notes

Vous avez peut-être déjà accès à un abonnement Office 365 pour les développeurs :

Pour obtenir un plan Office 365, procédez comme suit :

Ouverture du site de développeur

Sélectionnez le lien Créer des compléments dans le coin supérieur gauche de la page pour ouvrir le site du développeur. Le site ressemble à celui présenté sur la figure suivante. Sur la page figure la liste Compléments en cours de test. Cela confirme que le site web a été créé avec le modèle Site du développeur de SharePoint. Si, à la place, un site d'équipe s'ouvre, patientez quelques minutes et lancez de nouveau votre site.

Notes

Notez l’URL du site. Elle vous servira lorsque vous créerez des projets de compléments SharePoint dans Visual Studio.

Page d’accueil de votre site du développeur avec la liste des compléments en cours de test

Capture d’écran illustrant la page d’accueil du site du développeur.

Création du projet de complément

  1. Démarrez Visual Studio à l'aide de l’option Exécuter en tant qu’administrateur.

  2. Dans Visual Studio, sélectionnez fichier > Nouveau > Nouveau projet.

  3. Dans la boîte de dialogue Nouveau projet, développez le nœud Visual C#, le nœud Office/SharePoint, puis sélectionnez Compléments > Complément SharePoint.

  4. Nommez le projet SampleAddIn, puis sélectionnez OK.

  5. Dans la boîte de dialogue Spécifier les paramètres du complément SharePoint, procédez comme suit :

    • Indiquez l’URL complète du site SharePoint que vous souhaitez utiliser pour le débogage de votre complément. Il s’agit de l’URL du site du développeur. Utilisez HTTPS, et non HTTP dans l’URL. À un moment donné au cours de cette procédure ou peu de temps après son terme, vous serez invité à vous connecter à ce site. Le délai de l’invite varie. Utilisez les informations d’identification de l’administrateur (dans le domaine *.onmicrosoft.com) que vous avez créé une fois connecté à votre site de développeur, par exemple MonNom@contoso.onmicrosoft.com.

    • Sous Comment souhaitez-vous héberger votre complément SharePoint ?, sélectionnez Hébergé par un fournisseur.

    • Sélectionnez Suivant.

  6. Sur la page Spécifier la version de SharePoint cible, sélectionnez SharePoint Online, puis Suivant.

  7. Sous Quel type de projet d’application Web voulez-vous créer ?, sélectionnez Application Web Forms ASP.NET, puis Suivant.

  8. Sous Comment souhaitez-vous procéder pour l’authentification de votre complément ?, sélectionnez Utiliser Windows Azure Access Control Service.

  9. Dans l’Assistant, sélectionnez Terminer.

    L'essentiel de la configuration a lieu lors de l'ouverture de la solution. Deux projets sont créés dans la solution Visual Studio : l'un pour le complément SharePoint et l'autre pour l'application web ASP.NET.

Codage de votre complément

  1. Ouvrez le fichier AppManifest.xml. Dans l'onglet Autorisations, spécifiez l'étendue de collection de sites et le niveau d'autorisation Lecture.

  2. Supprimez toutes les marques de révision dans la balise <body> du fichier Pages/Default.aspx de votre application web, puis ajoutez les contrôles HTML et ASP.NET suivants dans <body>. Cet exemple utilise le contrôle UpdatePanel pour permettre un rendu de page partiel.

     <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. Ajoutez les déclarations suivantes au fichier Default.aspx.cs de votre application web.

       using Microsoft.SharePoint.Client;
       using Microsoft.IdentityModel.S2S.Tokens;
       using System.Net;
       using System.IO;
       using System.Xml;
    
  4. Dans le fichier Default.aspx.cs de votre application web, ajoutez ces variables dans la classe Page.

      SharePointContextToken contextToken;
      string accessToken;
      Uri sharepointUrl;
      string siteName;
      string currentUser;
      List<string> listOfUsers = new List<string>();
      List<string> listOfLists = new List<string>();
    
  5. Ajoutez la méthode RetrieveWithCSOM dans la classe Page. Cette méthode utilise le CSOM SharePoint pour récupérer des informations sur votre site et les afficher sur la page.

        // 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. Ajoutez la méthode CSOM_Click dans la classe Page. Cette méthode déclenche l'événement qui se produit lorsque l'utilisateur clique sur le lien Remplir les données.

      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. Remplacez la méthode Page_Load existante par celle-ci. La méthode Page_Load utilise des méthodes du fichier TokenHelper.cs pour récupérer le contexte à partir de l'objet Request et obtenir un jeton d'accès auprès de Microsoft Azure Access Control Service (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. Le fichier Default.aspx.cs doit ressembler à ceci lorsque vous avez terminé.

      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. Utilisez la touche F5 pour déployer et exécuter votre complément. Si une fenêtre Alerte de sécurité apparaît et vous demande d’approuver le certificat auto-signé Localhost, sélectionnez Oui.

  10. Sélectionnez Approuver sur la page de consentement pour accorder des autorisations au complément. Visual Studio installe l’application web sur IIS Express, puis installe le complément sur votre site SharePoint de test et le lance. Une page qui comporte la table affichée dans la capture d’écran suivante apparaît. Pour afficher des informations récapitulatives sur votre site SharePoint, sélectionnez Remplir les données.

Page de lancement d’application autohébergée de base

Étapes suivantes

Pour créer vos compléments, réalisez les étapes ci-dessous dans l’ordre suivant :

  1. Donner à votre complément hébergé par un fournisseur l’apparence de SharePoint
  2. Inclure un bouton personnalisé dans le complément hébergé par un fournisseur
  3. Obtenir un aperçu rapide du modèle objet SharePoint
  4. Ajouter des opérations d’écriture SharePoint au complément hébergé par un fournisseur
  5. Inclure un composant de complément dans le complément hébergé par le fournisseur
  6. Gérer les événements de complément dans le complément hébergé par le fournisseur
  7. Ajouter une logique de première exécution au complément hébergé par le fournisseur
  8. Déployer par programme un bouton personnalisé dans le complément hébergé par un fournisseur
  9. Gérer les événements d’élément de liste dans le complément hébergé par le fournisseur