2008-09-17 48 views
6

我有一個包含2個文本字段的列表和一個選擇字段。如何使用Lists.asmx Web服務插入新項目?我可以對lists.asmx服務做一個web引用,所以你可以假設這是已知的。SharePoint - 如何使用列表Web服務插入新項目?

我想要一個完整的例子,包括CAML查詢的代碼和XML。理想情況下,示例將使用C#。

回答

16

使用列表web服務將項目插入SharePoint列表確實可能非常棘手。由於此方法的形式爲:XML in,XML out,因此很難獲取正確的參數。

首先你應該看看列表定義。它可以與所述方法的GetList()檢索,如下所示:

XmlNode listXml = sharePointLists.GetList(listName); 
File.WriteAllText("listdefinition.xml", listXml.OuterXml); 

重要這裏的字段和數據類型的名稱。字段名稱將永遠不會與您在SharePoint GUI中看到的名稱相同。一個很好的例子是用於列表的第一個字段的標題字段。

現在您知道了,您可以創建查詢以轉到SharePoint。示例:

<Batch OnError="Continue"> 
    <Method ID="1" Cmd="New"> 
     <Field Name="Title">Abcdef</Field> 
     <Field Name="Project_x0020_code">999050</Field> 
     <Field Name="Status">Open</Field>  
    </Method> 
</Batch> 

Batch元素是XML的根元素。在裏面你可以放不同的方法。這些應該得到一個唯一的ID(用於向您回報錯誤)和一個命令,例如可以是「新建」或「更新」。在方法內部,您可以將Field元素指定爲每個字段的值。例如,標題字段獲得值「Abcdef」。請小心使用由GetList()返回的確切名稱。

要在SharePoint執行查詢,使用UpdateListItems()方法:

XmlNode result = sharePointLists.UpdateListItems(listDefinition.Name, updates); 

返回值是包含每個更新的狀態的XML片段。例如:

<Results xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
    <Result ID="1,New"> 
    <ErrorCode>0x00000000</ErrorCode> 
    <z:row ows_ContentTypeId="0x010036F3F587127F1A44B8BA3FEFED4733C6" 
     ows_Title="Abcdef" 
     ows_Project_x0020_code="999050" 
     ows_Status="Open" 
     ows_LinkTitleNoMenu="Abcdef" 
     ows_LinkTitle="Abcdef" 
     ows_ID="1005"    
     ... 
     xmlns:z="#RowsetSchema" /> 
    </Result> 
</Results> 

您可以分析這一點,看看錯誤代碼,看看哪些方法失敗。

實際上,我已經創建了一個包裝類,爲我處理所有骯髒的細節。不幸的是,這是我的僱主所有,所以我不能與你分享。

此包裝類是內部實用程序的一部分,用於從我們的項目數據庫檢索信息並將其發佈到SharePoint。由於它是在公司時間開發的,我不能在這裏發佈。

+0

這個包裝類是你的公司在產品中包含的東西,還是僅僅是你創建的內部工具類?只是好奇 - 我的僱主不會在乎我是否共享實用程序代碼,但我爲一個非常進步的組織工作。 – cori 2008-09-18 12:46:13

相關問題