Ecrire facilement du CAML pour SharePoint

Quiconque travaille avec SharePoint a dû ou doit travailler avec le CAML. Et soyons franc, ce langage est moche et verbeux.

Il existe des beaux outils comme CAML Designer ou feu U2U CAML Builder qui proposent une interface graphique facilitant sa génération. Mais question maintenabilité, cela demande toujours un effort certains.

Voici 2 librairies – l’une en JS et l’autre en C# –  qui permettent de générer du CAML directement dans le code avec une syntaxe accessible et maintenable.

SharePoint JavaScript CAML Builder (CAMLjs)

Installation par le Package Manager

Install-Package CamlJs

L’IntelliSense et l’aide contextuelle sont disponibles

Camlex.net

Camlex propose 2 bibliothèques la première pour C# « classique » …

Install-Package Camlex.NET.dll

… et la seconde pour le client object model de SharePoint.

Install-Package Camlex.Client.dll

Comme pour CAMLjs, l’IntelliSense et l’aide contextuelle sont disponibles

Exemple

Maintenant un exemple simple pour donner un aperçu de la syntaxe et du gain apporté par ces deux bibliothèques;

<Where>
  <And>
    <BeginsWith>
      <FieldRef Name="Title" />
      <Value Type="Text">Ghislain</Value>
    </BeginsWith>
    <Contains>
      <FieldRef Name="Project" />
      <Value Type="Text">SharePoint</Value>
    </Contains>
  </And>
</Where>
<OrderBy>
  <FieldRef Name="ExpirationDate"/>
</OrderBy>
var camlBuilder = new CamlBuilder();
var caml = camlBuilder
    .Where().TextField("Title").BeginsWith("Ghislain")
    .And().TextField("Project").Contains("SharePoint")
    .OrderBy("ExpirationDate")
    .ToString();
string caml = Camlex.Query()
    .Where(x => ((string)x["Title"]).StartsWith("Ghislain")
        && ((string)x["Project"]).Contains("SharePoint"))
    .OrderBy(x => x["ExpirationDate"])
    .ToString();

J’avais évoqué CAMLjs dans l’article concernant l’export PDF avec jsPDF. Maintenant vous avez les outils pour vous faciliter la vie en évitant d’écrire du CAML directement.

Références :

SharePoint JavaScript CAML Builder

Camlex