Runtime CAML Query

Se non sapete cosa sono le query CAML è mooolto probabile che non avete ancora avuto a che fare con Sharepoint.

CAML è un linguaggio di query basato su XML, utile per ottenere ListItem da una lista Sharepoint.

Solitamente per specificare una query CAML facciamo così:

SPQuery qry = new SPQuery();
string camlquery = “<OrderBy><FieldRef Name='Country' /></OrderBy><Where><Eq><FieldRef Name='LastName' /><Value Type='Text'>Smith</Value></Eq>”
+ “</Where>”;
qry.Query = camlquery;

Ultimamente però mi è nata un esigenza: creare delle query runtime a seconda delle opzioni del cliente.

Purtroppo speficiare le AND/OR logiche nelle query CAML non è molto smart:

 

<Where>
  <And>
    <And>
      <And>
          <Eq>
            <FieldRef Name='LastName' />
            <Value Type='Text'>Janssens</Value>
          </Eq>
          <Geq>
            <FieldRef Name='Age' />
            <Value Type='Number'>21</Value>
          </Geq>
        </And>
        <Lt>
          <FieldRef Name='Age' />
          <Value Type='Number'>60</Value>
        </Lt>
      </And>
      <Eq>
        <FieldRef Name='Country' />
        <Value Type='Lookup'>Belgium</Value>
      </Eq>
    </And>
</Where>

No bello

Quindi ho aperto VS 2010 e stavo iniziando a scrivere una bella libreria che faceva a caso mio ma, dopo la 3 interfaccia,
ho aperto google ed ho trovato questo codice del 2009:

http://www.codeproject.com/KB/sharepoint/CAMLBuilder-Expressions.aspx

e sembra funzionare egregiamente Open-mouthed smile

Rebitting Tags: | |