Lorsque l’on développe autour de la plateforme SharePoint, il peut arriver que l’on passe par l’utilisation des WebServices (Lists.asms, webs.asmx, …).
On peut utiliser notamment le service list.asmx pour modifier le contenu de cette liste :
- Suppression
- Ajout
- Modification
Ceci s’effectue avec la méthode “UpdateListItems” qui fonctionne avec un mode BATCH XML. Pour simplifier, il convient de préparer un flux XML dans lequel on décrit la commande à effectuer et les détails de la valeur, associé avec le nom de la liste.
Pour la suppression de deux Items, on aura donc le code XML suivant :
<Batch OnError="Continue" ListVersion="1" ViewName="270C0508-A54F-4387-8AD0-49686D685EB2">
<Method ID="1" Cmd="Delete">
<Field Name='ID'>2</Field>
</Method>
<Method ID="2" Cmd="Delete">
<Field Name='ID'>8</Field>
</Method>
</Batch>
Ceci permet de montrer que l’on peut enchainer une série de commande dans le même flux. Pour un ajout, il faudra fournir toutes les informations de l’item a ajouter à la liste comme suit :
<Batch OnError="Continue" ListVersion="1" iewName="270C0508-A54F-4387-8AD0-49686D685EB2">
<Method ID="1" Cmd="New">
<Field Name='ID'>New</Field>
<Field Name="Title">Value</Field>
<Field Name="Date_Column">2007-3-25</Field>
<Field Name="Date_Time_Column">2006-1-11T09:15:30Z</Field>
</Method>
</Batch>
De même que pour une modification, on aura un flux du type :
<Batch OnError="Continue" PreCalc="TRUE" ListVersion="0" ViewName="{EF2F5A21-0FD0-4654-84ED-112B4F5A48F8}">
<Method ID="1" Cmd="Update">
<Field Name="ID">3</Field>
<Field Name="owshiddenversion">1</Field>
<Field Name="FileRef">http://Server/[sites/][Site/]Shared Documents/Folder</Field>
<Field Name="FSObjType">1</Field>
<Field Name="BaseName">Name</Field>
</Method>
</Batch>
Bref tout ceci est magnifique s’il n’y avait pas quelques pièges à ce système. En effet, l’usage d’un flux XML présente une particularité en cas de charactères spéciaux (<, >, &, \ et ‘) qui sont des charactères utilisés dans le langage XML. Ainsi, le < indique le début d’une balise.
On est donc obligé de traquer ces charactères avant d’envoyer le contenu au WebService.
Cela revient à créer une petite fonction toute bête de remplacement (comme on trouve sur ce site).
J’ai donc adapté cette fonction en C# (qui peut certainement être largement améliorée, mais me suffit dans ce format) :
private string cleantext(string texttoclean)
{
string temp = string.Empty;
temp = texttoclean.Replace("&", "&");
temp = temp.Replace("'", "'");
temp = temp.Replace("\"", """);
temp = temp.Replace(">", ">");
temp = temp.Replace("<", "<");return temp;
}
Il ne reste alors plus qu’à modifier son code pour utiliser cette fonction.
Romelard Fabrice [MVP]
Commentaires
Enregistrer un commentaire