2009-04-14 6 views
4

Est-ce que quelqu'un sait comment je pourrais obtenir tous les éléments d'une liste SharePoint?ColdFusion: Comment utiliser getListItems de SharePoint()

Il devrait être possible d'appeler la fonction getListItems() avec 4 paramètres:

  • Un pour la liste où les informations sont stockées dans,
  • la seconde pour la requête,
  • le troisième pour la champs affichés, et
  • le quatrième qui spécifie le nombre de lignes à retourner.

Mon code est:

<cfobject webservice="http://sharepointserver:16999/blog/_vti_bin/SiteData.asmx?wsdl" name="siteDataService" 
    password="pw" 
    username="user" 
    > 

<cfset siteDataService.GetListItems(
    "{9BE74555-1150-4AC8-ADE7-EE52923D7CE8}", 
    "<Where><Lt><FieldRef Name=""ID"" /><Value Type=""Counter"">3</Value></Lt></Where>", 
    "<FieldRef Name=""ID"" /><FieldRef Name=""Title"" />", 
    "4" 
    )>  

<cfset ServiceResponse = GetSOAPResponse(siteDataService)> 
<cfdump var="#ServiceResponse#"> 

Mais tout ce que je reçois est ce message d'erreur:

Fonctionnement Service Web GetListItems avec des paramètres {{9BE74555-1150-4AC8-ADE7-EE52923D7CE8} , 3,, 4} ne peut pas être trouvé.

Normalement, vous devez passer xmlNodes la fonction, comme il est dit here.

J'ai également essayé cela, mais je ne sais pas exactement comment créer un xmlNode. Mon code, cela ne fonctionne pas non plus est celui-ci:

<cfset xmlDoc = XmlNew()> 
<cfset ndQuery = xmlElemNew(xmlDoc, "Query")> 
<cfset ndViewFields = xmlElemNew(xmlDoc, "ViewFields")> 
<cfset ndQueryOptions = xmlElemNew(xmlDoc, "QueryOptions")> 

<cfset ndQuery = "<Where><BeginsWith><FieldRef Name='Name' /><Value Type='Text'>D</Value></BeginsWith></Where>"> 
<cfset ndViewFields = "<FieldRef Name='ID' />"> 
<cfset ndQueryOptions = ""> 

<cfset listsService.GetListItems(
    "{52D3A638-FA12-44E8-9C17-5FBCD2899199}", 
    "", 
    ndQuery, 
    ndViewFields, 
    "1", 
    ndQueryOptions, 
    "" 
    )> 

<cfset ServiceResponse = GetSOAPResponse(listsService)> 
<cfdump var="#ServiceResponse#"> 

est la façon dont je fais appel webservice le droit chemin?

Merci, Kevin


EDIT: Je vous remercie de votre réponse, je pense que les éléments XML fonctionnent.

<cfset listsService.GetListItems(
    "{9BE74555-1150-4AC8-ADE7-EE52923D7CE8}", 
    "{1DD69D36-FD18-42B8-B57D-CCA49FD12AFE}", 
    ndQuery.xmlRoot, 
    ndViewFields.xmlRoot, 
    "1", 
    ndQueryOptions.xmlRoot, 
    "" 
)> 

Mais maintenant, je reçois une "exception d'argument illégal" (c'est grand, parce qu'il me dit, que le webservice répond;)):

 
Cannot perform web service invocation GetListItems. 

The fault returned when invoking the web service operation is: 

'' java.lang.IllegalArgumentException: [email protected] 

The error occurred in D:\wwwroot\SharePoint-Tests\blog.cfm: line 83 
81 :   "1", 
82 :   ndQueryOptions.xmlRoot, 
83 :  "" 
84 :)> 

EDIT 2:

Ceci est mon nouveau code (28 avril)

<cfset xmlDoc = XmlNew()> 
<cfset xmlDoc.xmlRoot = xmlElemNew(xmlDoc, "xmlRoot")> 
<cfset xmlDoc.xmlRoot.Query = xmlElemNew(xmlDoc, "Query")> 
<cfset xmlDoc.xmlRoot.ViewFields = xmlElemNew(xmlDoc, "ViewFields")> 
<cfset xmlDoc.xmlRoot.QueryOptions = xmlElemNew(xmlDoc, "QueryOptions")>  


<cfset xmlDoc.xmlRoot.Query.XmlChildren[1] = xmlElemNew(xmlDoc, "Where")> 
<cfset xmlDoc.xmlRoot.Query.where.XmlChildren[1] = xmlElemNew(xmlDoc, "GT")> 
<cfset xmlDoc.xmlRoot.Query.where.gt.XmlChildren[1] = xmlElemNew(xmlDoc, "Value")> 

<cfdump var="#xmlDoc#"> 

<cfset ndQuery = XmlParse("<Query><Where><Gt><FieldRef Name='ID' /><Value Type='Counter'>0</Value></Gt></Where></Query>", true)> 
<cfset ndViewFields = XmlParse("<ViewFields><FieldRef Name='ID' /><FieldRef Name='Title' /></ViewFields>", True)> 
<cfset ndQueryOptions = XmlParse("<queryOptions xmlns:SOAPSDK9=""http://schemas.microsoft.com/sharepoint/soap/""><QueryOptions/></queryOptions>", True)> 

<cfdump var="#ndQuery#"> 
<cfdump var="#ndViewFields#"> 
<cfdump var="#ndQueryOptions#"> 

<cfoutput>#XMLFormat(ndQuery)#</cfoutput><br> 
<cfoutput>#XMLFormat(ndViewFields)#</cfoutput><br> 
<cfoutput>#XMLFormat(ndQueryOptions)#</cfoutput><br> 
<cfinvoke 
    webservice  = "#listsService#" 
    method   = "GetListItems" 
    returnvariable = "result" 
    timeout  = "10" 
> 
    <cfinvokeargument name="listName"  value="{9BE74555-1150-4AC8-ADE7-EE52923D7CE8}"> 
    <cfinvokeargument name="viewName"  value=""> 
    <cfinvokeargument name="query"  value="#ndQuery.XmlRoot#"> 
    <cfinvokeargument name="viewFields" value="#ndViewFields.XmlRoot#"> 
    <cfinvokeargument name="rowLimit"  value="1"> 
    <cfinvokeargument name="queryOptions" value="#ndQueryOptions.XmlRoot#"> 
     <cfinvokeargument name="webID"  value="" omit="yes"> 

    <!--- setting "omit" to "yes" will turn the parameter to null ---> 
</cfinvoke> 

<cfdump var="#result#" label="result"> 

Le message d'erreur est:

Cannot perform web service invocation GetListItems. 
The fault returned when invoking the web service operation is: 
java.lang.IllegalArgumentException: argument type mismatch 
+0

J'ai déplacé l'info de la réponse que vous avez postée à votre question - à l'avenir, s'il vous plaît mettre des clarifications ou des mises à jour directement dans votre question (vous pouvez toujours modifier vos propres choses). La section "réponses" est pour les réponses réelles, je pense qu'il est préférable de supprimer votre message là-bas. :) – Tomalak

+0

ok Merci (ou demandez-vous d'ajouter "Danke dir"? :)) Avez-vous une idée de ce qui pourrait causer l'exception IllegalArgumentException? –

+0

Vous pouvez bien sûr passer à l'allemand si vous osez. :-D Je suppose qu'il y a toujours un mauvais ajustement dans les arguments, que ColdFusion essaie de convertir implicitement au type attendu par WS, mais échoue. Voir les commentaires à ma réponse. – Tomalak

Répondre

1

Essayez ceci:

<!--- parse a bunch of XML documents, case-sensitively ---> 
<cfset ndQuery = XmlParse("<Where><BeginsWith><FieldRef Name='Name' /><Value Type='Text'>D</Value></BeginsWith></Where>", True)> 
<cfset ndViewFields = XmlParse("<FieldRef Name='ID' />", True)> 
<cfset ndQueryOptions = XmlParse("<QueryOptions />", True)> 

<cfset listsService.GetListItems(
     "{52D3A638-FA12-44E8-9C17-5FBCD2899199}", 
     "", 
     ndQuery.XmlRoot, 
     ndViewFields.XmlRoot, 
     "1", 
     ndQueryOptions.XmlRoot, 

)> 

<cfset ServiceResponse = GetSOAPResponse(listsService)> 
<cfdump var="#ServiceResponse#"> 

Peut-être qu'il est inutile de passer explicitement dans le nœud racine XML et les poignées Web Service objets complets de documents XML aussi bien.Dans ce cas, l'appel suivant pourrait aussi bien:

<cfset listsService.GetListItems(
     "{52D3A638-FA12-44E8-9C17-5FBCD2899199}", 
     "", 
     ndQuery, 
     ndViewFields, 
     "1", 
     ndQueryOptions, 
     "" 
)> 

EDIT: La page MSDN sur Lists.GetListItems Method états:

queryOptions: Pour passer une valeur vide pour cette paramètre, inclure un élément vide QueryOptions comme suit.

<queryOptions 
xmlns:SOAPSDK9="http://schemas.microsoft.com/sharepoint/soap/"> 
    <QueryOptions/> 
</queryOptions> 

Donc, nous allons essayer ceci:

<cfset ndQueryOptions = XmlParse("<queryOptions xmlns:SOAPSDK9="http://schemas.microsoft.com/sharepoint/soap/"><QueryOptions/></queryOptions>", True)> 

EDIT # 2

Il peut aussi y avoir un problème complètement différent - le dernier paramètre de la méthode GetListItems() est facultative et devrait être mis à null si vous ne voulez pas passer une chaîne de GUID.

Malheureusement, la syntaxe d'appel que vous utilisez est incapable d'exprimer des paramètres omis, et CFML n'a pas de valeur littérale nulle. Vous devez convertir votre appel au plus bavard (mais plus souple) le style <cfinvoke>/<cfinvokeargument> pour cela:

<cfobject 
    webservice = "http://sharepointserver:16999/blog/_vti_bin/Lists.asmx?wsdl" 
    name  = "listsService" 
    password = "pw" 
    username = "user" 
> 

<cfinvoke 
    webservice  = "#listsService#" 
    method   = "GetListItems" 
    returnvariable = "result" 
    timeout  = "10" 
> 
    <cfinvokeargument name="listName"  value="{52D3A638-FA12-44E8-9C17-5FBCD2899199}"> 
    <cfinvokeargument name="viewName"  value=""> 
    <cfinvokeargument name="query"  value="#ndQuery.XmlRoot#"> 
    <cfinvokeargument name="viewFields" value="#ndViewFields.XmlRoot#"> 
    <cfinvokeargument name="rowLimit"  value="1"> 
    <cfinvokeargument name="queryOptions" value="#ndQueryOptions.XmlRoot#"> 
    <cfinvokeargument name="webID"  value="" omit="yes"> 
    <!--- setting "omit" to "yes" will turn the parameter to null ---> 
</cfinvoke> 

<cfdump var="#result#" label="result"> 

Plus lecture approfondie à cet égard est le talkingtree.com:
How to invoke a Web Service while omitting optional service method arguments

+0

Ce code m'a beaucoup aidé. Mais maintenant j'ai un autre problème. (Exception d'argument non valide) –

+0

Avez-vous essayé sans le ".XmlRoot"? Est-ce que cela fait une différence? – Tomalak

+0

Maintenant je suis de retour de mes vacances. J'ai essayé votre code à partir de "Edit # 2" mais il génère également une exception. Vous pouvez le voir dans mon "Edit 2:" –

2

Pouvez-vous obtenir l'exemple suivant pour travailler:

<cfinvoke webservice="http://sharepointserver:16999/blog/_vti_bin/usergroup.asmx?wsdl" method="GetUserCollectionFromWeb" password="[pw]" username="[username]" returnvariable="listOfUsers"/> 

<cfdump var="#listOfUsers#"> 

De même, le mécanisme d'authentification SharePoint à l'authentification de base?

Questions connexes