Ajouter des opérations d’écriture SharePoint au complément hébergé par le fournisseurAdd SharePoint write operations to the provider-hosted add-in

Cet article est le cinquiè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 fifth 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 BeforeSharePointWriteOps.sln.You can also download the repository at SharePoint_Provider-hosted_Add-Ins_Tutorials and open the BeforeSharePointWriteOps.sln file.

Dans cet article, nous reprenons le codage en ajoutant certaines fonctions d’écriture de données dans le complément SharePoint Chain Store.In this article, we get back to coding by adding some functions that write data to the Chain Store SharePoint Add-in.

Modifier une valeur de colonne dans un élément de liste SharePointChange a column value on a SharePoint list item

Notre complément comporte un bouton de ruban personnalisé qui ajoute un employé de la liste Employés locaux du magasin de Hong Kong à la base de données d’entreprise.Our add-in has a custom ribbon button that adds an employee from the Hong Kong store's Local Employees list to the corporate database. Mais l’utilisateur doit penser à modifier manuellement la valeur du champ Ajouté à la base de données d’entreprise sur Oui.But the user has to remember to manually change the value of the Added to Corporate DB field to Yes. Nous allons ajouter du code pour effectuer automatiquement cette opération.Let's add code to do that automatically.

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, ouvrez le fichier EmployeeAdder.cs.In Solution Explorer, open the EmployeeAdder.cs file.

  2. Ajoutez la ligne suivante à la méthode Page_Load entre l’appel de AddLocalEmployeeToCorpDB et l’appel de Response.Redirect.Add the following line to the Page_Load method between the call of AddLocalEmployeeToCorpDB and the call of Response.Redirect. Dans l’étape suivante, vous créez la méthode SetLocalEmployeeSyncStatus.In the next step, you create the SetLocalEmployeeSyncStatus method.

       // Write to SharePoint 
     SetLocalEmployeeSyncStatus();
    
  3. Ajoutez la nouvelle méthode suivante à la classe EmployeeAdder.Add the following new method to the EmployeeAdder class.

       private void SetLocalEmployeeSyncStatus()
     {
         using (var clientContext = spContext.CreateUserClientContextForSPHost())
         {
             List localEmployeesList = clientContext.Web.Lists.GetByTitle("Local Employees");
             ListItem selectedLocalEmployee = localEmployeesList.GetItemById(listItemID);
             selectedLocalEmployee["Added_x0020_to_x0020_Corporate_x"] = true;
             selectedLocalEmployee.Update();
             clientContext.ExecuteQuery();
         }
     }
    

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

    • Le nom interne du champ Ajouté à la base de données d’entreprise semble anormal.The internal name for the Added to Corporate DB field is odd-looking. Les noms de champs internes ne peuvent pas contenir d’espaces. Lorsqu’un utilisateur crée un champ avec des espaces dans son nom d’affichage, SharePoint insère la chaîne « x0020 » à la place de chaque espace lors de la définition du nom interne.Internal field names cannot contain spaces, so when a user creates a field with spaces in its display name, SharePoint substitutes the string "x0020" for each space when it sets the internal name. Cela transforme « Ajouté à la base de données d’entreprise » en « Ajouté_x0020_à_x0020_la_x0020_base_x0020_de_x0020_données_x0020_d’entreprise ».This turns "Added to Employee DB" into "Added_x0020_to_x0020_Corporate_x0020_DB". Les noms internes ne peuvent pas comporter plus de 32 caractères, c’est pourquoi le nom est tronqué à seulement « Ajouté_x0020_à_x0020_la_x0020_ba ».Internal names cannot be more than 32 characters, so the name is truncated to just "Added_x0020_to_x0020_Corporate_x".

    • Bien que la colonne Ajouté à la base de données d’entreprise soit appelée un champ Oui/Non dans l’interface utilisateur SharePoint, il s’agit en réalité d’une valeur booléenne, c’est pourquoi sa valeur est définie sur true, et non sur Oui.Although the Added to Corporate DB column is called a Yes/No field in the SharePoint UI, it is really a boolean, so its value is set to true, not Yes.

    • La méthode Update de la classe ListItem doit être appelée pour valider les modifications apportées à la base de données de contenu SharePoint. D'une manière générale mais pas universelle, lorsque vous modifiez une valeur de propriété d'un objet stocké dans les bases de données SharePoint, vous devez appeler la méthode Update de l'objet.The Update method of the ListItem class must be called to commit the changes to SharePoint's content database. It is a general, but not quite universal, rule that when you change a property value of an object that is stored in the SharePoint databases, you must call the object's Update method.

Demander l’autorisation d’écrire la liste web hôteRequest permission to write to the host web list

Étant donné que le complément peut désormais non seulement lire la liste, mais aussi écrire dedans, nous devons passer les autorisations demandées par le complément du statut de lecture à celui d'écriture.Because the add-in is now writing to the list as well as reading it, we need to escalate the permissions that the add-in requests from Read to Write. Procédez comme suit.Follow these steps.

  1. Dans l' Explorateur de solutions, ouvrez le fichier AppManifest.xml dans le projet ChainStore.In Solution Explorer, open the AppManifest.xml file in the ChainStore project.

  2. Ouvrez l’onglet Autorisations et dans le champ Autorisation, sélectionnez Écriture dans le menu déroulant.Open the Permissions tab, and in the Permission field, select Write from the drop-down.

  3. Enregistrez le fichier.Save the file.

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.

  2. Dans le formulaire d’autorisations, sélectionnez Employés locaux dans la liste, puis Approuver.On the permission form, select Local Employees from the list, and then select Trust it.

  3. Lorsque la page d'accueil du complément s'ouvre, cliquez sur Retour au site sur le contrôle Chrome dans la partie supérieure.When the add-in's start page opens, click Back to Site on the chrome control at the top.

  4. Dans 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. Si la liste ne comporte aucun employé dont la colonne Ajouté à la base de données d’entreprise est définie sur Non, ajoutez un employé à la liste, et n’activez pas la case à cocher Ajouté à la base de données d’entreprise.If there are no employees on the list with No in the Added to Corporate DB column, add an employee to the list, and 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 d’entreprise.On the ribbon, open the Items tab. In the Actions section of the tab is the custom button Add to Corporate DB.

  7. Dans la liste, sélectionnez un employé dont la colonne Ajouté à la base de données d'entreprise est définie sur Non.Select an employee on the list that has No in the Added to Corporate DB column.

  8. Sélectionnez le bouton Ajouter à la base de données d’entreprise.Select the Add to Corporate DB button. (Vous devez d’abord sélectionner un élément.)(You must select an item first.)

  9. Il vous semble que la page se recharge, 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. La valeur du champ Ajouté à la base de données d’entreprise pour l’employé se transforme en Oui.The value of the Added to Corporate DB field for the employee changes to Yes.

    Note

    Qu’est-ce qui empêche un utilisateur de modifier manuellement la valeur Ajouté à la base de données d’entreprise de façon à rendre la liste et la base de données d’entreprise incohérentes ?What prevents a user from manually changing the value Added to Corporate DB in a way that makes the list and the corporate database inconsistent? Rien pour l’instant.Nothing does at the moment. Vous recevrez la solution à ce problème dans un prochain article de cette série.You'll get the solution to this problem in a later article of this series.

  10. 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. Quand vous appuyez sur F5, Visual Studio retire la version précédente du complément et installe la dernière.Each time you select F5, Visual Studio retracts the previous version of the add-in and installs the latest one.

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

Créer une nouvelle liste personnalisée sur le site web hôteCreate a new custom list on the host website

L’amélioration suivante apportée au complément Chain Store consiste à créer des éléments dans une liste, au lieu de simplement modifier un champ dans un élément existant.The next improvement to the Chain Store add-in is to create new items in a list, instead of merely changing a field in an existing item. Plus précisément, lorsqu’une nouvelle commande est passée au niveau de l’entreprise, un élément est automatiquement créé dans une liste SharePoint pour avertir les employés locaux qu’ils doivent attendre une livraison.Specifically, when a new order is placed at the corporate level, an item is automatically created in a SharePoint list that alerts local employees to expect a shipment. La liste est appelée Livraisons attendues et vous la créez en suivant les étapes ci-dessous.The list is called Expected Shipments and you create it with the following steps. Dans un prochain article de cette série, vous découvrirez comment ajouter par programmation une liste personnalisée à un site web hôte, mais pour l’instant vous ajouterez celui-ci manuellement.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 this 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 Livraisons attendues comme nom et sélectionnez Créer.In the Adding Custom List dialog, specify Expected Shipments as the name, and then select Create.

  3. Sur la page Contenu du site, ouvrez la liste Livraisons attendues.On the Site Contents page, open the Expected Shipments list.

  4. Dans le ruban, sur l’onglet Liste, sélectionnez Paramètres de la 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, indiquez Produit au lieu de Titre comme nom de la colonne, puis sélectionnez OK.In the Edit Column form, change the Column name from Title to Product, 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 un précédent article de cette série, vous avez appris à créer des colonnes personnalisées pour une liste. Pour la liste Livraisons attendues, ajoutez quatre colonnes à l'aide des valeurs du tableau suivant. Laissez tous les autres paramètres sur leurs valeurs par défaut.In a previous article of this series, you learned how to create custom columns for a list. For the Expected Shipments list, add four columns, using the values in the following table. Leave all other settings at their defaults.

    Nom de colonneColumn name TypeType Requis ?Required? Valeur par défautDefault value
    FournisseurSupplier Une seule ligne de texteSingle line of text Non requisNot required AucunNone
    QuantitéQuantity NuméroNumber RequisRequired 11
    ArrivéArrived Oui/NonYes/No Non requisNot required NonNo
    Ajouté à l’inventaireAdded to Inventory Oui/NonYes/No Non requisNot required NonNo
  9. Après avoir créé les colonnes, sur la page des paramètres de liste, sélectionnez Contenu du site pour ouvrir la page Contenu du site.After you have created the columns, on the list settings page, select Site Contents to open the Site Contents page. Ouvrez la liste Livraisons attendues.Open the Expected Shipments list.

  10. Sélectionnez nouvel élément.Select new item. Le formulaire de création d’élément doit se présenter exactement comme suit, y compris les deux astérisques indiquant les champs obligatoires.The item creation form should look exactly like the following, including the two asterisks that indicate required fields.

    Figure 1. Formulaire de création d’élément de la liste Livraisons attenduesFigure 1. Item creation form for the Expected Shipments list

    Formulaire de création d’élément de la liste des livraisons prévues. Avec des champs Produit, Fournisseur, Quantité, Arrivé et « Ajouté à l’inventaire ». Des astérisques se trouvent à côté des titres Produit et Quantité, et Quantité comporte la valeur par défaut de un.

  11. Nous ne voulons pas créer manuellement des éléments dans cette liste, donc cliquez sur Annuler.We don't want to manually create items in this list, so click Cancel.

Insérer un élément dans une liste SharePointInsert an item into a SharePoint list

Maintenant, ajoutez une fonction au complément qui permet de créer un élément dans la liste Livraisons attendues à chaque fois qu'une commande est passée pour le magasin de Hong Kong au niveau de l'entreprise.Now you add a function to the add-in that creates an item in the Expected Shipments list whenever an order for the Hong Kong store is placed at the corporate level.

  1. Dans l' Explorateur de solutions, ouvrez le fichier OrderForm.aspx.cs.In Solution Explorer, open the OrderForm.aspx.cs file.

  2. Ajoutez une instruction using pour l'élément Microsoft.SharePoint.Client en haut du fichier.Add a using statement for Microsoft.SharePoint.Client to the top of the file.

  3. Dans la méthode btnCreateOrder_Click, ajoutez la ligne suivante juste en dessous de l’appel vers CreateOrder.In the btnCreateOrder_Click method, add the following line just under the call to CreateOrder. Vous créerez la méthode CreateExpectedShipment dans l’étape suivante.You'll create the CreateExpectedShipment method in the next step.

      CreateExpectedShipment(txtBoxSupplier.Text, txtBoxItemName.Text, quantity);
    
  4. Ajoutez la méthode suivante à la classe OrderForm.Add the following method to the OrderForm class.

      private void CreateExpectedShipment(string supplier, string product, UInt16 quantity)
    {
        using (var clientContext = spContext.CreateUserClientContextForSPHost())
        {
            List expectedShipmentsList = clientContext.Web.Lists.GetByTitle("Expected Shipments");
            ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation();
            ListItem newItem = expectedShipmentsList.AddItem(itemCreateInfo);
            newItem["Title"] = product;
            newItem["Supplier"] = supplier;
            newItem["Quantity"] = quantity;
            newItem.Update();
            clientContext.ExecuteQuery();
        }
    }
    

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

    • Un objet ListItem n’est pas créé avec un constructeur.A ListItem object is not created with a constructor. Ceci, pour des raisons de performance.This is for performance reasons. Un objet ListItem comporte de nombreuses propriétés (avec des valeurs par défaut).A ListItem object has many properties (with default values). Si un constructeur est utilisé, l’intégralité de l’objet serait inclus dans le message XML que la méthode ExecuteQuery envoie au serveur.If a constructor is used, the entire object would be included in the XML message that the ExecuteQuery method sends to the server.

    • L’objet ListItemCreationInformation est un objet léger qui contient uniquement les valeurs minimales qui ne sont pas par défaut dont le serveur a besoin pour créer un objet ListItem.The ListItemCreationInformation object is a lightweight object that only contains the minimal non-default values that the server needs to create a ListItem object. Il peut sembler qu’il existe une ligne créant un objet ListItem, mais n’oubliez pas que cette ligne ajoute uniquement certaines marques XML à un message envoyé au serveur.It may appear that there is a line that creates a ListItem object, but recall that this line only adds some XML markup to a message that is sent to the server. L’objet ListItem est créé sur le serveur.The ListItem object is created there on the server.

    • Il est inutile de renvoyer l’objet ListItem au client, donc il n’existe aucun appel à la méthode ClientContext.Load.There is no need to bring the ListItem object back down to the client, so there is no call to the ClientContext.Load method.

    • Le code ne doit pas définir explicitement les champs Arrivé ou Ajouté à l’inventaire, car ils sont définis sur leur valeur par défaut Non qui correspond à ce que nous souhaitons.The code does not need to explicitly set the Arrived or Added to Inventory fields because they have default values of No, which is what we want.

Recherche de composants supprimésCheck for deleted components

Toute personne disposant des privilèges de propriétaire de liste pour une liste SharePoint peut supprimer la liste. Si la liste est déployée sur le site web hôte par un complément, le propriétaire du site web hôte peut la supprimer. Cela peut arriver si le propriétaire décide de travailler sans la fonctionnalité fournie par la liste. (Elle peut être restaurée à partir de la Corbeille SharePoint si le propriétaire change d'avis.)Anyone with list owner privileges for a SharePoint list can delete the list. And if the list is deployed to the host web by an add-in, the website owner of the host web can delete it. That may happen if the owner decides to do without the functionality provided by the list. (It can be restored from the SharePoint Recycle Bin if the owner changes his mind.)

La méthode CreateExpectedShipment dépend de l’existence de la liste Livraisons attendues.The CreateExpectedShipment method depends on the existence of the Expected Shipments list. Supposons que le propriétaire du site web a décidé de supprimer la liste.Suppose a website owner decided to delete the list. Plus tard, lorsqu’une commande est ajoutée avec le complément Formulaire de commande, la méthode CreateExpectedShipment est appelée et lève une exception dont le message indique qu’il n’y a aucune liste Livraisons attendues sur le site web SharePoint.Later, when an order is added with the add-in's Order Form, the CreateExpectedShipment method is called and throws an exception whose message says that there's no Expected Shipments list on the SharePoint website.

Vous souhaiterez peut-être que la méthode vérifie la nullité de expectedShipmentsList avant d’en faire quoi que ce soit.You might want the method to check the expectedShipmentsList for nullity before it does anything with it. Lorsque vous utilisez CSOM, vous ne pouvez pas effectuer cette vérification avec une structure simple comme suit :When you are working with CSOM, you can not make this check with a simple structure like this:

if (expectedShipmentsList != null) { ... }

Au lieu de cela, vous devez utiliser une classe CSOM spéciale appelée ConditionalScope.Instead, you need to use a special CSOM class called ConditionalScope. Les raisons de cela sont liées au système de traitement par lots CSOM, ce qui a été mentionné dans l’article précédent de cette série (voir Exécution côté client et traitement par lots).The reasons for this are connected to CSOM's batching system, which was mentioned in the previous article in this series (see Client-side runtime and batching). ConditionalScope et le système le traitement par lots sont des rubriques avancées qui n’entrent pas dans le cadre de cette série, mais vous devriez consulter la documentation de MSDN à leur sujet après avoir suivi cette série de didacticiels.ConditionalScope and the batching system are advanced topics that are outside the scope of this getting started series, but you should see MSDN's documentation about them after you have completed this series of tutorials.

Vous pouvez vérifier l’existence d’une liste d’une autre façon, comme suit : au lieu d’utiliser la méthode GetByTitle pour obtenir une référence à la liste, vous pouvez vérifier si une liste avec le nom spécifié existe dans la « liste des listes » du site web avec du code en procédant comme suit.An alternative way to check for the existence of a list is as follows: instead of using the GetByTitle method to get a reference to the list, you can check to see if a list with the specified name is in the website's "list of lists" with code like the following.

var query = from list in clientContext.Web.Lists 
             where list.Title == "Expected Shipments" 
             select list; 
IEnumerable<List> matchingLists = clientContext.LoadQuery(query); 
clientContext.ExecuteQuery(); 
if (matchingLists.Count() != 0) 
{ 
    List expectedShipmentsList = matchingLists.Single(); 
    // Do something with the list. 
}
clientContext.ExecuteQuery(); 

Le code précédent a l’avantage de vous permettre d’éviter les complications de la classe ConditionalScope et nous utilisons exactement ce code ailleurs dans cette série d’articles.The preceding code has the advantage of allowing you to avoid the complications of the ConditionalScope class, and we use exactly this code elsewhere in this series of articles. Toutefois, il présente un inconvénient : ce code nécessite un appel supplémentaire de ExecuteQuery uniquement pour obtenir la valeur que vous voulez vérifier dans l’instruction if.But there is a disadvantage too: this code requires an extra call of ExecuteQuery solely to get the value you want to check in the if statement.

Si nous utilisons cette technique dans la méthode CreateExpectedShipment pour vérifier l’existence de la liste, cette méthode doit comporter deux appels de ExecuteQuery, chacun effectuant une requête HTTP à partir du serveur web distant vers SharePoint.If we use this technique in the CreateExpectedShipment method to check for the existence of the list, that method will have two calls of ExecuteQuery, each of which makes an HTTP request from the remote web server to SharePoint. Ces requêtes constituent la partie la plus fastidieuse d’une méthode CSOM, il est donc généralement recommandé de les réduire.These requests are the most time-consuming part of any CSOM method, so it is generally a good practice to minimize them.

Nous laisserons la méthode CreateExpectedShipment telle quelle, mais dans un complément de production, vous devez réfléchir à la façon dont votre code va fonctionner si un composant qu’il référence est supprimé.We will leave the CreateExpectedShipment method as is, but in a production add-in, you need to think about how your code is going to work if a component that it references is deleted. La restauration par programme de la liste de la Corbeille est une option, mais elle ennuierait les utilisateurs qui ont intentionnellement décidé de supprimer la liste.Programmatically restoring the list from the Recycle Bin is one option, but that would annoy users who intentionally decided to delete the list.

Vous devez également tenir compte du fait que ne rien faire du tout pour empêcher l’exception pourrait constituer le meilleur choix.You should also consider that doing nothing at all to prevent the exception might be the best choice. Une exception à partir de SharePoint préviendrait les utilisateurs que la suppression de la liste a détruit une partie du complément, ce que la personne qui l’a supprimé n’avait peut-être pas réalisé.An exception from SharePoint would alert users that the deletion of the list has broken part of the add-in, which is something the person who deleted it might not have realized. Un utilisateur peut ensuite décider de restaurer la liste à partir de la Corbeille ou de continuer sans la partie du complément qui ne fonctionne plus.A user can then decide whether to restore the list from the Recycle Bin or do without the part of the add-in functionality that no longer works.

Demander l’autorisation de gérer le site webRequest permission to manage the website

Rappelez-vous que lorsqu’un complément demande une autorisation de lecture ou d’écriture avec l’étendue de liste, SharePoint invite l’utilisateur à approuver le complément et la boîte de dialogue contient une liste déroulante dans laquelle l’utilisateur sélectionne la liste à laquelle le complément doit recevoir l’accès.Recall that when an add-in requests Read or Write permission with the scope of List, SharePoint prompts the user to trust the add-in, and the dialog contains a drop-down list where the user selects the list to which the add-in should have access. Vous ne pouvez sélectionner qu'une seule liste.Only one list can be selected. Mais le complément Chain Store écrit désormais dans deux listes différentes.But the Chain Store add-in now writes to two different lists. Pour accéder à plusieurs listes, le complément doit demander l’autorisation avec l’étendue du site web.To gain access to multiple lists, the add-in has to request permission with the scope of Web. Procédez comme suit :Follow these steps:

  1. Dans l' Explorateur de solutions, ouvrez le fichier AppManifest.xml dans le projet ChainStore.In Solution Explorer, open the AppManifest.xml file in the ChainStore project.

  2. Ouvrez l’onglet Autorisations et dans le champ Étendue, sélectionnez Web dans la liste déroulante.Open the Permissions tab, and in the Scope field, select Web from the drop-down.

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

  4. Enregistrez le fichier.Save the file.

Exécution du complément et test de la création d'élémentRun the add-in and test the item creation

  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.

  2. Lorsque la page d’accueil du complément s’ouvre, sélectionnez le lien Formulaire de commande au bas de la page.When the add-in's start page opens, select the Order Form link at the bottom of the page.

  3. Saisissez des valeurs dans le formulaire et sélectionnez Passer une commande.Enter some values in the form, and then select Place Order.

  4. Utilisez le bouton de retour du navigateur pour revenir à la page d’accueil, puis sélectionnez Retour au site sur le contrôle Chrome dans la partie supérieure.Use the browser's back button to go back to the start page, and then select Back to Site on the chrome control at the top.

  5. À partir de la page d’accueil du magasin de Hong Kong, accédez à la page Contenu du site et ouvrez la liste Livraisons attendues.From the home page of the Hong Kong store, go to Site Contents and open the Expected Shipments list. Il existe désormais un élément dans la liste correspondant à la commande.There is now an item on the list corresponding to the order. La capture d’écran suivante est un exemple.The following screenshot is an example.

    Figure 2. Liste Livraisons attendues avec un seul élémentFigure 2. Expected Shipments list with a single item

    Liste Livraisons attendues avec un seul élément

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

  7. 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 le prochain article, vous allez apprendre à faire apparaître le formulaire de commande distant en tant que composant WebPart dans une page SharePoint : Inclure un composant de complément dans le complément hébergé par le fournisseur.In the next article, you'll learn how to surface the remote Order Form as a Web Part on a SharePoint page: Include an add-in part in the provider-hosted add-in.