SharePoint-如何使用列表Web服务插入新项目?

时间:2020-03-05 18:59:25  来源:igfitidea点击:

我有一个包含2个文本字段和一个选择字段的列表。如何使用Lists.asmx Web服务插入新项目?我可以对list.asmx服务进行Web引用,因此可以假定这是已知的。

我想要一个完整的示例,包括用于CAML查询的代码和XML。理想情况下,示例将使用C#。

解决方案

回答

使用Lists Web服务将项目插入SharePoint列表确实很棘手。由于此方法具有以下形式:XML输入,XML输出,因此很难正确获取参数。

首先,我们应该看一下列表定义。可以使用方法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(用于将错误报告给我们)和一个命令,例如可以是" New"或者" Update"。在"方法"内部,放置了为每个字段指定值的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>

我们可以对此进行解析,并查看ErrorCode以查看哪些方法失败。

在实践中,我创建了一个包装器类,该包装器为我处理所有脏的细节。不幸的是,这是我的雇主所有,因此我无法与我们分享。

包装器类是内部实用程序的一部分,该实用程序用于从我们的项目数据库中检索信息并将其发布到SharePoint。由于它是在公司时间内开发的,因此不允许在此处发布。