65.9K
CodeProject 正在变化。 阅读更多。
Home

向SharePoint列表添加值

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.70/5 (5投票s)

2008 年 1 月 27 日

CPOL

4分钟阅读

viewsIcon

140558

本文将创建一个非常简单的 C# 应用程序,演示应用程序如何使用 Web 服务向 Windows SharePoint Service 3.0 列表添加项。

引言

本文将创建一个非常简单的 C# 应用程序,演示应用程序如何使用 Web 服务向 Windows SharePoint Service 3.0 列表添加项。

背景

随着我的公司开始在更多应用程序中使用 SharePoint,我开始思考许多应用程序都可以通过编程方式向 SharePoint 任务列表添加项。一旦项进入任务列表,您就可以利用 SharePoint 的所有内置功能,如用户警报或工作流,而无需编写任何额外的代码。

可以通过 SharePoint 对象模型以编程方式将项添加到 SharePoint 列表。但是,如果您想从运行在任何服务器上的应用程序添加项,包括那些不能直接访问 SharePoint 对象的服务器,您可以使用 SharePoint 提供的众多 Web 服务之一。

Windows SharePoint Service 3.0 提供了 20 多个 Web 服务,允许您访问从管理功能到站点创建的各种功能。本文将重点介绍 Lists Web 服务,并演示如何使用它来添加和读取列表中的项。

Lists Web 服务

与任何 Web 服务一样,您首先需要创建一个 Web 服务的引用。Lists 服务的 URL 是:

    http://<site>/_vti_bin/Lists.asmx

SharePoint 服务器上的每个站点都可以访问 _vti_bin 目录。使用列表所在的站点非常重要。例如,我开发此示例的服务器名为 SPDEV-APP01。我使用的任务列表位于一个名为 Subsite 的站点中。当我第一次尝试时,我使用了以下 URL 作为 Web 服务:

    http://SPDEV-APP01/_vti_bin/Lists.asmx

此 URL 无效,因为我想要使用的列表不包含在顶级站点中。正确的 URL 是:

    http://SPDEV-APP01/Subsite/_vti_bin/Lists.asmx

不知何故,当我第一次更改 Web 引用 URL 的属性时,Visual Studio 没有更改 App.Config 中的值。一旦我更正了 App.Config,我就拥有了一个名为 App03Lists 的 Web 引用,可用于访问我的任务列表。

使用 List GUID

下面示例中将使用的方法需要 SharePoint 列表和视图的 GUID。有几种不同的方法可以找到 SharePoint 使用的 GUID,但我发现最简单的方法是使用 GUID 选择器实用程序。我在 Ronalus 的博客文章中找到了此实用程序,地址是:

    http://blogs.msdn.com/ronalus/archive/2007/09/08/a-little-guid-picker.aspx

向列表添加值

Lists 服务的 UpdateListItems 方法将用于向列表添加新项。此方法需要列表的 GUID 和一个 XML 批处理。批处理指定了一系列命令,可以添加、更新或删除列表中的项。下面是此示例中使用的非常简单的批处理:

<Batch OnError="Continue" ViewName="{D0E978D3-4D39-4CBE-ACEC-BCFB22344252}">
    <Method ID='1' Cmd='New'>
        <Field Name='Title'>The New Task Title</Field>
     </Method>
</Batch>

此批处理执行一个命令,该命令向列表添加一个新项,并将 Title 字段设置为“The New Task Title”。显然,这可以扩展为一次添加多个项并设置多个字段值。重要的是要注意,批处理中使用的字段必须在 ViewName 属性指定的视图中可用。

以下是向任务列表添加值的完整代码:

App03Lists.Lists listService = new App03Lists.Lists();

// SharePoint Web Serices require authentication
listService.Credentials= System.Net.CredentialCache.DefaultCredentials;  

String newIssueTitle = "Programmatically added issue 2";

String listGUID = "{D20D26A7-3935-43F8-848F-03612AF782DE}";
String activeItemViewGUID = "{D0E978D3-4D39-4CBE-ACEC-BCFB22344252}";

string strBatch =
	"" +
	String.Format("{0}", newIssueTitle) +
	"";

XmlDocument xmlDoc = new System.Xml.XmlDocument();
System.Xml.XmlElement elBatch = xmlDoc.CreateElement("Batch");
elBatch.SetAttribute("OnError", "Continue");
elBatch.SetAttribute("ViewName", activeItemViewGUID);
elBatch.InnerXml = strBatch;
XmlNode ndReturn = listService.UpdateListItems(listGUID, elBatch);

UpdateListItems 的完整文档可以在这里找到:

    http://msdn2.microsoft.com/en-us/library/lists.lists.updatelistitems.aspx

从列表中读取值

我期望使用此功能的一个场景是每五分钟运行一次的服务,用于检查失败的 SQL 作业。当作业失败时,程序将在任务列表中创建一个任务。服务在修复失败的作业之前可能运行多次。为了防止为同一个失败的作业创建多个任务,我想读取活动任务列表,以确保不会创建重复的任务。

Lists Web 服务的 GetListItems 方法将用于读取列表中的现有任务。此方法接受几个参数,可用于指定用于选择行的查询、要返回的字段列表、要返回的行数等;对于这个简单的示例,将只使用前两个参数:列表 GUID 和视图 GUID。只需要这些参数,因为正在使用的视图(活动项)已经执行了适当的行和字段选择。

以下示例将逻辑添加到:

  1. 从活动项视图选择任务
  2. 如果任务尚不存在于项视图中,则添加新任务

App03Lists.Lists listService = new App03Lists.Lists();

// SharePoint Web Serices require authentication
listService.Credentials= System.Net.CredentialCache.DefaultCredentials;  

String newIssueTitle = "Programmatically added issue 2";

String newIssueTitle = "Programmatically added issue 2";

String listGUID = "{D20D26A7-3935-43F8-848F-03612AF782DE}";
String activeItemViewGUID = "{D0E978D3-4D39-4CBE-ACEC-BCFB22344252}";

// first check if item is already in the list
XmlNode activeItemData = listService.GetListItems(listGUID, activeItemViewGUID, null, null, "", null, "");
if (!activeItemData.InnerXml.Contains(newIssueTitle))
{
    // item does not exist in active view so add it
    string strBatch =
        "" +
        String.Format("{0}", newIssueTitle) +
        "";

    XmlDocument xmlDoc = new System.Xml.XmlDocument();
    System.Xml.XmlElement elBatch = xmlDoc.CreateElement("Batch");
    elBatch.SetAttribute("OnError", "Continue");
    elBatch.SetAttribute("ViewName", activeItemViewGUID);
    elBatch.InnerXml = strBatch;
    XmlNode ndReturn = listService.UpdateListItems(listGUID, elBatch);

}

GetListItems 的完整文档可以在这里找到:

    http://msdn2.microsoft.com/en-us/library/lists.lists.getlistitems.aspx

结论

这是一个非常简单的示例,它向 SharePoint 任务列表添加了一个项。它可以轻松地扩展到操作任何类型的 SharePoint 列表,包括文档库。上面显示的​​代码可以包装在 Windows 服务或任何其他类型的 C# 应用程序中。




© . All rights reserved.