将 VSTO 与 SharePoint 内容类型相集成

Office 业务应用程序 (OBA) 是使用组成 Microsoft ® 2007 Office 系统的服务、工具和服务器构建的复合应用程序。这些应用程序与业务线 (LOB) 系统(如 SAP、PeopleSoft 和 Microsoft Dynamics)相集成。OBA 的主要目标是:弥合员工无法直接访问 LOB 系统中业务数据时所产生的沟壑,以此利用对 LOB 系统的现有投资。
由于存在这一沟壑,许多员工必须使用过期的业务数据。这可能导致因信息有误而做出错误的业务决策,并且为拥有 LOB 系统访问权限的人员带来不必要的请求。从而损耗时间,并且更多情况下会产生资金成本。
OBA 还具有其他优点,如将业务数据引入日常工作环境中 — 通常是通过熟悉的 Microsoft Office 应用程序来实现。LOB 系统有时要想全面掌握是颇为困难的(这还是婉转的说法),以熟悉的工具为构建基础有助于减少相应的培训成本。
可使用以下四个核心部件构建有效的 OBA:LOB 系统、自定义 Office 客户端应用程序、Microsoft Office SharePoint ® Server (MOSS) 2007 以及将其他三部分结合起来的服务。也可将其他产品(如 Exchange Server 或 Office Communications Server (OCS))绑定到 OBA 中来扩大其范围和功能,Visual Studio ® Tools for Office (VSTO) 还提供内置功能来帮助快速构建解决方案。
例如,可创建 Excel ® 服务 Web 部件来指向 Excel 2007 电子表格中的数据,从而使开发人员可在 SharePoint 中构建商业智能视图。或者,通过将 Visual Studio Tools for Office (VSTO) 自定义集成到 SharePoint 中,这样用户可直接从文档库调用自定义模板或文档,从而可提供丰富的客户端自定义。
这种特定类型的集成具有很多优点,如以 Office 客户端应用程序功能集为构建基础(因此不必在应用程序中重新生成此功能集)、有效管理和部署文档或模板程序集(VSTO 自定义)以及允许在集中存储和管理数据的同时能在工作流驱动的协作环境中操作数据。
本文将重点介绍提到的第二个和第三个优点:构建文档级 VSTO 自定义和将其与 SharePoint 中的内容类型相集成。这两个优点组合起来后,可在客户端上利用 Office 平台丰富的用户功能,同时将在客户端上捕获的数据无缝扩展到企业。
我将特别为您展示如何创建、部署和保护 VSTO 文档级解决方案(它们使用通过自定义操作窗格绑定到集中管理数据的 Microsoft Word 内容控件)。然后,我将展示如何在 SharePoint 中创建内容类型,最后展示如何将内容类型映射到自定义 VSTO 文档级解决方案。

 

VSTO 自定义基础知识
请注意,可构建两种 VSTO 加载项。第一个(将在本文中介绍)是文档级解决方案 — 实质上是仅出现在特定文档或模板中的自定义。第二个(本文没有介绍)是应用程序级加载项 — 实质上是每次打开宿主应用程序时会出现的自定义。
由于 OBA 常常与流程相关,因此我准备针对 Word 创建一个非常简单的 VSTO 自定义(它是更广泛的采购订单 (PO) 流程的一个小部件)。为便于本文讨论,此流程包括三个关键步骤:针对客户申请的工作创建一个 PO、从采购订单生成一个工作说明 (SOW),以及在完成工作时生成一张发票。当然,具体的 PO 流程可能有所不同,但它们都是本文中示例的基本组成部分。
在此方案中,还假设公司使用 LOB 系统来集中管理数据(如工作或客户详细信息)。为便于本文讨论(并为简单起见),我将使用 SQL Server ® 连接;但是,在真正实施中,可使用 Windows ® Communication Foundation (WCF) 服务或 Web 服务来连接 LOB 系统。
本文将重点介绍流程中开具发票这一过程。为此,我将创建一个自定义发票,它使用集中管理的数据并且随后与 SharePoint 相集成。接着,考虑如何构建和集成流程中的其他步骤,并针对 SharePoint 中的自定义发票构建一个工作流。
但是,在开始编码之前,您可能希望使用一个自定义发票文档或模板。如 图 1 所示,我创建了一个非常简单的客户发票,它仅具有基本信息,没有太多修饰。
图 1  客户发票文档 
构建 VSTO 自定义
更多参考资料
创建文档之后,就可开始有趣的工作:构建文档级自定义。为此,使用 Visual Studio 2008(单击“文件”|“新建”|“项目”)创建一个新的 Word 2007 文档项目。然后,在 Visual C# ® 或 Visual Basic ® 中,单击“Office”|“2007”|“Word 2007 文档”。
在 Visual Studio 创建项目外壳之前,它会提示您为应用程序选择一个文档。此时即可将文档(在本示例中为发票)与项目相链接。可指定一个现有文件(就像我一样)或创建一个新文件。然后,Visual Studio 会将所有 Word 菜单选项和功能加载到开发环境中。
VSTO 3.0 是 Visual Studio Professional Edition 及更高版本中所包含的一项技术,可利用此技术使用托管代码为 Office 构建解决方案。VSTO 文档级解决方案最令我喜欢的一件事是项目中使用的文档或模板非常类似于 Visual Studio 中的设计器。就像使用 Windows 窗体或 Windows Presentation Foundation (WPF) 用户控件一样,可从“工具箱”拖动控件并将它们放到文档中,甚至是将事件添加到文档中。
Visual Studio 为您创建一个项目外壳,它将自定义文档用作项目的核心部件。通过使用创建的项目外壳,我向发票文档添加了两个主要的自定义,然后在文档后面添加了一些代码来处理客户数据。具体来说,我是向文档添加了一些 Word 内容控件。然后,创建一个自定义操作窗格来管理内容控件中加载数据的视图。
图 2 显示了以设计模式打开文档时的项目视图。在“工具栏”窗格中显示有 Word 控件 — 可将这些 Word 内容控件拖到文档表面。我已将它们添加到整个文档中。在 图 2 中,文本“Click here to enter text.”指出了我已添加到文档的内容控件。对于本项目,我使用的是“丰富文本内容控件”,可利用它来更加灵活地控制文本显示和格式。还可添加其他类型的控件(如图像、日期挑选器或组合框)。
图 2  编辑 VSTO 自定义文档 (单击该图像获得较大视图)
将内容控件添加到文档表面后,接下会希望将数据源集成到项目中。在 OBA 上下文中,这可能意味着将服务集成到项目中,然后让服务中的成员能从 LOB 系统读取数据或将数据写入 LOB 系统中。为简便起见,我将把 SQL Server 数据库用作示例 LOB 系统。数据源是名为 PODetails 的表,包括的列有 PO ID(主键)、客户名称、地址和联系人、PO 详细信息以及 PO 总金额。
通过使用“Add New Data Source Wizard”(添加新数据源向导)(“Data”(数据)|“Add New Data Source”(添加新数据源)|“New Connection”(新建连接)),即可将 PODetails 数据用于我的解决方案。此向导提示输入集成到项目中的表,然后为项目提供一个默认连接字符串。

创建用户控件
现在,创建将位于操作窗格内的用户控件(请参阅 图 3)。此用户控件包括六个具有标签的字段和四个按钮控件。使用数据绑定属性将每个字段绑定到数据库表中的一个记录。这些按钮用于将数据从 SQL Server 加载到控件中,前后浏览数据以及将选定数据添加到自定义发票文档的内容控件中。
图 3  客户 PO 信息用户控件 
创建用户控件后,向每个按钮控件添加事件。对于加载数据事件,添加以下代码:
 
另一设计为在核心加载项类的 StartUp 方法工作期间(在宿主应用程序加载程序集时执行)加载数据。
还添加了几个事件来负责前后浏览数据,因此用户可通过单击按钮元素来在表中的客户数据间移动。为此,针对绑定源使用 MovePrevious 和 MoveNext 方法:
为将数据添加到内容控件,我使用直接的方法来从每个用户控件文本框的 Text 属性读取一系列字符串变量。然后,将这些字符串用作参数并设置文档中对应内容控件的每个 Text 属性。 图 4 说明了这一示例技术。
 Figure 4 将数据添加到 Word 文档
 
 
您可能已注意到,内容控件有多个重复的字符串变量赋值。这是设计使然,但由于在您的解决方案中一个给定发票可能有多个 PO 工作项,因此第二个总额(在我的示例中指定给 wccTotalCharges)可能希望将字符串变量视作十字制数,并且调用一个函数来将其汇总成发票总金额。对于第二个工作详细信息内容控件 (wccWorkItem),一个方法是让表有一个简短的说明,让详细信息有一个更长的说明。为简便起见,我在两个内容控件间重用字符串。
我使用内容控件设计解决方案有以下三个原因。第一,内容控件非常适合于将数据绑定到 Word 文档(并且非常稳定)。第二,可锁定控件的内容,从而使用户无法删除控件或编辑控件中的内容。最后,可象处理 VSTO 项目中其他对象一样处理控件。例如,在 图 4 中,注意是使用 Globals 来访问每个内容控件的 Text 属性。它仅是可管理的多个属性中的一个。 图 5 展示的是通过编程方式锁定内容控件,因此用户无法删除或编辑控 件。
 
此时构建并运行解决方案。结果应如 图 6 所示。在此声明:我的设计还没有利用所有可用的 VSTO 功能。例如,还可使用功能区设计器来扩展功能区,或使用 WPF 控件来增强操作窗格中数据的可视效果。(如需将 WPF 用于 VSTO 操作窗格的示例,请参阅 msdn2.microsoft.com/magazine/cc163292.aspx。)
图 6  处于调试模式的 VSTO 自定义 (单击该图像获得较大视图)
设计就谈到这里,接下来是一项更为重要的任务,将此程序集放入共享环境。最终,由于 PO 流程涉及到许多人,因此我希望确保此程序集处于一个安全的共享环境中。但首先,我将部署并确保自定义的安全,以便员工可从 SharePoint 中使用它。

部署和安全性
执行进一步操作之前,右键单击解决方案并选择“清理解决方案”。它会从开发环境中删除所有版次。还希望确保已为 VSTO 自定义创建一个文档库 — 本文稍后会用到它。要创建文档库,只需导航到 SharePoint 站点并单击“文档中心”|“层次结构”|“创建”|“文档库”。需提供一些详细信息来说明文档库,然后单击“确定”。创建文档库后,在部署和保护 VSTO 自定义时,需要 URL。
现在,需设置一个共享。我的开发环境包括 Windows Server ® 2003、MOSS 2007、包含 VSTO 3.0 的 Visual Studio 2008 以及 2007 Office system Professional Edition,因此在本地服务器(称为 MOSS)上设置共享。也可将企业中的一个安全共享用作此程序集的发布点。为此,需为程序集创建一个目录(例如 C:/CustomerInvoice)。右键单击新创建的文件夹并选择“共享和安全”。单击“共享该文件夹”单选按钮并为共享命名(如 CustomerInvoice)。单击“共享”选项卡,然后单击“权限”按钮。添加“Everyone”并赋予“读取”权限,添加“Administrators”并赋予“完全控制”权限。单击“安全”选项卡,然后添加“Everyone”并赋予“读取及运行”、“列出文件夹内容”以及“读取”权限。
此时,共享做好了接收 VSTO 自定义的准备。(请注意,根据安全策略的不同,针对此共享委派权限的具体方式可能与我的做法有所不同。)
下一步是将 VSTO 程序集文件发布到该特定位置。在 Visual Studio 2008 中打开 VSTO 项目时,右键单击项目并选择“属性”。在“项目属性”视图的“构建”选项卡中,确保将输出路径设为刚为项目创建的共享。在我的示例中,它是 //moss/CustomerInvoice。现在,单击“发布”选项卡并将“Publishing Folder Location”(发布文件夹所在的位置)和“Installation URL”(安装 URL)设置为此共享(请参阅 图 7)。同样,对于我来说是 //moss/CustomerInvoice。单击“Publish Now”(立即发布)按钮。成功将 VSTO 项目发布到共享后,可关闭项目。
图 7  发布 VSTO 自定义 (单击该图像获得较大视图)
此时,项目已发布到安装位置,但它在 Word 中还不是一个受信任的程序集。为使其成为受信任的程序集,需将文档的位置(存储在发布文件夹位置)添加到 Word 信任中心。
打开 Word 并单击 Office 按钮(文档左上角的大圆形按钮)。单击菜单底部的“Word 选项”按钮并从左边的窗格中选择“信任中心”。然后,单击“信任中心设置”按钮并从左边的窗格中选择“受信任位置”(请参阅 图 8)。选中“Allow Trusted Locations on my network”(允许网络上的受信任位置)复选框,并单击“Add New Location”(添加新位置)按钮。在“Add New Location Path”(添加新位置路径)对话框中,添加项目程序集的发布位置(如 //moss/CustomerInvoice)并选中“Subfolders of this location are also trusted”(同时信任此位置的子文件夹)复选框。
图 8  将自定义添加到 Word 信任中心 (单击该图像获得较大视图)
还需添加用户将在其中使用此 VSTO 自定义的 SharePoint 文档库位置(例如 moss.litware.com/Docs/CustomerInvoice)。添加发布和 SharePoint 位置后,连续单击两次“确定”,然后退出 Word。
还需配置浏览器的受信任站点。首先,打开 Internet Explorer ® 并单击“工具”|“Internet 选项”,然后单击“安全”选项卡。选择“受信任的站点”并单击“站点”按钮。可添加运行 VSTO 程序集的站点(例如,在本例中为 moss.litware.com)并确保取消选中“要求服务器验证”。
现在,通过导航到发布共享(如 //moss/CustomerInvoice)并打开文档(在本例中为 CustomerInvoice.docx),可测试 Word 文档。无论在 VSTO 项目中添加了何种自定义,它们都应能正常运行,但此时您不希望保存任何内容,因此可关闭文档,不保存。最后一件事是创建一个新的 SharePoint 内容类型,并将其链接到自定义的文档。

新建内容类型
内容类型是 Windows SharePoint Services (WSS) 中的一种类型定义,可用于定义列表中的项或文档库中的文档的行为。可创建一个自定义内容类型,将它映射到一个文档库(该文档库使用在本文前面创建的自定义模板)。
将内容类型映射到自定义 VSTO 程序集实质上包括三个简单步骤。第一步是在 SharePoint 中实际创建内容类型。第二步是将该内容类型与自定义 VSTO 程序集相关联。第三步是将新内容类型添加到 SharePoint 文档库。
为创建新内容类型,必须导航到“Document Center”(文档中心),并单击“Site Settings”(站点设置)|“Site Content Type Gallery”(站点内容类型库)|“New Site Content Type”(新建站点内容类型)。这将调出“New Site Content Type”(新建站点内容类型)页面(请参阅 图 9),可在其上设置内容类型的核心属性。对于我的内容类型,我将其称为“Customer Invoice”,提供一个说明,然后将“Document”(文档)选作父项内容类型。我还选择“Document Content Types”(文档内容类型)来对内容类型进行分类。完成后,单击“OK”(确定)。从而创建出一个新内容类型。
图 9  新建内容类型 (单击该图像获得较大视图)
既然已创建内容类型,则需要将自定义 VSTO 程序集(自定义的 Word 文档)与新内容类型相关联。为此,在 SharePoint 站点的“Document Center”(文档中心)中,单击“Site Settings”(站点设置)|“Modify All Site Settings”(修改所有站点设置)|“Site Content Types”(站点内容类型),然后单击新创建的内容类型(在本示例中它是“Customer Invoice”)。现在,单击“Advanced Settings”(高级设置)。在“高级设置”页面中(请参阅 图 10),单击“Upload a new document template”(上载新文档模板)单选按钮,浏览至存储自定义文档的发布位置,然后单击“OK”(确定)。
图 10  客户发票文档 (单击该图像获得较大视图)
最后一步是将自定义内容类型(以及与其相关的 VSTO 自定义文档)添加到文档库中,这样当用户单击文档库中的“新建”按钮时,调用的文档是自定义文档。为此,导航到文档库(在我的示例中为 Customer Invoice 库)并单击“Settings”(设置)。这会调出文档库的“设置”页面。在“Content Types”(内容类型)下面,单击“Add from existing site content types”(从现有站点内容类型添加)。在“Add Content Types”(添加内容类型)页面上,从“Available Site Content Types”(可用站点内容类型)列表中选择自定义内容类型(在我的示例中为 Customer Invoice)(请参阅 图 11)并单击“Add”(添加)。
图 11  添加内容类型页面 (单击该图像获得较大视图)

结束语
您还可选择完成最后一步,即将自定义文档内容类型按钮设为用户在文档库中单击“新建”时显示在最上方的选项。这样做的好处是自定义会显示为最上面的选项。显然,位于列表最上面可使用户更容易地找到自定义文档。
为此,导航到文档库并单击“Settings”(设置)。在“Content Types”(内容类型)下面,单击“Change new button order and default content type”(更改新按钮的顺序和默认内容类型),然后将自定义内容类型按钮更改为 1 并单击“OK”(确定)。同样,尽管并非关键所在,但它却有助于在文档库中选择“新建”时将自定义文档放到可用选项的最上方。
现在,可导航到文档库。单击“New”(新建),将显示新的自定义文档(在我的示例中为 Customer Invoice) 以备使用。此文档将与 图 6 中所示完全相同,主要区别在于它是从中央位置:SharePoint 站点进行加载和管理。
现在,可通过集成了集中管理数据存储库的 SharePoint 方便地访问文档。文档还可附加自定义工作流,以帮助管理更多种类的 PO 流程。
开始将其他功能设计到 OBA 解决方案中时,不仅可利用 VSTO 中的其他客户端功能(如自定义功能区、WPF 和 LINQ),还可以利用 SharePoint 中的服务器端功能(如 Excel 服务、业务数据目录、博客)。MOSS 2007 附带了许多其他功能。
如果有兴趣了解有关本文中所讨论主题的更多信息,可查看“更多参考资料”侧栏中列出的有用资源。其中包括一些书籍和相关的 Microsoft 资源中心。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值