2009-04-14 110 views
4

有誰知道我如何從SharePoint列表中獲取所有項目?ColdFusion:如何使用SharePoint的getListItems()

應該可以調用函數getListItems()用4個參數:

  • 一個用於其中的信息被存儲在列表中,
  • 第二對於查詢,
  • 第三對顯示字段,並且
  • 第四個指定要返回的行數。

我的代碼是:

<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#"> 

但我得到的是錯誤信息:

帶參數的Web服務操作GetListItems {{9BE74555-1150-4AC8-ADE7-EE52923D7CE8} ,3,,4}找不到。

通常你必須通過xmlNodes函數,就像它被告知​​。

我也試過,但不知道如何製作一個xmlNode。 我的代碼,這也不起作用是這個:

<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#"> 

是我打電話web服務以正確的方式方法是什麼?

謝謝 凱文


編輯:謝謝您的回答,我覺得元素的工作XML。

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

但現在我得到一個 「非法參數異常」(這是偉大的,因爲它告訴我,該web服務響應;)):

 
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 :)> 

編輯2:

這是我的新代碼(4月28日)

<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"> 

錯誤消息是:

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

我已將您發佈到您問題的答案中的信息 - 未來,請將澄清或更新放入您的問題清單(您始終可以編輯自己的東西)。 「答案」部分是針對實際答案的,我認爲最好你在那裏刪除你的帖子。 :) – Tomalak 2009-04-15 15:31:38

+0

好的謝謝(oder soll ich einfach sagen「Danke dir」?:)) 您有什麼想法,可能會導致IllegalArgumentException? – 2009-04-15 15:43:45

回答

1

試試這個:

<!--- 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#"> 

也許是必要的XML根節點明確地傳遞和Web服務處理完整的XML文檔對象一樣好。在這種情況下,下面的調用也可能是罰款:

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

編輯:MSDN頁Lists.GetListItems Method狀態:

queryOptions: 要查看這 傳遞一個空值參數,如下所示包含一個空的 QueryOptions元素。

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

那麼,讓我們試試這個:

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

編輯#2

也有可能是一個完全不同的問題 - GetListItems()方法的最後一個參數是可選如果您不想傳遞一個GUID字符串,應該設置爲null

不幸的是,您使用的調用語法不能表示省略的參數,而CFML沒有字面值null。您必須在調用轉換爲更詳細的(但更靈活)<cfinvoke>/<cfinvokeargument>樣式這樣的:

<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"> 

更深入地閱讀在這方面是talkingtree.com:
How to invoke a Web Service while omitting optional service method arguments

2

你能把下面的示例工作:

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

<cfdump var="#listOfUsers#"> 

此外,SharePoint身份驗證機制是基本身份驗證嗎?

相關問題