2010-11-26 3 views
3

Ich versuche, eine SharePoint-Liste in eine ungeordnete Liste zu laden, damit ich eine einfache Suchfunktion erstellen kann (die SharePoint-Suche ist einfach schrecklich). Der Code, den ich ausgeliehen haben und angepasst ist unten:Verwenden von SharePoint-SOAP mit jQuery GetListItems - Einfach, aber es kann nicht funktionieren!

$(document).ready(function() { 
     var soapEnv = 
      "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \ 
       <soapenv:Body> \ 
        <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \ 
         <listName>Metric_Audit</listName> \ 
         <viewFields> \ 
          <ViewFields> \ 
       <FieldRef Name='ReportName' /> \ 
       <FieldRef Name='Metric Name' /> \ 
          </ViewFields> \ 
         </viewFields> \ 
        </GetListItems> \ 
       </soapenv:Body> \ 
      </soapenv:Envelope>"; 

     $.ajax({ 
      url: "http://teamspace.intranet.group/sites/CSI/ID/DB/_vti_bin/lists.asmx", 
      type: "POST", 
      dataType: "xml", 
      data: soapEnv, 
      complete: Result, 
      contentType: "text/xml; charset=\"utf-8\"" 
     }); 
    }); 


    function Result(xData, status) { 
     $(xData.responseXML).find("z\\:row").each(function() { 
      var liHtml = "<li>" + $(this).attr("ows_ReportName") + "</li>"; 
      $("#MetricsUL").append(liHtml); 
     }); 
    } 
}); 

<ul id="MetricsUL"/> 

Es füllt die Liste, wie es sollte, aber alle Elemente haben den Namen ‚undefined‘. Ich habe versucht, Räume zu entfernen, ohne Erfolg und wenn ich die Liste zur "Aufgaben" Liste ändere, funktioniert es gut.

Sie starrte dies für AGES. Irgendwelche Tipps, die Sie vorschlagen können, würden wirklich geschätzt! Ich bin mir sicher, dass es etwas Kleines ist, dass ich einfach nicht trainieren kann!

Danke!

+0

Diese Frage hat mir tatsächlich Tage der Arbeit dank gerettet. –

Antwort

4

Haben Sie verifiziert, dass Sie auf die richtigen Feldnamen verweisen?

Die CAML-Abfrage, die Sie in soapEnv definiert haben, erfordert die Verwendung der Felder interne Namen, nicht ihre Anzeigenamen. Ich garantiere Metric Name ist nicht richtig; es ist wahrscheinlich so etwas wie Metric_x0020_Name oder ähnlich.

Wie ermitteln Sie die internen Namen Ihrer Felder? Es gibt ein paar Methoden.

Lassen Sie mich Ihnen ein großes Dienstprogramm namens U2U CAML Query Builder vorstellen. Dies sollte in der Toolbox jedes SharePoint-Entwicklers enthalten sein. Starten Sie es, zeigen Sie es auf die rechte Liste (verbinden Sie sich über SharePoint Web Service, wenn Sie nicht auf dem Server sind), und Sie können CAML-Abfragen mit den Anzeigenamen der Felder erstellen, aber die korrekte zugrunde liegende CAML für generieren Sie. Es eignet sich auch hervorragend zum Erstellen komplexer Filter und boolescher Logik. Außerdem können Sie die Abfrage ausführen und sofort Feedback erhalten.

Ein anderer Ansatz zum Abrufen des Feldnamens besteht darin, in die Listeneinstellungen zu navigieren und dann auf den Namen eines Feldes zu klicken, das Sie interessiert. Überprüfen Sie Ihre URL und suchen Sie nach dem Querystring-Parameter mit dem Namen &Field; Es wird den internen Namen des Feldes bekannt geben. Dieser Wert wird URL-codiert, wenn Sie Internet Explorer verwenden (eine einfache online decoder kann helfen, den Wert zu entschlüsseln), aber wenn Sie Firefox verwenden, sehen Sie den Wert ohne Codierung.

Stecken Sie die richtigen Feldnamen in Ihre CAML-Abfrage und geben Sie einen weiteren Wirbel.

+1

Es klingt definitiv so, als ob Sie auf den falschen Attributnamen im Ergebnishandler zugreifen würden. Überprüfen Sie die Rohergebnisse, um zu sehen, was Sie erhalten. Ie ... Alert ($ (this) .HTML()); –

+0

@brian brinley: Guter Ruf; Sie müssen nicht nur in SharePoint nach den richtigen Feldern fragen, sondern müssen sie auch korrekt in der Ausgabe adressieren. Obwohl ich sehe, dass die O.P. nach "ows_ReportName" fragt (was nicht intuitiv ist), ist es möglich, dass sie die Attribute bereits untersucht haben. – CBono

+0

Vielen Dank dafür! Ich konnte das Tool nicht auf meinem Arbeitslaptop installieren, aber die Suche nach der Abfragezeichenfolge in der URL funktionierte einwandfrei. Du bist ein Star! –

0

Fügen Sie in Ihrer Ergebnisfunktion eine alert(xData.responseXML.xml); hinzu, um sicherzustellen, dass Sie das Attribut ows_ReportName erhalten.

Vielleicht wird der Name etwas anders geschrieben (Groß- und Kleinschreibung). Versuchen Sie alternativ ows_Title, ob es definierte Daten zurückgibt. Wenn dies der Fall ist, wird der XML-Code zurückgegeben. ReportName kann in den zurückgegebenen Daten nicht als gültige Spalte gefunden werden.

Verwandte Themen