Inclure un bouton personnalisé dans le complément hébergé par le fournisseurInclude a custom button in the provider-hosted add-in

Cet article est le troisiè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 third 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, which you can find at Get started creating provider-hosted SharePoint Add-ins.

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 BeforeRibbonButton.sln.You can also download the repository at SharePoint_Provider-hosted_Add-Ins_Tutorials and open the BeforeRibbonButton.sln file.

Un complément SharePoint peut comporter des actions personnalisées, c’est-à-dire, selon la terminologie SharePoint, des éléments de menu ou des boutons du ruban personnalisés.A SharePoint Add-in can include custom actions, which is the SharePoint term for custom menu items or ribbon buttons. Dans cet article, vous allez apprendre à créer un bouton personnalisé qui synchronise une liste SharePoint avec une base de données distante.In this article, you'll learn how to create a custom button that synchronizes a SharePoint list with a remote database.

Création d’une liste personnalisée sur le site web hôteCreate a custom list on the host website

Le bouton personnalisé apparaîtra sur le ruban d'une liste spécifique qui enregistre les employés du magasin local. Dans un autre article de cette série, vous apprendrez comment ajouter par programmation une liste personnalisée à un site web hôte, mais pour l'instant vous allez en ajouter une manuellement.The custom button is going to be on the ribbon of a specific list that records the employees of the local store. In a later article in this series, you'll learn how to programmatically add a custom list to a host website, but for now you'll add one manually.

  1. À partir de la page d’accueil du magasin Fabrikam Hong Kong, accédez à Contenu du site > Ajouter un complément > Liste personnalisée.From the home page of the Fabrikam Hong Kong Store, go to Site Contents > Add an add-in > Custom List.

  2. Dans la boîte de dialogue Ajout d’une liste personnalisée, indiquez Employés locaux pour le nom et sélectionnez Créer.In the Adding Custom List dialog, specify Local Employees as the name, and then select Create.

  3. Sur la page Contenu du site, ouvrez la liste Employés locaux.On the Site Contents page, open the Local Employees list.

  4. Dans l’onglet Liste du ruban, sélectionnez Paramètres de liste.On the List tab on the ribbon, select List Settings.

  5. Dans la section Colonnes de la page Paramètres de liste, sélectionnez la colonne Titre.In the Columns section of the List Settings page, select the Title column.

  6. Dans le formulaire Modifier la colonne, remplacez le Nom de la colonne, Titre par Nom, puis sélectionnez OK.In the Edit Column form, change the Column name from Title to Name, and then select OK.

  7. Sur la page Paramètres, sélectionnez Créer une colonne.On the Settings page, select Create column.

  8. Dans le formulaire Créer une colonne, procédez comme suit :In the Create Column form, do the following:

    1. Pour le Nom de la colonne, entrez Ajouté à la base de donnée d’entreprise.For Column name, enter Added to Corporate DB.
    2. Cochez la case Oui/Non pour définir le type.Set type to Yes/No (check box).
    3. Choisissez Non comme Valeur par défaut.Set Default value to No.
    4. Sélectionnez OK.Select OK. Vous êtes redirigé vers la page Paramètres.You are taken back to the Settings page.
  9. Sélectionnez Contenu du site pour ouvrir la page Contenu du site.Select Site Contents to open the Site Contents page. La vignette de la nouvelle liste est affichée.The tile for the new list is there. Ouvrez-la.Open it.

  10. Cliquez sur nouvel élément et, sur le formulaire de création d’élément, entrez un nom, mais ne sélectionnez pas la case Ajouté à la base de données d’entreprise.Click new item, and on the create item form, enter a name, but do not select Added to Corporate DB. Cliquez sur Enregistrer.Select Save. La liste doit ressembler à ceci :The list should look similar to the following.

    Figure 1. Liste Employés locaux contenant un seul élémentFigure 1. Local Employees list with a single item

    Liste des employés locaux comportant un seul élément : Christian Cartier. La valeur de la colonne « Ajouté à la base de données de l’entreprise » est « Non ».

Ajout du bouton personnaliséAdd the custom button

Dans cette section, vous allez inclure des balises dans le complément qui déploie un bouton dans le ruban de la liste.In this section, you include markup in the add-in that deploys a button to the list's ribbon. Quand un utilisateur met en surbrillance un employé dans la liste et sélectionne le bouton, le nom de l’employé est ajouté à la base de données d’entreprise et le champ Ajouté à la base de données d’entreprise correspondant à l’employé passe de Non à Oui.When a user highlights an employee in the list and selects the button, the employee's name is added to the corporate database, and the Added to Corporate DB field for the employee switches from No to Yes.

  1. Si Visual Studio est ouvert, vous devez le fermer et rouvrir la solution Chain Store pour que Visual Studio affiche votre nouvelle liste (exécutez Visual Studio en tant qu’administrateur).If Visual Studio is open, you have to close it and reopen the Chain Store solution so that Visual Studio can discover your new list (run Visual Studio as an administrator).

    Note

    Les paramètres des projets de démarrage dans Visual Studio ont tendance à retrouver leurs valeurs par défaut à chaque ouverture de la solution.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. Vérifiez 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.
  2. Cliquez avec le bouton droit sur le projet ChainStore dans l’Explorateur de solutions et choisissez Ajouter > Nouvel élément.Right-click the ChainStore project in Solution Explorer, and then select Add > New Item.

  3. Dans la boîte de dialogue Ajouter un nouvel élément, sélectionnez Action personnalisée de ruban, nommez-la AddEmployeeToCorpDB, puis sélectionnez Ajouter.In the Add New Item dialog, select Ribbon Custom Action, name it AddEmployeeToCorpDB, and then select Add.

  4. Vous devez répondre à trois questions dans la boîte de dialogue qui s’ouvre. Donnez les réponses suivantes :The dialog that opens asks three questions. Give the following answers:

    QuestionQuestion Donnez cette réponse :Give this answer:
    Où souhaitez-vous exposer l’action personnalisée ?Where do you want to expose the custom action? Hôte webHost Web
    Sur quoi l’action personnalisée doit-elle porter ?Where is the custom action scoped to? Instance de listeList Instance
    Sur quel élément particulier l’action personnalisée doit-elle porter ?Which particular item is the custom action scoped to? Employés locauxLocal Employees
  5. Sélectionnez Suivant. Vous obtenez trois questions supplémentaires :Select Next and you get three more questions:

    QuestionQuestion Donnez cette réponse :Give this answer:
    Où se trouve le contrôle ?Where is the control located? Ribbon.ListItem.ActionsRibbon.ListItem.Actions
    Quel est le texte d’étiquette du contrôle bouton ?What is the label text for the button control? Ajouter à la base de données de l’entrepriseAdd to Corporate DB
    Vers quoi le contrôle de bouton navigue-t-il ?Where does the button control navigate to? ChainStoreWeb\Pages\EmployeeAdder.aspxChainStoreWeb\Pages\EmployeeAdder.aspx
    (page dont le code-behind ajoute l’employé à la base de données)(this is a page whose code-behind is going to add the employee to the database)
  6. Cliquez sur Terminer.Click Finish.

    Un fichier elements.xml qui définit l’action personnalisée est ajouté au projet et ouvert.An elements.xml file that defines the custom action is added to the project and opened. Pour le moment, vous pouvez traiter ce fichier comme une boîte noire. Vous aurez besoin de le modifier uniquement dans un article ultérieur.For the most part, you can treat this file as a black box, and you won't need to make any changes in it until a later article in this series. Pour l’instant, notez uniquement ce qui suit :For now, note only the following:

    • L’attribut Location de l’élément CommandUIDefinition a pour valeur Ribbon.ListItem.Actions.Controls_children.The Location attribute of the CommandUIDefinition element has the value Ribbon.ListItem.Actions.Controls_children. La deuxième partie de cette valeur, ListItem, désigne l’onglet dans le ruban où le bouton sera placé (ce n’est pas forcément le nom d’affichage exact de l’onglet).The second part of this, ListItem, identifies the tab on the ribbon where the button will be placed (but that may not be the exact display name of the tab). La troisième partie de la valeur, Actions, correspond au nom de la section du ruban où le bouton sera placé.The third part, Actions, is the name of the section of the ribbon where the button will be placed.

    • L’attribut CommandAction de l’élément CommandUIHandler commence par l’espace réservé ~remoteAppUrl. Cet espace est remplacé par l’URL de l’application web distante lorsque le bouton est déployé.The CommandAction attribute of the CommandUIHandler element begins with the placeholder ~remoteAppUrl. This will be replaced with the URL of the remote web application when the button is deployed.

    • Certains paramètres de requête ont été ajoutés à la valeur CommandAction dont les valeurs des espaces réservés sont entre accolades « { } ».A few query parameters have been added to the CommandAction value with placeholder values in braces "{ }". Ces espaces réservés sont résolus pendant l’exécution.These placeholders are resolved at runtime. Notez que l’un d’entre eux est l’ID de l’élément de liste que l’utilisateur a sélectionné avant de sélectionner le bouton personnalisé du ruban.Note that one of them is the ID of the list item that is selected by the user before she selects the custom button on the ribbon.

  7. Dans le projet ChainStoreWeb, ouvrez le fichier Pages/EmployeeAdder.aspx.In the ChainStoreWeb project, open the Pages/EmployeeAdder.aspx file. Notez qu’il n’a pas d’interface utilisateur.Notice that it doesn't have any UI. Le complément va utiliser cette page comme un type de service web,The add-in is going to use this page as a kind of web service. car la classe System.Web.UI.Page ASP.NET implémente System.Web.IHttpHandler et l’événement Page_Load s’exécute automatiquement quand la page est demandée.This is possible because the ASP.NET System.Web.UI.Page class implements System.Web.IHttpHandler and because the Page_Load event runs automatically when the page is requested.

  8. Ouvrez le fichier code-behind Pages/EmployeeAdder.aspx.cs.Open the code-behind file Pages/EmployeeAdder.aspx.cs. La méthode qui ajoute l’employé à la base de données distante, AddLocalEmployeeToCorpDB, est déjà présente.The method that adds the employee to the remote database, AddLocalEmployeeToCorpDB, is already present. Elle utilise l’objet SharePointContext pour obtenir l’URL du site web hôte, dont le complément se sert comme discriminateur client.It uses the SharePointContext object to get the host web's URL, which the add-in uses as its tenant discriminator. La méthode Page_Load doit tout d’abord initialiser cet objet.The first thing the Page_Load method needs to do is initialize this object. L’objet est créé et mis en cache dans la session pendant le chargement de la page de démarrage du complément. Vous devez donc ajouter le code suivant à la méthode Page_Load.The object is created and cached in the Session when the add-in's start page loads, so add the following code to the Page_Load method. (L’objet SharePointContext est défini dans le fichier SharePointContext.cs généré par les outils de développement Office pour Visual Studio lors de la création de la solution de complément.)(The SharePointContext object is defined in the SharePointContext.cs file that the Office Developer Tools for Visual Studio generates when the add-in solution is created.)

      spContext = Session["SPContext"] as SharePointContext;
    
  9. La méthode AddLocalEmployeeToCorpDB prend le nom de l’employé comme un paramètre. Ajoutez la ligne suivante à la méthode Page_Load.The AddLocalEmployeeToCorpDB method takes the employee's name as a parameter, so add the following line to the Page_Load method. Vous créerez la méthode GetLocalEmployeeName à une étape ultérieure.You'll create the GetLocalEmployeeName method in a later step.

      // Read from SharePoint 
    string employeeName = GetLocalEmployeeName();
    
  10. En dessous de cette ligne, ajoutez l’appel à la méthode AddLocalEmployeeToCorpDB.Under this line, add the call to the AddLocalEmployeeToCorpDB method.

      // Write to remote database 
    AddLocalEmployeeToCorpDB(employeeName);
    
  11. Ajoutez une instruction using au fichier pour l'espace de noms Microsoft.SharePoint.Client. (Les Outils de développement Office pour Visual Studio ont inclus l'assembly Microsoft.SharePoint.Client dans le projet ChainStoreWeb lors de sa création.)Add a using statement to file for the namespace Microsoft.SharePoint.Client. (The Office Developer Tools for Visual Studio included the Microsoft.SharePoint.Client assembly in the ChainStoreWeb project when it was created.)

  12. À présent, ajoutez la méthode suivante à la classe EmployeeAdder.Now add the following method to the EmployeeAdder class. Le modèle objet client (CSOM) SharePoint .NET est décrit en détail sur une autre page de MSDN. Nous vous encourageons à la consulter quand vous aurez terminé de lire cette série d’articles.The SharePoint .NET Client-side Object Model (CSOM) is documented in detail elsewhere on MSDN, and we encourage you to explore it when you are finished with this series of articles. Pour cet article, notez que la classe ListItem représente un élément d’une liste SharePoint et que la valeur d’un champ dans l’élément peut être référencée avec la syntaxe « indexeur ».For this article, note that the ListItem class represents an item in a SharePoint list, and that the value of a field in the item can be referenced with "indexer" syntax. Notez également que le code fait référence au champ sous le nom Titre même si vous avez remplacé le nom du champ par Nom.Also notice that the code refers to the field as Title even though you changed the field name to Name. En effet, les champs sont toujours référencés dans le code par leur nom interne, et non par leur nom d’affichage.This is because fields are always referred to in code by their internal name, not their display name. Le nom interne d’un champ est défini quand le champ est créé et ne peut pas être modifié.The internal name of a field is set when the field is created and can never change. Vous terminerez de définir l’élément TODO1 à une étape ultérieure.You complete the TODO1 in a later step.

      private string GetLocalEmployeeName()
    {
        ListItem localEmployee;
    
        // TODO1: Initialize the localEmployee object by getting  
        // the item from SharePoint.
    
        return localEmployee["Title"].ToString();
    }
    
  13. Notre code a besoin de l’ID de l’élément de liste pour pouvoir le récupérer auprès de SharePoint.Our code will need the list item's ID before it can retrieve it from SharePoint. Ajoutez la déclaration suivante à la classe EmployeeAdder juste en dessous de la déclaration de l’objet spContext.Add the following declaration to the EmployeeAdder class just under the declaration for the spContext object.

      private int listItemID;
    
  14. À présent, ajoutez la méthode suivante à la classe EmployeeAdder pour obtenir l’ID de l’élément de liste à partir du paramètre de requête.Now add the following method to the EmployeeAdder class to get the list item's ID from the query parameter.

      private int GetListItemIDFromQueryParameter()
    {
        int result;
        Int32.TryParse(Request.QueryString["SPListItemId"], out result);
        return result;
    }
    
  15. Pour initialiser la variable listItemID, ajoutez la ligne suivante à la méthode Page_Load juste en dessous de la ligne qui initialise la variable spContext.To initialize the listItemID variable, add the following line to the Page_Load method just under the line that initializes the spContext variable.

      listItemID = GetListItemIDFromQueryParameter();
    
  16. Dans l’élément GetLocalEmployeeName, remplacez l’élément TODO1 par le code suivant.In the GetLocalEmployeeName, replace the TODO1 with the following code. Pour l’instant, considérez simplement ce code comme une boîte noire pendant que vous essayez de faire fonctionner le bouton personnalisé.For the time being, just treat this code as a black box while we concentrate on getting the custom button working. Vous en apprendrez davantage sur ce code dans l’article suivant de cette série, qui porte sur le modèle objet client SharePoint.We'll learn more about this code in the next article in this series, which is all about the SharePoint client-side object model.

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

    La méthode complète doit se présenter comme suit :The entire method should now look like the following.

      private string GetLocalEmployeeName()
     {
         ListItem localEmployee;
    
         using (var clientContext = spContext.CreateUserClientContextForSPHost())
         {
             List localEmployeesList = clientContext.Web.Lists.GetByTitle("Local Employees");
             selectedLocalEmployee = localEmployeesList.GetItemById(listItemID);
             clientContext.Load(selectedLocalEmployee);
             clientContext.ExecuteQuery();
         }
         return localEmployee["Title"].ToString();
     }
    
  17. La page EmployeeAdder ne doit pas s’afficher. Ajoutez donc ce qui suit à la dernière ligne de la méthode Page_Load.The EmployeeAdder page should not actually render, so add the following as the last line in the Page_Load method. Le navigateur sera redirigé vers la page en mode liste Employés locaux.This redirects the browser back to the list view page for the Local Employees list.

      // Go back to the Local Employees page
    Response.Redirect(spContext.SPHostUrl.ToString() + "Lists/LocalEmployees/AllItems.aspx", true);
    

    L’intégralité de la méthode Page_Load doit se présenter de la façon suivante.The entire Page_Load method should now look like the following.

          protected void Page_Load(object sender, EventArgs e)
        {
            spContext = Session["SPContext"] as SharePointContext;
            listItemID = GetListItemIDFromQueryParameter();
    
            // Read from SharePoint
            string employeeName = GetLocalEmployeeName();
    
            // Write to remote database
            AddLocalEmployeeToCorpDB(employeeName);
    
            // Go back to the preceding page
            Response.Redirect(spContext.SPHostUrl.ToString() + "Lists/LocalEmployees/AllItems.aspx", true);
        }
    

Demander l’autorisation de lire la liste de sites web hôtesRequest permission to read the host web list

Comme vous avez pu le voir, SharePoint vous invite à accorder les autorisations de complément au site web hôte quand il est installé.As you have seen, SharePoint prompts you to grant the add-in permissions to the host web when it is installed. Vous avez réinstallé le complément à chaque fois que vous avez appuyé sur F5.You have been re-installing the add-in every time you select F5. Jusqu’à présent, le complément n’avait besoin que d’autorisations minimales, mais la méthode GetLocalEmployeeName requiert l’autorisation de lire les listes du site web hôte.So far, the add-in has only needed minimal permissions, but the GetLocalEmployeeName method requires permission to read the lists of the host website. Le complément utilise son manifeste de complément pour indiquer à SharePoint les autorisations dont il a besoin.The add-in uses its add-in manifest to tell SharePoint what permissions it needs. Procédez comme suit.Follow these steps.

  1. Dans l’Explorateur de solutions, ouvrez le fichier AppManifest.xml dans le projet ChainStore (le fichier s’appelle AppManifest car, à l’origine, les compléments étaient des « applications »).In Solution Explorer, open the AppManifest.xml file in the ChainStore project (the file is called AppManifest because add-ins used to be called "apps"). Le concepteur de manifeste s’ouvre.The manifest designer opens.

  2. Ouvrez l’onglet Autorisations et sélectionnez la cellule vide sous la colonne Portée, puis Liste dans la liste déroulante.Open the Permissions tab, select the empty cell under the Scope column, and then select List from the drop-down.

  3. Dans le champ Autorisation, sélectionnez Lecture dans la liste déroulante.In the Permission field, select Read from the drop-down.

  4. Laissez le champ Propriétés vide et enregistrez le fichier.Leave the Properties field empty and save the file. L’onglet Autorisations doit ressembler à ceci :The Permissions tab should look similar to the following.

    Figure 2. Onglet AutorisationsFigure 2. Permissions tab

    Onglet Autorisations du concepteur du manifeste de complément affichant la portée Liste et l’autorisation Lecture.

Exécution du complément et test du boutonRun the add-in and test the button

  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 distante 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 et exécute immédiatement celui-ci.It also makes a temporary installation of the add-in on your test SharePoint site 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. Cette fois-ci, l’invite propose une liste déroulante où vous pouvez sélectionner la liste que l’application doit lire, comme illustré dans la figure suivante.This time the prompt has a drop-down where you select the list that the app needs to read as seen in the following screenshot.

    Figure 3. Invite d’autorisation du complément SharePointFigure 3. SharePoint add-in permission prompt

    Invite d’autorisation du complément SharePoint avec la liste nommée « Employés locaux » sélectionnée dans une liste déroulante intitulée « L’autoriser à lire les éléments de la liste »

  2. Sélectionnez Employés locaux dans la liste et sélectionnez Approuver.Select Local Employees from the list, and then select Trust it.

  3. Quand la page de démarrage du complément s’ouvre, sélectionnez Retour au site sur le contrôle Chrome situé en haut de la page.When the add-in's start page opens, select Back to Site on the chrome control at the top.

  4. À partir de la page d’accueil du site web, accédez à Contenu du site > Employés locaux.From the website's home page, go to Site Contents > Local Employees. La page en mode liste s’ouvre.The list view page opens.

  5. Ajoutez quelques employés à la liste.Add a few employees to the list. Ne sélectionnez pas la case Ajouté à la base de données d’entreprise.Do not select the Added to Corporate DB check box.

  6. Sur le ruban, ouvrez l’onglet Éléments. Dans la section Actions de l’onglet, vous trouverez le bouton personnalisé Ajouter à la base de données de l’entreprise.On the ribbon, open the Items tab. In the Actions section of the tab is the custom button Add to Corporate DB.

  7. Sélectionnez un élément dans la liste.Select an item in the list. La page et le ruban doivent ressembler à ceci :The page and ribbon should look similar to the following.

    Figure 4. Liste Employés locauxFigure 4. Local Employees list

    Liste Employés locaux.

  8. Une fois que vous avez sélectionné un élément dans la liste, sélectionnez Ajouter à la base de données de l’entreprise.After selecting an item in the list, select Add to Corporate DB.

  9. La page semble se recharger, car la méthode Page_Load de la page EmployeeAdder vous redirige vers elle.The page seems to reload because the Page_Load method of the EmployeeAdder page redirects back to it.

  10. Utilisez le bouton précédent du navigateur deux fois pour revenir à la page de démarrage du complément.Use the browser's back button twice to go back to the add-in's start page.

  11. Sélectionnez Afficher les employés. La liste des employés comporte l’employé que vous avez ajouté.Select Show Employees, and the list of employees will be populated with the employee that you added. Voici à quoi elle doit ressembler :It should look similar to the following:

    Figure 5. Liste des employés de l’entreprise sur la page de démarrage du complémentFigure 5. Corporate employees list on the add-in start page

    Liste des employés de l’entreprise sur la page de démarrage du complément affichant le même employé sélectionné à l’étape précédente.

  12. 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.

  13. 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, nous allons arrêter de coder pendant un moment pour en apprendre plus sur le modèle objet client SharePoint.In the next article, we'll take a brief break from coding to get a quick overview of the SharePoint client-side object model.