Gérer les événements de complément dans le complément hébergé par le fournisseurHandle add-in events in the provider-hosted add-in

Cet article est le septième d’une série sur les concepts de base du développement de compléments SharePoint hébergés par un fournisseur. Vous devez tout d’abord avoir pris connaissance de la rubrique Compléments SharePoint et des articles précédents de la série, disponibles dans la rubrique Commencer à créer des compléments hébergés par un fournisseur pour SharePoint.This is the seventh in a series of articles about the basics of developing provider-hosted SharePoint Add-ins. You should first be familiar with SharePoint Add-ins and the previous articles in this series:

Note

Si vous avez consulté cette série sur les compléments hébergés par un fournisseur, votre solution Visual Studio vous sera utile pour continuer à parcourir cette rubrique.If you have been working through this series about provider-hosted add-ins, you have a Visual Studio solution that you can use to continue with this topic. Vous pouvez également télécharger le référentiel sur SharePoint_Provider-hosted_Add-Ins_Tutorials et ouvrir le fichier BeforeAdd-inEventHandlers.sln.You can also download the repository at SharePoint_Provider-hosted_Add-Ins_Tutorials and open the BeforeAdd-inEventHandlers.sln file.

Dans cet article, nous personnalisons la gestion d’un type d’événement dans SharePoint appelé événements de complément.In this article, we customize the handling of a kind of event in SharePoint called add-in events. Plus précisément, nous créons des gestionnaires pour les événements d’installation et de désinstallation de complément.Specifically, we create handlers for the add-in installation and uninstallation events. Les événements de liste et d’élément de liste peuvent utiliser une gestion personnalisée ; vous les découvrirez dans un prochain article de cette série.List and list item events can also get custom handling; you'll learn about these in a later article in this series. Toutes ces événements sont déclenchés dans SharePoint, mais votre code personnalisé qui gère chaque événement se trouve dans votre application web à distance.All of these events are triggered in SharePoint, but your custom code that handles each event is in your remote web application. Vous configurez SharePoint pour appeler votre gestionnaire personnalisé en enregistrant l’URL du gestionnaire avec l’événement SharePoint.You configure SharePoint to call your custom handler by registering the handler's URL with the SharePoint event.

Deux emplacements pour déployer les composants SharePoint de manière programméeTwo places to programmatically deploy SharePoint components

Nous voulons que notre complément Chain Store crée et déploie les listes Employés locaux et Livraisons attendues automatiquement.We want our Chain Store add-in to create and deploy the Local Employees and Expected Shipments lists automatically. Un complément peut déployer des composants SharePoint, tels qu’ une liste personnalisée, à tout moment.An add-in can deploy SharePoint components, such as a custom list, any time. Mais lorsqu’un complément dépend d’un composant spécifique par exemple, une liste personnalisée, le composant doit vraiment être déployé avant que les utilisateurs commencent à travailler avec le complément.But when an add-in depends on a specific component such as a custom list, the component really should be deployed before users start working with the add-in. Pour ces composants essentiels, il existe deux emplacements pour la logique de déploiement personnalisée :For such vital components, there are two places where the custom deployment logic can go:

  • Dans un gestionnaire pour l’événement d’installation du complément.In a handler for the add-in installation event.
  • dans une logique de « première exécution » qui s'exécute la première fois que le complément est lancé dans SharePoint.In "first run" logic that executes the first time the add-in is launched in SharePoint.

Le choix de la meilleure solution pour un complément donné implique un niveau plus avancé. Dans cet article, nous allons uniquement mentionner quelques points de comparaison :Deciding which is best for a given add-in is an advanced topic. In this article, we can only mention a few points of comparison:

  • Un gestionnaire d’installation personnalisé doit être exécuté dans les 30 secondes. Il n’existe aucune limite au temps d’exécution d’une logique de première exécution.A custom installation handler has to complete in 30 seconds. There is no limit to how long first-run logic can take.

  • En cas de problème lors de l’installation d’un complément, SharePoint annule tout ce qui a été effectué dans le cadre de l’installation.If anything goes wrong during an add-in installation, SharePoint rolls back everything it has done as part of the installation. Un gestionnaire d’installation personnalisée s’exécute après que SharePoint a fait tout ce qu’il faut pour installer le complément, donc un gestionnaire personnalisé peut participer à ce système.A custom installation handler runs after SharePoint has done everything it's going to do to install the add-in, so a custom handler can participate in this system.

    Par exemple, si votre logique personnalisée lève une exception, vous pouvez configurer SharePoint de façon à restaurer l’installation entière du complément.For example, if your custom logic throws an exception, you can tell SharePoint to roll back the entire add-in installation. Si vous rencontrez un problème dans la logique de première exécution personnalisée, toutefois, le complément reste installé et risque de ne pas fonctionner correctement.If something goes wrong in custom first-run logic, however, the add-in remains installed and presumably won't work properly.

  • SharePoint n’abandonne pas s’il doit restaurer une installation du complément.SharePoint doesn't give up if it has to roll back an add-in installation. Il tente immédiatement à nouveau l’installation.It immediately tries the installation again. Cela permet un maximum de quatre tentatives (la limite de temps de 30 secondes s’applique à chaque tentative).It makes up to four attempts (the 30-second time limit applies on each attempt). À chaque tentative, le gestionnaire d’installation personnalisée s’exécute à nouveau à partir du début.Each time it retries, the custom installation handler runs again from the beginning. Si le gestionnaire a essayé d’installer, comme une liste avant la restauration, il tente d’installer la même liste de nouveau lors de la nouvelle tentative.If the handler managed to install, say, a list, before the rollback, it tries to install the same list again on the retry.

    Pour l’empêcher, le code dans un gestionnaire d’installation doit être écrit afin qu’il n’effectue aucune action (par exemple, déployer un composant), sauf s’il vérifie d’abord si cette action a déjà été effectuée.To prevent this from happening, code in an installation handler has to be written so that it won't take any action (such as deploy a component) unless it first checks to see if that action has already been done. Cela rend la logique d’un gestionnaire d’installation plus complexe que la logique de première exécution, car la logique de première exécution ne recommence pas (sauf si vous codez spécifiquement pour le faire).This makes the logic of an installation handler more complex than first-run logic because first-run logic won't retry (unless you specifically code it to do so). En outre, la vérification pour voir si un composant a déjà été déployé nécessite généralement un appel fastidieux via Internet à partir du gestionnaire à distance vers SharePoint.Also, checking to see if a component has already been deployed usually requires a time-consuming call over the Internet from the remote handler to SharePoint. Un deuxième appel est également nécessaire pour déployer réellement le composant (le cas échéant).A second call is also needed to actually deploy the component (if it has not already been deployed).

Pour le complément Chain Store, nous combinons ces stratégies.For the Chain Store add-in, we combine these strategies. Dans cet article, vous créez un gestionnaire d’installation qui enregistre le site web hôte en tant que client dans la base de données d’entreprise, puis définit un signal indiquant que le complément a déjà été exécuté sur le site web hôte.In this article, you create an installation handler that registers the host web as a tenant in the corporate database and then sets a signal that specifies whether the add-in has been run yet on the host web.

Dans un prochain article de cette série, vous allez insérer la logique de première exécution dans la méthode Page_Load de la page d’accueil du complément.In a later article in this series, you'll put first-run logic in the Page_Load method of the add-ins start page. Cette logique déploie les deux listes personnalisées, entre autres choses.This logic deploys the two custom lists and does some other things, too.

Configurer la solution de débogage pour un récepteur d’événementsConfigure the solution for event receiver debugging

Le débogage des récepteurs d’événements nécessite l’utilisation d’Azure Service Bus.Debugging of event receivers requires the use of the Azure Service Bus. Suivez les instructions de la rubrique Déboguer et dépanner un récepteur d’événement distant dans un complément pour SharePoint.Follow the instructions at Debug and troubleshoot a remote event receiver in a SharePoint Add-in. Étant donné que vous utilisez un site Web SharePoint Online en tant que site de test, veillez à suivre les instructions relatives à un site de test à distance.Because you are using a SharePoint Online website as your test site, ensure that you carry out the instructions for a remote test site. Le reste de cette série part du principe que vous avez configuré correctement le débogage.The remainder of this series assumes you have configured debugging successfully.

Créer le gestionnaire d’installationCreate the installation handler

Note

Les paramètres pour les projets de démarrage dans Visual Studio ont tendance à revenir aux paramètres par défaut chaque fois que la solution est rouverte.The settings for Startup Projects in Visual Studio tend to revert to defaults whenever the solution is reopened. Suivez toujours ces étapes immédiatement après la réouverture de l’exemple de solution dans cette série d’articles :Always take these steps immediately after reopening the sample solution in this series of articles:

  1. Cliquez avec le bouton droit sur le nœud de la solution en haut de l’Explorateur de solutions, puis sélectionnez Définir les projets de démarrage.Right-click the solution node at the top of Solution Explorer, and then select Set startup projects.
  2. Assurez-vous que les trois projets sont définis sur Démarrer dans la colonne Action.Ensure that all three projects are set to Start in the Action column.
  1. Dans l’Explorateur de solutions, sélectionnez le projet ChainStore de sorte que ses propriétés apparaissent dans le volet Propriétés de Visual Studio.In Solution Explorer, select the ChainStore project so that its properties appear in the Properties pane of Visual Studio.

  2. Définissez la valeur de l’option Gérer l’installation du Complément sur True. (Il est possible que cette option soit encore intitulée Gérer l’installation de l'application.)Set the value of Handle Add-in Installed to True (it may still be called Handle App Installed). Cette opération a deux conséquences :This does two things:

    • Un dossier portant le nom Services est créé dans le projet ChainStoreWeb (et non dans le projet ChainStore) et deux fichiers y sont ajoutés : un fichier AppEventReceiver.svc et son fichier code-behind AppEventReceiver.svc.cs (les noms de fichiers commencent par la chaîne « App », car auparavant, les compléments étaient appelés « applications » ou « apps ». Ne renommez pas ces fichiers, car les outils de développement Office pour Visual Studio considèrent que ces fichiers conservent ces noms).A folder called Services is created in the ChainStoreWeb project (not the ChainStore project), and two files are added to it: an AppEventReceiver.svc file and its code-behind AppEventReceiver.svc.cs file (the file names begin with the string "App" because add-ins used to be called "apps"; don't rename these files because the Office Developer Tools for Visual Studio assumes that the files will keep these names).

    • L’URL du gestionnaire est enregistrée dans le manifeste du complément.The handler URL is registered in the add-in manifest. Cette partie du manifeste n’est pas visible dans le concepteur de manifeste.This part of the manifest is not visible in the manifest designer. Pour l’afficher, cliquez sur le fichier AppManifest.xml puis sélectionnez Visualiser le code.To see it, right-click the AppManifest.xml file and select View Code. Un nouvel enfant de l’élément Propriétés se présente comme suit.A new child of the Properties element looks like the following.

        <InstalledEventEndpoint>~remoteAppUrl/Services/AppEventReceiver.svc</InstalledEventEndpoint>
      

      Ce marquage indique à SharePoint d’appeler la méthode ProcessEvent de ce service lorsqu’il a terminé d’effectuer toutes ses opérations liées à l’installation du complément.This markup tells SharePoint to call the ProcessEvent method of this service when it has finished doing all of its own work related to installing the add-in. Le gestionnaire personnalisé est le dernier élément à exécuter dans le cadre de l’installation.The custom handler is the last thing that runs as part of the installation. La chaîne ~remoteAppUrl est un espace réservé que les outils de développement Office pour Visual Studio remplacent par l’URL hôte du service.The string ~remoteAppUrl is a placeholder that the Office Developer Tools for Visual Studio replaces with the service host URL. Lors du débogage, il s’agit d’une URL Azure Service Bus.When you are debugging, it is an Azure Service Bus URL. Lorsque vous créez le package de déploiement en production, il s’agit de l’URL de production.When you create the package for deployment to production, it is the production URL.

  3. Ouvrez le fichier AppEventReceiver.svc.cs.Open the AppEventReceiver.svc.cs file.

  4. Vous voyez que les outils de développement Office pour Visual Studio ont créé un exemple d’implémentation de la méthode ProcessEvent.You see that the Office Developer Tools for Visual Studio has created a sample implementation of the ProcessEvent method. Toutes les implémentations de cette méthode commencent par l’initialisation d’un objet SPRemoteEventResult et se terminent par le renvoi de cet objet à SharePoint.All implementations of this method begin by initializing an SPRemoteEventResult object, and they all end by returning that object to SharePoint. Entre autres, cet objet indique à SharePoint ou non s’il doit restaurer l’événement, car la logique de gestion personnalisée a échoué.Among other things, this object tells SharePoint whether or not it should roll back the event because the custom handling logic has failed.

    Les outils peuvent également inclure un bloc using dans cette méthode qui crée un objet ClientContext.The tools may also have included a using block in this method that creates a ClientContext object. Le gestionnaire personnalisé dans le complément Chain Store ne va pas rappeler SharePoint, donc supprimez ce bloc.The custom handler in the Chain Store add-in isn't going to call back into SharePoint, so delete this block. La méthode doit désormais se présenter comme suit :The method should now look like the following.

       public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
     {
         SPRemoteEventResult result = new SPRemoteEventResult();
    
         return result;
     }
    
  5. Le récepteur d’événements peut être appelé par l’un des trois événements de complément possibles. Ajoutez la structure switch suivante à la méthode ProcessEvent entre les lignes qui créent et renvoient l’objet result (les noms des événements disposent d’une chaîne « App », car auparavant les compléments étaient appelés « applications » ou « apps »).The event receiver could be called by any of three possible add-in events, so add the following switch structure to the ProcessEvent method in between the lines that create and return the result object (the event names have the string "App" in them because add-ins used to be called "apps").

      switch (properties.EventType)
    {
        case SPRemoteEventType.AppInstalled:
    
            // TODO2: Custom installation logic goes here.
    
            break;
        case SPRemoteEventType.AppUpgraded:
            // This sample does not implement an add-in upgrade handler.
            break;
        case SPRemoteEventType.AppUninstalling:
    
            // TODO3: Custom uninstallation logic goes here.         
    
            break;
    }
    
  6. Notre logique d’installation va appeler une procédure stockée SQL pour enregistrer le magasin de Hong Kong comme client dans l’application web à distance.Our installation logic is going to call an SQL stored procedure to register the Hong Kong store as a tenant in the remote web application. Il est très important que, si cette procédure échoue, le gestionnaire signale à SharePoint de restaurer l’installation du complément, donc ajoutez les blocs try/catch suivants à la place de TODO2.It is very important that, if this process fails, the handler signals SharePoint to roll back the installation of the add-in, so add the following try/catch blocks in place of TODO2.

      try
    {
        CreateTenant(tenantName);
     }
    catch (Exception e)
    {
         // Tell SharePoint to cancel and roll back the event.
        result.ErrorMessage = e.Message;
        result.Status = SPRemoteEventServiceStatus.CancelWithError;
    }
    

    Tenez compte des informations suivantes :Note the following about this code:

    • Vous créez l’objet tenantName et la méthode CreateTenant dans une étape ultérieure.You create the tenantName object and CreateTenant method in a later step.
    • La propriété Status de l'objet SPRemoteEventResult peut avoir trois valeurs possibles : Continue (par défaut), CancelNoError et CancelWithError. Les deux dernières indiquent à SharePoint de restaurer l'événement.The Status property of the SPRemoteEventResult object can have three possible values: Continue (the default), CancelNoError, and CancelWithError. Either of the latter two tell SharePoint to roll back the event.
  7. L’URL du site web hôte, c'est-à-dire le discriminateur client de l’échantillon, fait partie des informations que SharePoint transmet au récepteur dans le paramètre SPRemoteEventProperties.The host web URL, which is the sample's tenant discriminator, is part of the information that SharePoint passes to the receiver in the SPRemoteEventProperties parameter. Ajoutez la ligne suivante à la méthode ProcessEvent sur la ligne située juste en dessous de l’initialisation de l’objet SPRemoteEventResult.Add the following line to the ProcessEvent method on the line that is just under the initialization of the SPRemoteEventResult object.

      string tenantName = properties.AppEventProperties.HostWebFullUrl.ToString();
    
  8. À présent, notre code doit traiter une particularité de la propriété AppEventProperties.HostWebFullUrl.Now our code has to deal with a little quirk of the AppEventProperties.HostWebFullUrl property. Dans la plupart des autres contextes, SharePoint inclut un caractère "/" de fermeture à la fin de l’URL du site web hôte, afin que la logique de notre exemple de code suppose que ce caractère soit présent.In most other contexts, SharePoint includes a closing "/" character at the end of the host web URL, so the logic of our sample code assumes that this character is present. Mais SharePoint ajoute ce caractère à la fin de la valeur HostWebFullUrl si, et seulement si, le site web hôte est le site web racine d’une collection de sites.But SharePoint adds this character at the end of the HostWebFullUrl value if, and only if, the host web is the root web of a site collection. Notre site web pour Hong Kong étant un sous-site web dans la collection de sites, nous devons ajouter ce caractère pour nous assurer que la même chaîne de nom de client est utilisée dans l’ensemble de l’échantillon.Because our Hong Kong website is a subweb in the site collection, we need to add this character to ensure that the same tenant name string is used throughout the sample.

    Ajoutez le code suivant sous l’initialisation de l’objet tenantName.Add the following code under the initialization of the tenantName object.

      if (!tenantName.EndsWith("/"))
    {
        tenantName += "/";
    }
    
  9. Ajoutez l'instruction using suivante en haut du fichier.Add the following using statements to the top of the file.

      using System.Data.SqlClient;
      using System.Data;
      using ChainStoreWeb.Utilities;
    
  10. Ajoutez la méthode suivante à la classe AppEventReceiver.Add the following method to the AppEventReceiver class. Nous n'aborderons pas ce sujet dans le détail, car l'objectif de cette série d'articles consiste à enseigner la programmation de compléments SharePoint, et non la programmation SQL Server/Azure.We don't discuss this in detail because the purpose of this series of articles is to teach SharePoint Add-in programming, not SQL Server/Azure programming.

      private void CreateTenant(string tenantName)
    {
        // Do not catch exceptions. Allow them to bubble up and trigger roll back
        // of installation.
    
        using (SqlConnection conn = SQLAzureUtilities.GetActiveSqlConnection())
        using (SqlCommand cmd = conn.CreateCommand())
        {
            conn.Open();
            cmd.CommandText = "AddTenant";
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter name = cmd.Parameters.Add("@Name", SqlDbType.NVarChar);
            name.Value = tenantName;
            cmd.ExecuteNonQuery();
        }//dispose conn and cmd
    }
    

    Cette méthode crée une ligne dans une table de base de données appelée Clients.This method creates a row in a database table called Tenants. En plus de la colonne Nom, la table contient également une colonne Version avec une valeur par défaut définie sur 0000.0000.0000.0000.In addition to the Name column, the table also has a Version column with a default value set to 0000.0000.0000.0000. Dans un prochain article de cette série, vous allez créer une logique de première exécution qui examine cette valeur pour déterminer si le complément a déjà été installé sur le site web hôte.In a later article in this series, you will create first-run logic that looks at this value to determine whether the add-in has already been installed on the host web. Si la version est 0000.0000.0000.0000, votre code déploie les listes Employés locaux et Livraisons attendues et déclenche ensuite le numéro de version.If the version is 0000.0000.0000.0000, your code deploys the Local Employees and Expected Shipments lists, and then raises the version number.

Créer le gestionnaire de désinstallationCreate the uninstallation handler

Il est généralement recommandé de gérer l’événement de désinstallation chaque fois que vous gérez l’événement installé.It is usually a good practice to handle the uninstalling event whenever you are handling the installed event. L’idée de base est que le gestionnaire de désinstallation supprime ou recycle des éléments déployés par le gestionnaire installé.The basic idea is that the uninstalling handler deletes or recycles things that the installed handler deployed. Il existe, toutefois, de nombreuses exceptions, donc vous devez vraiment comprendre les cas d’utilisation de votre complément.There are, however, many exceptions, so you really need to understand the use cases of your add-in. Par exemple, une liste déployée avec un complément et remplie avec le complément peut toujours avoir une valeur, même une fois le complément désinstallé, auquel cas vous ne voudrez pas désinstaller la liste dans le gestionnaire d’événements de désinstallation.For example, a list that is deployed with an add-in and populated with the add-in might still have value even after the add-in itself is uninstalled, in which case you wouldn't want to uninstall the list in the uninstalling event handler.

L’événement de désinstallation ne s’exécute pas, comme vous pouvez vous y attendre, lorsqu’un utilisateur supprime le complément de page Contenu du site.The uninstallation event does not run, as you might expect, when a user removes the add-in from the Site Contents page. Cette opération déplace uniquement le complément vers la Corbeille du site web.Doing so only moves the add-in to the website's Recycle Bin. Un utilisateur peut le restaurer, mais la restauration n’exécute pas de nouveau le gestionnaire d’événements installé, afin que tous les éléments déployés à l’aide de ce dernier existent toujours si le complément est restauré.A user could restore it, but restoring does not rerun the installed event handler, so you'd want anything that was deployed with the installed event handler to still exist if the add-in is restored. Les composants SharePoint peuvent être déplacés de la Corbeille vers la Corbeille second niveau.SharePoint components can be moved from the Recycle Bin to the second-stage Recycle Bin. C’est uniquement lorsqu’un complément est supprimé du second niveau que l’événement de désinstallation se produit. Quand un utilisateur fait cela, le complément ne peut pas être restauré, donc nous voulons que le client du magasin de Hong Kong soit supprimé de la base de données d’entreprise à ce stade.It is only when an add-in is deleted from the second-stage that the uninstalling event happens; when a user does that, the add-in is unrestorable anyway, so we want the Hong Kong store's tenancy to be removed from the corporate database at that point.

  1. Définissez la valeur de l’option Gérer la désinstallation du Complément sur True. (Il est possible que cette option soit encore intitulée Gérer la désinstallation de l'application.)Set the value of Handle Add-in Uninstalling to True (it may still be called Handle App Uninstalling). Ceci enregistre le gestionnaire dans le fichier AppManifest.xml comme vous avez précédemment enregistré le gestionnaire d’installation.This registers the handler in the AppManifest.xml file just as you earlier registered the installation handler. Si vous examinez le fichier, vous voyez qu’ils ont exactement la même URL.If you look at the file, you see that they have exactly the same URL. Les outils de développement Office pour Visual Studio partent du principe que vous utilisez le même fichier *.svc.The Office Developer Tools for Visual Studio assumes that you are using the same *.svc file. Nous effectuons cette procédure dans cet exemple, et c’est une pratique standard.We are doing that in this sample, and it is a standard practice.

  2. Ajoutez le code suivant à la place de TODO3 dans le fichier AppEventReceiver.svc.cs.Add the following code in place of TODO3 in the AppEventReceiver.svc.cs file.

      try
    {
        DeleteTenant(tenantName);
     }
    catch (Exception e)
    {
         // Tell SharePoint to cancel and roll back the event.
        result.ErrorMessage = e.Message;
        result.Status = SPRemoteEventServiceStatus.CancelWithError;
    }
    

    Tenez compte des informations suivantes :Note the following about this code:

    • La méthode DeleteTenant est ajoutée à l’étape suivante.The DeleteTenant method is added in the next step.
    • Annuler la désinstallation du complément revient à laisser celui-ci dans la Corbeille second niveau, à partir de laquelle il peut toujours être restauré.Rolling back the uninstallation of the add-in leaves it in the second-stage Recycle Bin, from which it could still be restored.
  3. Ajoutez la méthode suivante à la classe AppEventReceiver.Add the following method to the AppEventReceiver class.

      private void DeleteTenant(string tenantName)
    {
        // Do not catch exceptions. Allow them to bubble up and trigger roll back
        // of un-installation (removal from 2nd level Recycle Bin).
    
        using (SqlConnection conn = SQLAzureUtilities.GetActiveSqlConnection())
        using (SqlCommand cmd = conn.CreateCommand())
        {
            conn.Open();
            cmd.CommandText = "RemoveTenant";
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter name = cmd.Parameters.Add("@Name", SqlDbType.NVarChar);
            name.Value = tenantName;
            cmd.ExecuteNonQuery();                
        }//dispose conn and cmd
    }
    

Note

Dans un article précédent de cette série, vous avez configuré le projet afin qu’il régénère la base de données d’entreprise à chaque fois que vous appuyez sur F5.In an earlier article in this series, you configured the project to rebuild the corporate database each time you select F5. Cela permet de vider la table Clients.This empties the Tenants table.

Exécuter le complément et tester le gestionnaire d’installationRun the add-in and test the installation handler

  1. Utilisez la touche F5 pour déployer et exécuter votre complément.Use the F5 key to deploy and run your add-in. Visual Studio héberge l’application web à distance dans IIS Express et héberge la base de données SQL dans SQL Express.Visual Studio hosts the remote web application in IIS Express and hosts the SQL database in SQL Express. Il effectue une installation temporaire du complément sur votre site SharePoint de test, exécute le gestionnaire d’événements d’installation et exécute immédiatement le complément.It also makes a temporary installation of the add-in on your test SharePoint site, runs the installation event handler, and immediately runs the add-in. Vous êtes invité à accorder des autorisations pour le complément avant l’ouverture de sa page de démarrage.You are prompted to grant permissions to the add-in before its start page opens.

  2. Lorsque la page d’accueil du complément s’ouvre, sélectionnez l’icône d’engrenage du contrôle Chrome dans la partie supérieure, puis sélectionnez Paramètres du compte.When the add-in's start page opens, select the gear icon on the chrome control at the top, and then select Account settings.

  3. Sur la page Paramètres de comptes, sélectionnez le bouton Afficher la version du complément.On the Accounts settings page, select the Show Add-in Version button. La version apparaît sous 0000.0000.0000.0000.The version shows as 0000.0000.0000.0000.

    Figure 1. Page Paramètres du compteFigure 1. Account settings page

    Page Paramètres du compte avec l’en-tête « Paramètres du compte », un bouton nommé « Afficher la version du complément » sous lequel se trouve une ligne de texte indiquant « Version enregistrée : zéro zéro zéro zéro point zéro zéro zéro zéro point zéro zéro zéro zéro point zéro zéro zéro zéro ».

  4. Pour terminer la session de débogage, fermez la fenêtre du navigateur ou arrêtez le débogage dans Visual Studio.To end the debugging session, close the browser window or stop debugging in Visual Studio. Chaque fois que vous appuyez sur F5, Visual Studio retire la version précédente du complément et installe la dernière.Each time that you select F5, Visual Studio retracts the previous version of the add-in and installs the latest one.

  5. Vous allez travailler avec ce complément et la solution Visual Studio dans d’autres articles. Nous vous recommandons donc de retirer le complément une dernière fois quand vous avez terminé de travailler et que vous ne comptez pas le réutiliser pendant un moment.You will work with this add-in and Visual Studio solution in other articles, and it's a good practice to retract the add-in one last time when you are done working with it for a while. Cliquez avec le bouton droit sur le projet dans l’Explorateur de solutions et sélectionnez Retirer.Right-click the project in Solution Explorer and select Retract.

Étapes suivantesNext steps

Dans l'article suivant de cette série, vous allez ajouter une logique de première exécution au complément, ce qui permet de déployer par programmation la liste Employés locaux et le bouton de ruban personnalisé : Ajouter une logique de première exécution au complément hébergé par le fournisseur.In the next article of the series, you will add first-run logic to the add-in that programmatically deploys the Local Employees list and the custom ribbon button: Add first-run logic to the provider-hosted add-in.