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

- [WPF] Nouvel article sur c2i.fr par Richard Clark le il y a 2 heures et 4 minutes

- F# nouvelle CTP 1.9.6.2 (update) par Pierrick's Blog le il y a 6 heures et 9 minutes

- La suite ...Proposition de collaboration rédactionnelle entre les communautés de développeurs et Microsoft France par LucasR le 09-05-2008, 17:45

- [Fun] Votre simulateur de vol avec Microsoft ESP par Julien Chable le 09-05-2008, 12:02

- [Best Practices] Customisation du My Site : Comment le modifier en amont et en aval par The Mit's Blog le 09-05-2008, 10:47

- Patrick Tisseghem s'en est allé ... par The Mit's Blog le 09-05-2008, 10:04

- MS AutoCollage par alex# le 09-05-2008, 09:18

- Un grand SharePointeur nous a quitte : Patrick Tisseghem manquera à la communauté ! par RedoBlog - The .NET Gentleman !!! le 09-05-2008, 08:52

- [WPF] Comment charger dynamiquement un fichier XAML qui définit des eventhandler ? par Thomas Lebrun le 09-04-2008, 10:56

- Article sur le filtrage des modèles de site SharePoint par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le 09-04-2008, 00:11