SharePoint - Comment insérer de nouveaux éléments à l'aide du service Web de liste?

StackOverflow https://stackoverflow.com/questions/85392

  •  01-07-2019
  •  | 
  •  

Question

J'ai une liste avec 2 champs de texte et un champ de choix. Comment utiliser le service Web Lists.asmx pour insérer un nouvel élément? Je peux faire une référence Web au service lists.asmx, vous pouvez donc en déduire que cela est connu.

Je voudrais un exemple complet incluant le code et le XML pour la requête CAML. Idéalement, l'échantillon utiliserait C #.

Était-ce utile?

La solution

L’utilisation du service Web de listes pour insérer un élément dans une liste SharePoint peut en effet être délicate. Comme cette méthode est de la forme: Entrée XML, Sortie XML, il peut être difficile d’obtenir les paramètres corrects.

D'abord, jetez un coup d'œil à la définition de la liste. Il peut être récupéré avec la méthode GetList (), comme indiqué ci-dessous:

XmlNode listXml = sharePointLists.GetList(listName);
File.WriteAllText("listdefinition.xml", listXml.OuterXml);

Important, voici les noms des champs et leurs types de données. Les noms de champs ne seront jamais les mêmes que ceux que vous voyez dans l'interface graphique de SharePoint. Un bon exemple est le champ Titre qui est utilisé pour le premier champ de la liste.

Maintenant que vous savez cela, vous pouvez créer la requête pour accéder à SharePoint. Un exemple:

<Batch OnError="Continue">
    <Method ID="1" Cmd="New">
        <Field Name="Title">Abcdef</Field>
        <Field Name="Project_x0020_code">999050</Field>
        <Field Name="Status">Open</Field>    
    </Method>
</Batch>

L'élément Batch est l'élément racine du XML. À l'intérieur, vous pouvez mettre différentes méthodes. Ceux-ci doivent obtenir un identifiant unique (utilisé pour vous signaler les erreurs) et une commande, qui peut par exemple être "Nouveau". ou "Mise à jour". Dans la méthode, vous mettez des éléments de champ qui spécifient la valeur de chaque champ. Par exemple, le champ Titre prend la valeur "Abcdef". Veillez à utiliser le nom exact tel qu'il est renvoyé par GetList ().

Pour exécuter la requête sur SharePoint, utilisez la méthode UpdateListItems ():

XmlNode result = sharePointLists.UpdateListItems(listDefinition.Name, updates);

La valeur de retour est un fragment XML contenant le statut de chaque mise à jour. Par exemple:

<Results xmlns="http://schemas.microsoft.com/sharepoint/soap/">
    <Result ID="1,New">
    <ErrorCode>0x00000000</ErrorCode>
    <z:row ows_ContentTypeId="0x010036F3F587127F1A44B8BA3FEFED4733C6" 
         ows_Title="Abcdef" 
         ows_Project_x0020_code="999050" 
         ows_Status="Open" 
         ows_LinkTitleNoMenu="Abcdef" 
         ows_LinkTitle="Abcdef" 
         ows_ID="1005"            
         ... 
         xmlns:z="#RowsetSchema" />
    </Result>
</Results>

Vous pouvez analyser cela et consulter le code d'erreur pour savoir quelles méthodes ont échoué.

En pratique, j'ai créé une classe de wrapper qui prend soin de tous les détails sales pour moi. Malheureusement, cela appartient à mon employeur, je ne peux donc pas le partager avec vous.

Cette classe d'encapsuleur fait partie d'un utilitaire interne permettant de récupérer des informations de notre base de données de projet et de les publier sur SharePoint. Depuis qu'il a été développé pendant les heures de travail, je ne suis pas autorisé à l'afficher ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top