In Sharepoint è possibile utilizzare il Collaborative Application Markup Language (CAML) per effettuare operazioni CRUD sulle liste. Le query scritte in CAML sono scritte in XML e utilizzando una serie di Tag per la generazione dell’interrogazione. L’elemento radice di una query è rappresentato dal tag <Query>, anche se in molti casi può essere omesso.
Di seguito la struttura di una Caml Query:
<Query>
<Where>
<Eq>
<FieldRef Name=”FieldName” />
<Value Type=”DataType”>Value</Value>
</Eq>
</Where>
<OrderBy>
<FieldRef Name=”FieldName” />
<FieldRef Name=”FieldName” />
</OrderBy>
</Query>
La condizione viene racchiusa all’interno del tag Where. All’interno del tag viene definita la condizione attraverso il tag Eq (operatore che accetta al massimo due elementi).
Elenco dei principali operatori utilizzabili
| Eq | Equivalente a uguale |
| Gt | Equivalente a maggiore |
| Lt | Equivalente a minore |
| Geq | Equivalente a maggiore o uguale |
| Leq | Equivalente a minore o uguale |
| Contains | Equivalente all’operazione like di SQL |
| IsNull | Equivalente a verificare se un valore è null |
| IsNotNull | Equivalente a verificare se un valore è non null |
| BeginsWith | Equivalente a verificare se una stringa inizia con una stringa |
| DateRangeOverlap | Utilizzato con campi Date, serve a verificare se una data coincide o meno con quella indicata |
Nella creazione di query complesse è facile ad over utilizzare combinazione dei tag precedenti.
<Where>
<Eq> Condition... </Eq>
<And>
<Eq> Condition ... </Eq>
<And>
<Eq> Condition ... </Eq>
<Eq> Condition ... </Eq>
</And>
</And>
</Where>
Si può notare che il tag And accetta come elementi figli soltanto due elementi. Ecco perché la generazione di Caml query con più parametri può generare alcuni problemi. Nella pratica è necessario creare sempre due elementi a partire da quelli più’ interni. Per la scrittura di Caml Query si possono utilizzare diversi tools presenti in rete, anche se il risultato ottenuto non sempre è ottimizzato.
E’ spesso utile a qualche procedura custom per la generazione in maniera pseudo-automatica delle query.
Ho condiviso su Github una piccola demo (scritta in Typescript), per la generazione di Caml query. A partire da un array di elementi bidimensionali (composti da una proprietà Name e da una proprietà Value), viene generata la relativa Caml query. Il codice della demo è scaricabile a questo link.