Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Blog Technique de Romelard Fabrice

Les dernières Actualités de Romelard Fabrice (Alias fabrice69 ou F___) principalement autour des technologies Microsoft

Actualités

  • Toutes les actualités et informations sur les technologies Microsoft principalement autour de .NET et SQL Server
SharePoint : Attention à l’utilisation de la méthode UpdateListItems du WebService lists.asmx

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("&", "&amp;");
    temp = temp.Replace("'", "&apos;");
    temp = temp.Replace("\"", "&quot;");
    temp = temp.Replace(">", "&gt;");
    temp = temp.Replace("<", "&lt;");

    return temp;
}

Il ne reste alors plus qu’à modifier son code pour utiliser cette fonction.

Romelard Fabrice [MVP]

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: vendredi 11 juillet 2008 17:02 par ROMELARD Fabrice
Classé sous : ,

Commentaires

ROMELARD Fabrice a dit :

Il est aussi possible de faire ceci via les objets SharePoint :

- Microsoft.SharePoint.Utilities.SPEncode.XmlRemoveControlChars(xxxx)

Microsoft.SharePoint.Utilities.SPEncode.URLEncode(xxx)

Cf :

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.utilities.spencode.urlencode.aspx

Fabrice

# juillet 25, 2008 16:31

Stéphane a dit :

Bonjour,

Dans le cas d'un update,l'utilisation de cette méthode impose de spécifier chacun des items (

<Field Name="ID">) à mettre à jour.

Est il possible de simplement faire une mise à jour en masse (tous les items d'une liste) ?

Merci !

Stéphane

# septembre 5, 2008 09:32
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- WSC08 : Le bilan, Les Photos, Les Webcasts à voir ou à revoir par Blog de Daniel TIZON [daniel] le il y a 6 heures et 2 minutes

- SharePoint et ses DB : Avez vous pensé à les "Tweaker" ? par The Mit's Blog le il y a 6 heures et 31 minutes

- NTttcp : Mesurer la vitesse d'un réseau par Blog d'Olivier Huet le il y a 6 heures et 56 minutes

- Un nouveau quizz par Matthieu MEZIL le il y a 9 heures et 40 minutes

- Webcast ADO.NET Data Services par Matthieu MEZIL le il y a 9 heures et 43 minutes

- edmx : mise à jour du modèle depuis la base par Matthieu MEZIL le il y a 13 heures et 30 minutes

- Alternatif - Mono 2.0 est arrivé! par #Rui le il y a 14 heures et 44 minutes

- Nouveaux avatars pour vos comptes CodeS-SourceS (suite) par Nix's Blog le il y a 16 heures et 48 minutes

- WSC 2008 : les Videos disponibles ! par Philippe Sentenac [MVP SharePoint] le il y a 18 heures et 57 minutes

- Visual Studio Talk Show: Visual Studio Team System par Azra [Florent Santin] le il y a 20 heures et 42 minutes