深入剖析 SharePoint通过 Web 服务扩展 Office 应用程序

Pav Cherny

目录

SharePoint Web 服务与对象模型
Outlook 2007 与 StsSync 协议
Excel 2007 与 Excel Web Access
Access 2007 与 Access Web 数据表控件
Word 2007 与 MetaWeblog API
PowerPoint 2007 与 MOSS 2007
InfoPath 2007 与 InfoPath Forms Services
结论

Microsoft Windows SharePoint Services (WSS) 3.0 中的 21 种标准 Web 服务以及 Microsoft Office SharePoint Server (MOSS) 2007 中的 19 种标准 Web 服务,可让您建立极具灵活性的解决方案,这些解决方案可用于从本地和远程资源检索数据、扩展标准 Microsoft Office 套件功能,以及集成业务应用程序。当然,您可能拥有甚至 40 种以上的 Web 服务。如果您安装更多与 SharePoint 集成的服务器解决方案(如 Microsoft Office Project Server 2007),可能会发现 SharePoint 服务器上的 Web 服务数量很容易就超过 60 种。而这还不包含您可能要实现的任何自定义 SharePoint Web 服务。Web 服务是分布式业务应用程序的基本构建块,而且在软件+服务的时代,Web 服务的重要性更为突出,因为它们为公司提供了将内部部署解决方案与托管环境相集成的途径。

在本专栏中,我将讨论 Web 服务在 SharePoint 环境中的优点,特别是它们在标准 Office 应用程序内部和外部的应用。虽然 Office 应用程序通常依赖 Microsoft Office FrontPage 和 WSS 远程过程调用 (RPC) 以及 Web 分布式创作和版本控制 (WebDAV) 来对 SharePoint 列表和库进行基于文件的访问,但它们也使用 Web 服务。WSS 3.0 所含的基本 Web 服务对大多数 Office 应用程序(例如 Microsoft Word 2007、Outlook 2007 和 Access 2007)来说已绰绰有余,而诸如 PowerPoint 2007 和 InfoPath 2007 等更多应用程序,可使用仅通过 MOSS 2007 或独立产品提供的更多 Web 服务。我会在必要时介绍产品依存性。如果您要在测试环境中按照我讲解的步骤操作,可在本专栏随附的材料中找到包含分步指南的工作表,位于 technet.microsoft.com/magazine/bb978519 的“代码下载”区。

详尽的开发人员讨论和业务数据集成等主题已超出本文讨论范围。我假定您熟悉 Web 服务及其在业务应用程序中的使用方式。如需关于 WSS 3.0 和 MOSS 2007 内置 Web 服务的一般性概述,我建议先从 SharePoint Server 2007 SDK 中的“Web 服务访问”一文着手(请参阅 msdn.microsoft.com/library/bb862916.aspx)。

SharePoint Web 服务与对象模型

对于 SharePoint 解决方案开发,一个常见问题是该使用 Web 服务还是对象模型。与 Web 服务相比,对象模型更易于使用,公开的接口更多,开销也更少;但是,由于存在 COM 依赖关系,对象模型只能用在 SharePoint 服务器上。Web 服务则比较容易访问,因此对需要从远程数据源聚合数据的客户端应用程序和服务器端组件(例如业务数据 Web 组件)来说,无疑是正确选择。随着数据从本地的内部部署系统移动到远程的托管环境,SharePoint 解决方案必须更多地利用面向服务的架构 (SOA),才能使用分布式 SharePoint 环境,如图 1 中的图表所示。

fig01.gif

图 1 分布式 SharePoint 环境中的 Web 服务(单击可获得大图)

Web 服务消除了前端与后端子系统的紧密耦合,从而提供了广泛的灵活性。如图 1 所示,只要中间的 Web 服务公开预期的接口,前端便可与任何基本平台交互。在 2008 年 9 月的专栏 (technet.microsoft.com/magazine/cc742803) 中,我通过将内置 WSS 3.0 电子邮件集成 Web 服务 (SharepointEmailWS.asmx) 替换为公开相同接口的自定义版本,演示了这种作法。

当然,同样的策略也适用于客户端应用程序,如使用 SharePoint Web 服务的 Office 应用程序。Stephen Toub 在他的 MSDN 文章“自定义 Outlook 2003 的日历提供程序”中,建立了一个自定义 Web 服务来镜像 SharePoint Lists 服务 (Lists.asmx) 的接口,将自定义数据(而不是 SharePoint 列表项目)返回给 Outlook,从而清楚地演示了这种作法(请参阅 msdn.microsoft.com/aa168130)。他演示了 Outlook 日历如何显示事件日志中的项目、RSS 源中的项目、新闻组的帖子、Windows Live Messenger 中的对话以及计算机上的系统还原点等诸多数据,随后更扩展了解决方案以支持联系人列表。

Patrick Creehan 在 2006 年更新了这项实现,使之现在也能与 Outlook 2007 搭配使用(请参阅 Patrick 的博客文章“自定义 Outlook 2007 的日历提供程序”,网址是 blogs.msdn.com/pcreehan/archive/2006/11/21/custom-calendar-providers-for-outlook-2007.aspx)。

Outlook 2007 与 StsSync 协议

知道自定义列表提供程序可以利用 Outlook 与 SharePoint 的集成之后,让我们仔细讨论一下 Outlook/SharePoint 的交互。为了访问 SharePoint 列表或文档库的内容,Outlook 会通过 Lists Web 服务与 SharePoint 通信,并且将列表及其项目与标准 Outlook 文件夹并排显示。您也可以直接在 Outlook 中创建全新项目或更新现有项目,若是后者,Outlook 会使用 Lists 服务来更新 SharePoint 存储库。交互和解决方案体系结构相对简单,如图 2 所示。

fig02.gif

图 2 Outlook StsSync 体系结构(单击可获得大图)

为了链接到所需的列表,Outlook 支持一种基于 StsSync 协议标识符的特殊 URL 格式,它向 Outlook 注册为协议处理程序。您可以在工作站的以下注册表项中找到对应的注册:HKEY_CLASSES_ROOT\StsSync\Shell\Open\Command。Outlook 以命令行参数的形式接收 StsSync URL,将它分解为单独的各个组件,然后使用参数链接到指定的 SharePoint 列表。

StsSync URL 既冗长又难懂,因为它们包含采用典型 URL 字符编码格式的几个查询字符串参数,例如:

stssync://sts/?ver=1.0&type=calendar&cmd=add-­folder&base-url=http%3A%2F%2Fsharepoint%2FHR%2FAdministration&list-url=%2FLists%2FCalendar%2FAllItems%2Easpx&guid=%7B4DF13090%2DDE1C%2D43EA%2D8B44%2D904869FEABC4%7D&site-name=HR%20Site&list-name=Admin%20Events

幸运的是,如果您从 SharePoint 用户界面内将 Outlook 链接到所需列表,则不需要直接指定这些 URL;而只需在 Internet Explorer 打开 SharePoint 列表,然后在列表的“操作”菜单上单击“连接到 Outlook”即可。此命令会调用称为 ExportHailStorm 的 JavaScript 函数(位于服务器上的 \%PROGRAMFILES%\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\1033\Init.js 中),该函数根据列表参数构建 StsSync URL,然后将得到的 URL 传送给 Internet Explorer,Internet Explorer 随后将这个 URL 传送给已注册的协议处理程序,即 Outlook。如需关于如何在 Outlook 中使用 SharePoint 列表的示例,请参阅随附的“在 WSS 中使用 Outlook”工作表。

最重要的 StsSync 参数之一是 base-url,它指向 SharePoint 站点,如 sharepoint/HR/Administration。Outlook 会自动向此 URL 追加对 Lists Web 服务的引用(例如,sharepoint/HR/Administration/_vti_bin/Lists.asmx)。于是,与 SharePoint 通信的方式就很清楚了。msdn.microsoft.com/cc313101 上提供的“StsSync 结构说明”介绍了 StsSync URL 的各个部分。

Excel 2007 与 Excel Web Access

图 2 中,您可能已经注意到 SharePoint“操作”菜单上“连接到 Outlook”下的“导出到电子表格”选项,它可以将列表的内容导出到 Excel 电子表格中。Excel 2007 并不使用 StsSync 协议。实际上,“导出到电子表格”会调用一个名为 ExportList 的函数(位于 SharePoint 服务器上的 \%PROGRAMFILES%\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\1033\Core.js 中),它会开始一系列有效的步骤来导出列表项目。这项功能并不使用 Web 服务。

ExportList 调用会生成一个指向 ISAPI 扩展 (Owssvr.dll) 的 HTTP 请求,请求生成并返回 Web 查询 (.iqy) 文件。此 .iqy 文件包含一个 Web 查询语句,它会引用 Owssvr.dll 以便以 XML 文档的形式从 SharePoint 列表检索实际的数据。您可以将 Owssvr.dll 视为早期版本的 Web 服务,但它的接口并不遵守 Web 服务的行业标准,因此可以说 Excel 并不使用现成的 Web 服务。

真正使用 Web 服务的 Excel 解决方案是 Excel Web Access,它包含在 MOSS 2007 中,如图 3 所示。事实上,Excel Web Access 使用 Excel Services (ExcelService.asmx),而该服务又依赖于 Excel Calculation Services (ECS),它是一个计算引擎,提供与 Excel 2007 桌面应用程序相同的计算功能。Excel Web Access 可以用作数据视图和参数化分析工具。通过将特定单元格指定为参数,以便只在线显示工作表的特定部分,并对工作簿本身设置 SharePoint 访问权限,管理员可以非常精细地控制用户能在 Excel 工作簿中访问的内容。出于安全性考虑,Excel Web Access 和 Excel Services 并不支持 Excel 2007 的部分功能,例如内嵌 Visual Basic 代码、表单控件以及外部引用。然而,解决方案开发人员可以创建能够在 SharePoint 上从工作簿内部访问的托管代码。有关 Excel Services 的详细信息,包括分步操作指南,请参阅“Excel Services 分步指南”,网址是 technet.microsoft.com/cc263430

fig03.gif

图 3 Excel 和 Excel Web Access 体系结构(单击可获得大图)

Access 2007 与 Access Web 数据表控件

与将 SharePoint 列表导出到电子表格相似,您也可以使用“操作”菜单上的“使用 Access 打开”选项将列表导出到数据库。“使用 Access 打开”同样依赖 Owssvr.dll ISAPI 扩展从 SharePoint 获取数据。如果单击“使用 Access 打开”,您会调用 JavaScript 函数 ExportToDatabase(位于 SharePoint 服务器上的 %\PROGRAMFILES%\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\1033\Core.js 中),它会实例化一个 SharePoint.ExportDatabase ActiveX 控件。此控件会与 Owssvr.dll 通信,并创建包含以下内容的 Access 数据库:数据表、视图、报表,以及链接到 SharePoint 列表对象或根据您的导出选项从 SharePoint 复制到数据库的其他对象。请参阅随附的“在 WSS 中使用 Access”工作表,开始在 Access 2007 中使用 SharePoint 列表。

虽然 SharePoint.ExportDatabase ActiveX 控件会与 Owssvr.dll 通信,而且不会使用 Web 服务,但 Access 2007 实际上通过一个称为 Stslist.dll 的 DLL 使用 SharePoint Web 服务,如图 4 所示。例如,您可以显示 Access 2007 中的“外部数据”功能区,单击“SharePoint 列表”,然后链接到所需列表作为链接数据表的数据源。在此方案中,Access 会调用服务器上的 Lists Web 服务 (Lists.asmx)。接下来,您可以使用 SQL 语句来搜索或更新 Access 中的数据。每次修改链接的数据表中的记录时,Access 也会调用 Lists.asmx,以确保 SharePoint 数据保持最新状态。

fig04.gif

图 4 Access 和 Access Web 数据表体系结构(单击可获得大图)

您还可以将单个 Access 数据表作为列表导出到 SharePoint,甚至将整个 Access 数据库移动到 SharePoint 站点,此操作会为每个数据表创建一个 SharePoint 列表,并通过一次批处理操作将所有的数据移到 SharePoint。虽然 SharePoint 无法在它的列表中强制要求引用完整性(将包含引用项目的数据库移动到 SharePoint 的用户会收到一条指示该结果的警告消息),但它确实允许像数据表一样在列表之间进行引用。当从 Access 导出数据表时,除了 Lists.asmx 之外,Access 还会与 Webs (Webs.asmx) 和 Views (Views.asmx) Web 服务通信,以便为每个数据表创建一个列表,并为每个数据表列创建一个网站栏,还会根据这些网站栏创建列表视图。

顺利导出之后,您可能要在数据表视图中查看 SharePoint 列表。只需单击列表“操作”菜单上的“在数据表中编辑”选项即可。“在数据表中编辑”会将浏览器重定向到一个通过下列 CLSID 引用 Access Web 数据表控件的网页:65BCBEE4-7728-41A0-97BE-14E1CAE36AAE。Internet Explorer 接着会在本地工作站上将此 ActiveX 控件加载到网页中。如果您在运行 2007 Office System 的工作站上搜索注册表,可以在 HKEY_CLASSES_ROOT 配置单元中找到 ActiveX 控件的对应注册表项 (ProgID ListNet.ListNet)。查看 InprocServer32 注册表项,您会发现 Access Web 数据表控件在 Stslist.dll 中实现。Access Web 数据表控件与 Access 2007 使用相同的 Web 服务。

其他资源

SharePoint 产品和技术网站

microsoft.com/sharepoint

Windows SharePoint Services 技术中心

technet.microsoft.com/windowsserver/sharepoint

Windows SharePoint Services 开发人员中心

msdn.microsoft.com/sharepoint

Microsoft SharePoint 产品和技术团队博客

blogs.msdn.com/sharepoint

Word 2007 与 MetaWeblog API

Word 2007 使用一项独特的 Web 服务(在称为 Metaweblog.aspx 的文件中实现),在 SharePoint 服务器上利用 MetaWeblog API。此 API 只公开三个方法(newPost、editPost 和 getPost),但它仍使用 XML 结构在 HTTP 上通信。WSS 3.0 以博客站点模板和 Web 管理界面支持现成的博客功能。基于 MetaWebl­og API,您可以将 Word 2007 用作博客程序,它是替代浏览器界面的可行方法。

请注意,与其他 SharePoint Web 服务不同,MetaWeblog 服务不使用 .asmx 文件扩展名。MetaWeblog API 在五年前由 Dave Winer 开发,而主流博客工具都希望通过 .aspx 网页访问此 API(您可以在 xmlrpc.com/metaWeblog­Api 阅读说明)。SharePoint 不采用一般的 .asmx 命名约定而使用 .aspx,以便与这些博客工具保持兼容。

PowerPoint 2007 与 MOSS 2007

在 WSS 3.0 环境中,PowerPoint 2007 不使用 Web 服务,而在访问文档库中的演示文稿文件时主要通过 FrontPage/WSS RPC 和 WebDAV 与 SharePoint 通信。但是,如果您有 MOSS 2007,则 PowerPoint 可利用 SharePoint 幻灯片库和 Slide Library Web 服务 (SlideLibrary.asmx)。

幻灯片库是一种特殊类型的文档库。您可以将它们与 PowerPoint 的“发布幻灯片”功能结合使用,将演示文稿分成单个幻灯片,并将这些幻灯片另存为文件夹或库中的单独文件。在幻灯片库中发布幻灯片时,Power­Point 会与 Webs.asmx 和 Slidelibrary.asmx 进行通信,以验证 URL 并检查是否存在幻灯片冲突。若幻灯片库中已存在同名幻灯片,则 PowerPoint 会提示您替换现有的幻灯片或跳过当前幻灯片。

幻灯片一旦上载到幻灯片库,就可以重复用于其他演示文稿,而原始幻灯片仍会保存在 SharePoint 服务器上的幻灯片库中。SharePoint 会为每个幻灯片添加时间戳,而 PowerPoint 可以检查这个时间戳和其他元数据(如作为幻灯片来源的 PowerPoint 演示文稿的名称),以通过 Slide Library Web 服务来检测更新。如果存在更新,您可以替换当前演示文稿中的本地幻灯片,或将已更改的幻灯片追加到您的演示文稿中。有关简介,请阅读文章“使用幻灯片库来共享和重复使用 PowerPoint 2007 幻灯片内容”,网址是 office.microsoft.com/en-us/powerpoint/HA012261671033.aspx。另请参阅名为“使用幻灯片库”的随附工作表。

有时候,您在发布幻灯片时,可能会注意到 PowerPoint 2007 中出现一条错误消息:“n 个幻灯片(共 n 个)发布到 <library> 失败。请尝试重新发布。”这是因为缺少访问权限或 WebDAV 通信问题所致。解决方法是:将幻灯片发布到本地文件系统上的文件夹,然后使用 Windows 资源管理器和幻灯片库的 UNC 路径手动将文件复制到幻灯片库,例如 \\sharepoint\SlideLib,而不是 sharepoint/SlideLib。Windows 资源管理器使用与 PowerPoint 2007 相同的 WebDAV 重定向程序,但它不会与 SlideLibrary.asmx 进行通信来检测幻灯片冲突。实际上,它使用 WebDAV 来检测文件是否已存在。图 5 显示 PowerPoint 2007 的幻灯片库体系结构。

fig05.gif

图 5 PowerPoint 和 SlideLibrary 体系结构(单击可获得大图)

InfoPath 2007 与 InfoPath Forms Services

如果不讨论 InfoPath 2007 与 InfoPath Forms Services,本专栏就不算完整。事实上,InfoPath 2007 可说是本专栏所讨论的 Office 应用程序中最重要的 Web 服务使用者。当然,您可以在 InfoPath 表单中将 Web 服务作为数据源广泛使用,但即使不考虑表单开发,而将重点放在发布不使用外部数据源的简单表单模板,除了 FrontPage/WSS RPC 和 WebDAV 之外,InfoPath 2007 还会通过 Web 服务与 SharePoint 通信,如图 6 所示。如需在 SharePoint 表单库中发布表单模板的示例,请参阅“代码下载”中提供的“使用 InfoPath Forms Services”工作表。

fig06.gif

图 6 InfoPath 和 Forms Services 体系结构(单击可获得大图)

InfoPath 2007 所依赖的重要 Web 服务是 Webs.asmx 与 Lists.asmx。此外,InfoPath 还会从 Web 服务检索有关网站栏定义和内容类型的信息,并使用此信息来填充“选择域或组”对话框中的网站栏列表框,因此,您可以在发布表单模板时将表单栏与现有的 SharePoint 网站栏关联起来。InfoPath 可使用 Lists 服务,在 SharePoint 站点中没有任何关联的情况下创建任何新栏。InfoPath 还会与 Lists 服务交互,以创建表单库和表单模板的内容类型定义。对于实际的模板上载,InfoPath 则使用 FrontPage/WSS RPC 和 WebDAV,将具有 template.xsn 文件名的模板直接放入新库的 Forms 子文件夹。

对于与浏览器兼容的表单模板,InfoPath 中的“发布向导”可能会提供使用浏览器填写表单的选项,具体取决于您在 SharePoint 服务器上安装的是 MOSS 2007 还是 Microsoft Office Forms Server 2007。InfoPath 会使用 FormServerDetector.aspx 网页(如 sharepoint/_layouts/FormServerDetector.aspx?IsFormServerEn­abled=check)检测当前 SharePoint 站点是否安装和启用 Forms Services,该网页会在安装并启用 Forms Services 时返回 <server IsFormServerEnabled = 'true' />。如果您随后让表单使用浏览器来填写,InfoPath 2007 会在发布过程中调用 Forms Services Web 服务 (FormsServices.asmx) 以相应地启用表单模板的浏览器功能。有关启用浏览器的 InfoPath 表单的详细信息,请参阅 msdn.microsoft.com/aa701145 上提供的“Microsoft Office Forms Server 2007 一般性参考资料”。

结论

Web 服务是 SharePoint 平台的重要组成部分。它们使业务解决方案能够访问本地和远程资源,将分布式业务应用程序彼此集成,并为 Office 应用程序提供重要功能。使 Office 应用程序与 SharePoint 站点、列表和库协同使用的最重要 Web 服务是 WSS 3.0 中包含的 Webs.asmx 和 Lists.asmx。另外一个偶尔会用到的 Web 服务是 Views.asmx,它提供了与列表视图协同使用的方法。大多数 Office 应用程序都不需要部署 MOSS 2007,不过有些应用程序(如 PowerPoint 2007 和 InfoPath 2007)可从高级功能(如只通过 MOSS 2007 或独立产品提供的幻灯片库和 Forms Services)中受益。

在软件+服务的时代,Web 服务起着非常重要的作用,因为它们将托管后端环境与内部部署的前端应用程序相分离。SharePoint 是推动在线协作向前发展的关键技术;Office 应用程序和 Office 加载项继续在本地工作站上运行,而将 Web 服务与其他 Web 技术结合可在分布式环境中跨公司防火墙无障碍地访问功能和数据。SharePoint 服务器承载 20、40、60 个或更多 Web 服务并不是巧合。Web 服务是强调易用性、易访问性和灵活性的业务解决方案的正确选择,对象模型则是构建这些 Web 服务的最佳选择。

Pav Cherny 是 IT 专业人员兼作者,专门研究 Microsoft 协作与统一通信技术。其著述包括白皮书、产品手册和书籍,其内容主要介绍 IT 运营和系统管理。Pav 是 Biblioso Corporation 的总裁,该公司主要经营托管文档和本地化服务。