Benvenuti nella seconda parte della serie di post in cui cercherò di spiegare le caratteristiche basilari della librebria di classi "SharepointDAL".
Un piccolo annuncio di servizio, il progetto "SharepointDAL" è ora disponibile anche su CodePlex alla
url : http://www.codeplex.com/SharepointDAL
Oggi parlerò della parte probabilmente più ostica di tutto Sharepoint: CAML.
CAML è un linguaggio di mark-up basato su XML e viene usato estensivamente in tutto Sharepoint.
Il programmatore applicativo lo vede soprattutto nella composizione delle query di estrazione dati e
come vi sarete sicuramente accorti scrivere query complesse in CAML è un compito assai poco gradevole.
Fortunatamente SharepointDAL mette a disposizione una classe (CAMLQuery) che permette di
non usare CAML per scrivere query CAML .
In SharepointDAL esiste un oggetto specifico per gestire le query CAML: il suo nome è CAMLQuery.
CAMLQuery descrive le condizioni di ricerca memorizzadole in delle collection di condizioni. Queste collection
sono implementate dall'oggetto WhereFields. Ogni collection WhereFields contiene un insieme di valori di ricerca
legati al singolo Field, rappresentato dall'oggetto WhereField.
Ogni condizione è caratterizzata dall'operatore logico che la pone in relazione
con le altre condizioni presenti nella collection WhereFields.
Le condizioni di ricerca definite in un gruppo possono poi essere poste in relazione fra di loro usando i medesimi
operatori logici usando la collection WhereFieldsGroup dell'oggetto CAMLQuery. Questa funzionalità permette di riprodurre il meccanismo dei gruppi di condizione ed il loro ordine di valutazione.
Un esempio concreto consentirà di chiarire i concetti.
------------------------------------------------------------
Dim f0 As New SharepointDAL.WhereFields
Dim f1 As New SharepointDAL.WhereFields
Dim O As New SharepointDAL.OrderByFields
Dim CAMLQuery As New SharepointDAL.CAMLQuery
Dim CAML As String = ""
x.Init("http://wss", "")
f0.Add(x.Title, ComparisionOperator.Equals, "ALFA", LogicOperator.OR)
f0.Add(x.Title, ComparisionOperator.Equals, "BETA", LogicOperator.OR)
'equivale a (Title='ALFA' OR Title='BETA')
f1.Add(x.MultipleLinesOfText, ComparisionOperator.Contains, "1", LogicOperator.OR)
f1.Add(x.MultipleLinesOfText, ComparisionOperator.Contains, "2", LogicOperator.OR)
'equivale a (MultipleLinesOfText LIKE '%1%' OR MultipleLinesOfText LIKE '%2%')
CAMLQuery.WhereFieldsGroup.Add(f0, LogicOperator.AND)
CAMLQuery.WhereFieldsGroup.Add(f1, LogicOperator.AND)
-----------------------------------------------------------
Le istruzioni sopra rappresentano l'equivalente query SQL
SELECT * FROM TestTable WHERE
(Title='ALFA' OR Title='BETA')
AND
(MultipleLinesOfText LIKE '%1%' OR MultipleLinesOfText LIKE '%2%')
La traduzione in CAML di quanto sopra è
------------------------------------------------------------------------------
<FieldRef Name="Title" />
<Value Type="Text">ALFA< span>Value>
< span>Eq>
<FieldRef Name="Title" />
<Value Type="Text">BETA< span>Value>
< span>Eq>
< span>Or>
<FieldRef Name="MultipleLinesOfText" />
<Value Type="Note">1< span>Value>
< span>Contains>
<FieldRef Name="MultipleLinesOfText" />
<Value Type="Note">2< span>Value>
< span>Contains>
< span>Or>
< span>And>
< span>Where>
--------------------------------------------------------
CAML = CAMLQuery.BuildCAMLQueryString()
x.CAMLQuery = CAMLQuery
x.LoadAll()
x.IncludeLookUpValuesInDataTable = True
Me.DataGridView1.DataSource = x.GetDataTable
-----------------------------------------------------------------
L'esempio usa l' oggetto SharepointDAL.CAMLQuery da solo e successivamente lo passa
all'oggetto CAMLQuery interno dell'oggetto SharepointDAL.List.
Questo significa che SharepointDAL.List incorpora l'oggetto CAMLQUery per cui scrivere
x.CAMLQuery.WhereFieldsGroup.Add(f0, LogicOperator.AND)
x.CAMLQuery.WhereFieldsGroup.Add(f1, LogicOperator.AND)
è equivalente. Inoltre il metodo CAMLQuery.BuildCAMLQueryString() viene invocato automaticamente
dal metodo List.LoadAll(). Nell'esempio esso viene invocato per valorizzare la stringa CAML.
Il valore del CAML può essere comunque reperito (se già valutato) tramite la proprietà
List.CAMLQueryString.
Nell'ultima sezione del codice di esempio noterete alcune proprietà e metodi dell'Oggetto List:
la proprietà List.InncludeLookUpValuesInDataTable ed il metodo List.GetDataTable.
Questi saranno gli argomenti della prossima puntata.
Come avete potuto vedere dalla poche righe di esempio, SharepointDAL risolve in maniera abbastanza
semplice il problema delle query CAML. In un modo talmente semplice che probabilmente non ne vedrete
mai di simili nelle varie conferenze sulla programmazione Sharepoint che si tengono in giro per il mondo
Se avete qualche domanda sono a disposizione.