Tag-Archive: lists.asmx

Lists.asmx, GetListItems und Ordner

Ich tat etwas Forschung für jemanden heute rund um den list.asmx-Web-Service im Rahmen des SharePoint 2010 (und früher).  Sie war in der Lage, die Listenelemente im Stammordner (die Namen der Unterordner), aber Elemente in Unterordner erhalten könnte.  Ich habe einige schauen herum auf dem Internets und es ist ein überraschend häufig gestellte Frage.  Noch, Ich könnte eine gute Antwort auf die einfache Frage nicht erhalten., "Wenn ich den Ordner weiß, Wie bekomme ich die Elemente in den Ordner?”  Um ehrlich zu sein, Ich versuchte nicht allzu hart, da ich zu Figur diesein raus auf eigene Faust für eine Weile wollte Lächeln.

Um dies einzurichten, Ich habe eine Site mit dem Namen "Blogging Scenarios" und eine benutzerdefinierte Liste mit dem Namen "Benutzerdefinierte Liste mit Sub-Ordner".  Ich habe dann Ordner mit dem Namen:

  • Jahr 2005
  • Jahr 2006
  • Jahr 2007

Ich hinzugefügt ein paar Elemente in den Ordner "Jahr 2006".  Dies ist, wie es aussieht:

image

Mein Freund ist nicht schreiben von C#-Code, sondern eher mit Hilfe von Java, So war der SOAP-Umschlag, was sie wirklich brauchte.  Zu erhalten, die, Ich schrieb ein wenig jQuery und Fiddler dann verwendet, um das tatsächliche HTTP-Gespräch zu erhalten.

Hier ist die relevante jQuery (Ich kopiert den Code unten unten wenn Sie kopieren möchten):

image

Sie erste Schlüssel ist, um sowohl eine <queryOptions> und <QueryOptions> Knoten.  Der zweite Schlüssel ist, dass die <Ordner> der Knoten ist ein URL, auf den der Client Zugriff hat.

Möglicherweise gibt es andere Möglichkeiten, um dies, aber dies funktioniert gut für mich, bei der Verwendung von jQuery.

Hier ist der SOAP-Umschlag für die oben:

<soapenv:Umschlag xmlns:Soapenv =’http://Schemas.xmlsoap.org/SOAP/Envelope/’>                
  <soapenv:Körper>
    <GetListItems Xmlns =’
http://Schemas.Microsoft.com/SharePoint/SOAP/’>
      <listName>Benutzerdefinierte Liste mit Sub-Ordner</listName>
      <viewFields>  
        <ViewFields>
          <FieldRef-Name =' Titel’ />
          <FieldRef-Name ='EncodedAbsUrl’ />
        </ViewFields>
      </viewFields>
      <queryOptions>
        <QueryOptions>
          <Ordner>
http://demoserver1-Blogging Szenarien/Listen/benutzerdefinierte Liste mit Sub-Ordner/Jahr 2006</Ordner>
        </QueryOptions>
      </queryOptions>
   
</GetListItems>
  </soapenv:Körper>
</soapenv:Umschlag>

Viele Beispiele und Diskussion um dies führte mich zu glauben, dass alles, was ich brauche <QueryOptions> und geben Sie einen Ordnernamen ein.  Für mich, Ich müssen sowohl in wrap <queryOptions> ebenso wie geben Sie eine vollqualifizierte URL für den <Ordner> Knoten.

Hier ist das jQuery-AJAX-setup:

$(Dokument).bereit(Funktion() {
       Var SoapEnv =
           "<soapenv:Umschlag xmlns:Soapenv =’http://Schemas.xmlsoap.org/SOAP/Envelope/’> \
               <soapenv:Körper> \
                    <GetListItems Xmlns =’http://Schemas.Microsoft.com/SharePoint/SOAP/’> \
                       <listName>Benutzerdefinierte Liste mit Sub-Ordner</listName> \
                       <viewFields> \
                           <ViewFields> \
                              <FieldRef-Name =' Titel’ /> \
                              <FieldRef-Name ='EncodedAbsUrl’ /> \
                          </ViewFields> \
                       </viewFields> \
                       <queryOptions> \
                         <QueryOptions> \
                           <Ordner>http://demoserver1/Blogging Szenarien/Listen/benutzerdefinierte Liste mit Sub-Ordner/Jahr 2006</Ordner> \
                         </QueryOptions> \
                       </queryOptions> \
                   </GetListItems> \
               </soapenv:Körper> \
           </soapenv:Umschlag>";

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin

Lists.asmx, GetList und "Wert darf nicht null sein”

Heute entdeckte ich, dass die GetList() Methode in lists.asmx Es ist anfällig für eine geheimnisvolle "Wert darf nicht null sein" Ausnahme auslösen oder Webdienst hat sehr sorgfältig aufgerufen werden (und das geht davon aus, dass Sie vorbei die schlimmer generische Fehlermeldung erhalten können, "Ausnahme des Typs ' Microsoft.SharePoint.SoapServer.SoapServerException’ ausgelöst wurde.")  Speziell, Ich fand, dass Sie keine Art von Präfix auf die GetList-Methode bereitstellen können.  Der folgende jQuery-Ausschnitt zeigt die:

image

Wenn Sie das tun, der Webdienst antwortet mit "Wert darf nicht null pro dies als sein" Fiddler-bereitgestellten HTTP-Protokoll:

<?XML Version = "1.0" Encoding = "Utf-8"?>
  <Seife:Umschlag
     xmlns:Seife ="
http://Schemas.xmlsoap.org/SOAP/Envelope/"    
     xmlns:Xsi = "
http://www.w3.org/2001/XMLSchema-instance
     xmlns:XSD ="
http://www.w3.org/2001/XMLSchema">

  <Seife:Körper>
    <Seife:Fehler>
      <FaultCode>Seife:Server</FaultCode>
      <faultString>
        Ausnahme des Typs ' Microsoft.SharePoint.SoapServer.SoapServerException’ ausgelöst wurde.
      </faultString>
      <Detail>
        <ErrorString Xmlns ="
http://Schemas.Microsoft.com/SharePoint/SOAP/">
Wert darf nicht null sein..
        </ErrorString>
      </Detail>
    </Seife:Fehler>
  </Seife:Körper>
</Seife:Umschlag>

Natürlich, Sie würde nicht das Präfix "s0" wahrscheinlich auf eigene hinzufügen., aber einige Werkzeuge sind dafür anfällig (wie Eclipse).

Dies ist umso mehr verwirrend / frustrierend, da andere Methoden Präfixe tolerieren.  Zum Beispiel, die GetListCollection Methode dagegen nicht, wenn es vorangestellt worden ist, auch mit Unsinn Präfixe wie "Xyzzy":

image

Diese "Wert darf nicht null sein" scheint ziemlich häufig mit lists.asmx so hoffentlich dies jemand in Zukunft helfen wird.

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin