Lists.asmx, GetListItems e le cartelle

Stavo facendo qualche ricerca per qualcuno oggi intorno al servizio di web list.asmx fornito come parte di SharePoint 2010 (e precedenti).  Lei era in grado di ottenere gli elementi dell'elenco alla cartella principale (anche i nomi delle sotto-cartelle), ma non poteva ottenere elementi in sotto-cartelle.  Ho fatto alcuni guardando in giro su internets ed è una domanda sorprendentemente comune.  Ancora, Non ho potuto ottenere una buona risposta alla domanda semplice, "se conosco la cartella, come ottenere gli elementi nella cartella?”  Ad essere onesti, Non provato duramente tutto ciò che dal momento che ho voluto capire questo una fuori il mio per un po ' sorriso, sorridere.

Per configurare questo, Ho creato un sito denominato "Blogging scenari" e un elenco personalizzato denominato "Elenco personalizzato con Sub cartelle".  Ho poi creato cartelle denominate:

  • Anno 2005
  • Anno 2006
  • Anno 2007

Ho aggiunto alcuni articoli nella cartella "Anno 2006".  Questo è quello che sembra:

image

Il mio amico non è scrittura di codice c#, ma piuttosto utilizzando Java, così la SOAP envelope era cosa aveva bisogno.  Per ottenere che, Ho scritto un po ' di jQuery e quindi utilizzato violinista per ottenere la conversazione reale HTTP.

Ecco le pertinenti jQuery (Ho copiato il codice giù sotto se volete copiare/incollare):

image

Essi prima chiave consiste nell'includere sia un <queryOptions> e <QueryOptions> nodo.  La seconda chiave è che il <Cartella> il nodo è un URL a cui il cliente ha accesso.

Ci possono essere altri modi per arrivare a questo, ma questo ha funzionato bene per me quando si utilizza jQuery.

Ecco la SOAP envelope sopra:

<soapenv:Busta xmlns:soapenv =’http://schemas.xmlsoap.org/soap/envelope/’>                
  <soapenv:Corpo>
    <GetListItems xmlns =’
http://schemas.Microsoft.com/SharePoint/SOAP/’>
      <listName>Elenco personalizzato con sottocartelle</listName>
      <viewFields>  
        <ViewFields>
          <FieldRef Name =' titolo’ />
          <FieldRef Name ='EncodedAbsUrl’ />
        </ViewFields>
      </viewFields>
      <queryOptions>
        <QueryOptions>
          <Cartella>
http://demoserver1/Blogging Elenco di scenari/liste/Custom con Sub cartelle/anno 2006</Cartella>
        </QueryOptions>
      </queryOptions>
   
</GetListItems>
  </soapenv:Corpo>
</soapenv:Busta>

Un sacco di esempi e la discussione intorno a questo mi ha portato a credere che tutto quello che serve è stato <QueryOptions> e specificare un nome di cartella.  Per me, Io ho bisogno di entrambi avvolgerla all'interno <queryOptions> così come specificare un URL completo per il <Cartella> nodo.

Qui è l'installazione di AJAX jQuery:

$(documento).pronto(funzione() {
       var soapEnv =
           "<soapenv:Busta xmlns:soapenv =’http://schemas.xmlsoap.org/soap/envelope/’> \
               <soapenv:Corpo> \
                    <GetListItems xmlns =’http://schemas.Microsoft.com/SharePoint/SOAP/’> \
                       <listName>Elenco personalizzato con sottocartelle</listName> \
                       <viewFields> \
                           <ViewFields> \
                              <FieldRef Name =' titolo’ /> \
                              <FieldRef Name ='EncodedAbsUrl’ /> \
                          </ViewFields> \
                       </viewFields> \
                       <queryOptions> \
                         <QueryOptions> \
                           <Cartella>http://demoserver1/Blogging Elenco di scenari/liste/Custom con Sub cartelle/anno 2006</Cartella> \
                         </QueryOptions> \
                       </queryOptions> \
                   </GetListItems> \
               </soapenv:Corpo> \
           </soapenv:Busta>";

</fine>

Iscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin

6 pensieri su "Lists.asmx, GetListItems e le cartelle

  1. Daniel

    Ciao

    Sto cercando di visualizzare i documenti in una cartella specifica utilizzando un SPD 2010 DataSource GetListItems

    Una volta connettersi al servizio web e inserire il guid per la raccolta di documenti
    Posso modificare il QueryOptions e immettere il seguente pezzo di codice CAML
    TrainingCompanyX di conformità.

    Solo questo non restituisce alcun risultato – rimuovere il parametro QueryOptions restituisce tutti i documenti nella raccolta documenti radice….

    Sto io guardando passando alcune specie di Mostra il parametro e includere il guid di vista.

    Risposta
    1. Paul Galvin Messaggio autore

      Questo è un post molto vecchio/commento mi dispiace tanto per non rispondere mai. Presumo che lungo allora capito come procedere.

      Risposta
  2. Bob Bolton

    Buon articolo! Grazie.

    È anche possibile utilizzare l'opzione RicorsivoTutti per scorrere automaticamente verso il basso la struttura delle cartelle (dal livello principale).

    Risposta
  3. Bob Bolton

    Ok, sembra che esso spogliato il xml… Basta sostituire i cancelletti sotto con Chevron.

    #queryOptions #
    #QueryOptions #
    #ViewAttributes Scope = 'RicorsivoTutti' / #
    #/QueryOptions #
    #/queryOptions #

    Risposta
  4. Doug

    Grazie mille per questo post, Paul. Ho provato a consumare GetListItems via ColdFusion cfhttp, e non poteva ottenere la busta giusta. Alla fine sono imbattuto in questo post, e il tuo esempio ha funzionato alla perfezione. Grazie ancora.

    Risposta
  5. Doug

    BTW – Sai di una risorsa che elenca tutte le buste di sapone adeguato? Quello per GetList articoli pubblicati sul sito Web microsoft.com non corrisponde a voi siete qui…

    Risposta

Lasciare una risposta a Paul Galvin cancella risposta

L'indirizzo email non verrà pubblicato. i campi richiesti sono contrassegnati *