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

Posted

技术标签:

【中文标题】SharePoint - 如何使用列表 Web 服务插入新项目?【英文标题】:SharePoint - How do insert new items using the list web service? 【发布时间】:2010-09-10 06:25:07 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

使用 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(用于向您报告错误)和一个命令,例如可以是“新建”或“更新”。在 Method 中,您放置 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。由于是在公司时间开发的,所以这里不能发。

【讨论】:

这个包装类是贵公司在产品中包含的东西,还是只是您制作的内部实用程序类?只是好奇——我的雇主不会在意我是否共享实用程序代码,但我为一个相当进步的组织工作。 非常好的答案,涵盖了所有内容,并在 API 文档中提供了一些起点。我现在可以为它编写自己的包装器,这是学习经验的一部分。

以上是关于SharePoint - 如何使用列表 Web 服务插入新项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SharePoint 2010 的 XSLT 列表 Web 部件中隐藏列表功能区?

如何在 Sharepoint 2016 中通过 Visual Web 部件更新项目后重新加载列表?

如何使用 Rest 在 SharePoint 中获取多个模板类型列表

如何检索 SharePoint 列表项的目标安全组?

带有常用按钮菜单栏的 Sharepoint 2013 列表视图

是否可以在 Web 部件中使用多线程访问 SharePoint 2010 列表?