SharePoint SOAP GetListItems VS jQuery - Wie man Ajax verwenden, um durch eine Benutzerdefinierte Liste von Objekten als auch als Ajax-refresh-die Inhalte der Liste?

Bin ich mit Hilfe von jQuery für den Zugriff auf Sharepoint 2007 die SOAP-Schnittstelle, über die Methode GetListItems zu Lesen in einer benutzerdefinierten Liste von Ankündigungen in solch einer Weise zu, die Liste aktualisieren, sobald eine minute (im Falle, dass der Besitzer der Liste neue Inhalte hinzufügen, so dass der neue Inhalt sichtbar wird, ohne dass der end-Nutzer aktualisieren Ihre sharepoint-Bildschirm). Was würde ich gerne tun, ist nicht nur erfrischen, Liste, ich möchte jedes Element in der Liste Durchlaufen, ein zu einer Zeit (vielleicht jedes Element sichtbar bleibt für 10 Sekunden, dann der nächste Artikel geladen, in diesem Raum.

Hier ist der code, den ich bisher:

<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="/SiteCollectionDocuments/jquery.timers-1.0.0.js" ></script>  
<script type="text/javascript">

$(document).ready(function() {

//Create the SOAP request        
//NOTE: we need to be able to display list attachments to users, hence the addition of the
//<queryOptions> element, which necessitated the addition of the <query> element

var soapEnv =
"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>
<soapenv:Body> \
   <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \
     <listName>testlist</listName> \
     <viewFields> \
       <ViewFields> \
         <FieldRef Name='Title' /> \
         <FieldRef Name='Body' /> \
         <FieldRef Name='ID' /> \
         <FieldRef Name='Attachments' /> \
       </ViewFields> \
     </viewFields> \
     <query> \
       <Query /> \
     </query> \
     <queryOptions> \
       <QueryOptions> \
         <IncludeAttachmentUrls>TRUE</IncludeAttachmentUrls> \
       </QueryOptions> \
     </queryOptions> \
    </GetListItems> \
  </soapenv:Body> \
  </soapenv:Envelope>";

//call this SOAP request every 20 seconds
$("#tasksUL").everyTime(20000,function(i){
    //our basic SOAP code to hammer the Lists web service
    $.ajax({
    url: "http://ourdomain.net/_vti_bin/lists.asmx",
    type: "POST",
    dataType: "xml",
    data: soapEnv,
    error: printError,
    complete: processResult,
    contentType: "text/xml; charset=\"utf-8\""
    });
  });
});

//basic error display that will pop out SOAP errors, very useful!
function printError(XMLHttpRequest, textStatus, errorThrown)
{
 alert("There was an error: " + errorThrown + " " + textStatus);
  alert(XMLHttpRequest.responseText);
}


//main method that will cycle through the SoAP response nodes
function processResult(xData, status) 
{

  $(xData.responseXML).find("z\\:row").each(function() 
  {
    //resets display element
   $("#tasksUL").empty();

   //gets attachments array - if there is more than one attachment,
   //they get seperated by semi-colons in the response
   //they look like this natively (just an example):
   //ows_Attachments = ";#http://server/Lists/Announcements/Attachments/2/test.txt;
   //#http://server/Lists/Announcements/Attachments/2/UIP_Setup.log;#"

       var mySplitResult = $(this).attr("ows_Attachments").split(";");
  //set up storage for later display of images
  var notice_images = "";

  //processes attachments - please forgive the kludge!  
  for(i = 0; i < mySplitResult.length; i++)
  {
   //check to see the proper link URL gets chosen
   if (i % 2 != 0 && i != 0)
   {
    //strips out pound sign
    mySplitResult[i] = mySplitResult[i].replace("#", "");

    //(possibly redundant) check to make sure element isn't simply a pound sign  
    if (mySplitResult[i] != "#")
    {
     //adds an img tag to an output container
     notice_images = notice_images + "<img src='" + mySplitResult[i] + "' border='0' align='right' style='float:right;' /><br />"; 
    }
   }
  }

  //create final output for printing
  var liHtml = "<h3>" + $(this).attr("ows_Title") + "</h3><p>" + notice_images + $(this).attr("ows_Body") + "</p>";

  //assign output to DIV tags
    $("#tasksUL").html(liHtml);

   });

}
</script>

<div id="tasksUL"/>&nbsp;</div>

Es ist ziemlich einfaches Zeug, so weit (obwohl die Suche nach eine anständige Dokumentation, was Sie in der Lage sind zu tun mit der GetListItem SOAP-Anfrage war gewaltig). Im inneren des Blocks, wo ich Durchlaufen der zurückgegebenen Zeilen (die PprocessResult Funktion), ich bin das zurücksetzen der HTML-Zuordnung zu den DIV-block, so dass nur eine Zeile zeigt, die als Ausgabe. Die Art und Weise der code aufgebaut ist, dies bedeutet, dass nur die Letzte Zeile in meine benutzerdefinierte Liste sichtbar sein wird, da ich keinen code anhalten der Iterationen.

Mein Gedanke war es gewesen, wickeln Sie einen timer, um dieses code-block:

$(xData.responseXML).find("z\\:row").each(MYTIMER(10000, function(){...

Aber ich traf mit null oder gemischte Ergebnisse.

Meine Frage an Euch alle ist: Was wäre der beste Weg, um auf meinen aktuellen code um beide aktualisieren der Liste Quelle die Daten wie es jetzt ist, UND radeln Sie durch die Abfrage-Ergebnisse aus dieser Liste eine zu einem Zeitpunkt (vorzugsweise mit einer kleinen pause auf jedem item so, dass die Leute es Lesen können)?

Schreibe einen Kommentar