2009-05-07 8 views
3

Le code ci-dessous semble exécuter le service Web et renvoie des valeurs, mais ignore la clause where (renvoyant ainsi tous les éléments de la liste). C'est la forme la plus simple du problème que j'ai trouvé.GetListItems Webservice ignore mon filtre de requête

La liste TestQuery est une liste personnalisée simple sans champs définis par l'utilisateur. Quelqu'un peut-il voir pourquoi le filtre ne fonctionne pas?

<body> 
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script> 
<script type="text/javascript"> 
$(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/'>"; 
    soapEnv += "<listName>TestQuery</listName>"; 
    soapEnv += "<Query><Where><Eq><FieldRef Name='Title'/><Value Type='Text'>One</Value></Eq></Where></Query>"; 
    soapEnv += "<ViewFields><ViewFields><FieldRef Name='Title'/></ViewFields></ViewFields><RowLimit>1</RowLimit>"; 
    soapEnv += "</GetListItems></soapenv:Body></soapenv:Envelope>"; 

    $.ajax({ 
     url: "_vti_bin/lists.asmx", 
     type: "POST", 
     dataType: "xml", 
     data: soapEnv, 
     complete: processResult, 
     contentType: "text/xml; charset=\"utf-8\"" 
    }); 
}); 

function processResult(xData, status) { 
      $('#WSResponse').text(status); 
    $(xData.responseXML).find("z\\:row").each(function() { 
     var liHtml = "<li>" + $(this).attr("ows_Title") + "</li>"; 
     $("#tasksUL").append(liHtml); 
    }); 
    //} 
} 
</script> 


<ul id="tasksUL"/> 
<div id="WSResponse"/> 

</body> 

Répondre

4

Je pense que vous avez besoin de mettre l'étiquette de requête dans une balise de requête et le Viewfield dans une balise Viewfield donc quelque chose comme:

var soapEnv = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'><soapenv:Body><GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'>"; 
    soapEnv += "<listName>TestQuery</listName>"; 
    soapEnv += "<query><Query><Where><Eq><FieldRef Name='Title'/><Value Type='Text'>One</Value></Eq></Where></Query></query>"; 
    soapEnv += "<viewFields><ViewFields><FieldRef Name='Title'/></ViewFields></viewFields><RowLimit>1</RowLimit>"; 
    soapEnv += "</GetListItems></soapenv:Body></soapenv:Envelope>"; 
2

J'ai aussi fait face à la même question .. « la solution de Temple ont résolu la question de la requête .. mais pour faire le travail que je RowLimit à fait le« minuscule R-à-dire,

<rowLimit> not <RowLimit> 

Cette saisirent de moi un laps de temps assez ... :) Bonne programmation ...

Questions connexes