Gabriele Del Giovine Blog (Z80 powered brain...)


Un blog su quel che faccio (o cerco di fare...)
Calendario
dicembre 2024
lmmgvsd
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345
Archivio Posts
Anno 2011

Anno 2010

Anno 2009

Anno 2008

Anno 2007

Anno 2006

Anno 2005
Links
    Mappa
    Blogs Amici
      Statistiche
      • Views Home Page: 305.416
      • Views Posts: 373.339
      • Views Gallerie: 256
      • n° Posts: 163
      • n° Commenti: 198

      SharepointDAL - Parte 2 - CAMLQuery

      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 s
      crivere 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 è
      ------------------------------------------------------------------------------
      - <Where>
      -     <And>
      -         <Or>
      -             <Eq>
                        <FieldRef Name="Title" />
                        <Value Type="Text">ALFAValue>
                 Eq>
      -             <Eq>
                        <FieldRef Name="Title" />
                        <Value Type="Text">BETAValue>
                 Eq>
              Or>
      -          <Or>
      -             <Contains>
                        <FieldRef Name="MultipleLinesOfText" />
                        <Value Type="Note">1Value>
                 Contains>
      -             <Contains>
                        <FieldRef Name="MultipleLinesOfText" />
                        <Value Type="Note">2Value>
                 Contains>
              Or>
         And>
      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.

       

      Categoria: Sharepoint
      lunedì, 14 lug 2008 Ore. 01.16
      Copyright © 2002-2007 - Blogs 2.0
      dotNetHell.it | Home Page Blogs
      ASP.NET 2.0 Windows 2003