专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »办公软件 » vsto2008:将 VSTO 和 SharePoint 内容类型相集成 »正文

vsto2008:将 VSTO 和 SharePoint 内容类型相集成

来源: 发布时间:星期日, 2009年2月8日 浏览:4次 评论:0
  本文讨论:

  VSTO 自定义基础知识

  构建个自定义文档

  集成数据源

  部署到 SharePo

  本文使用了以下技术:

  VSTO、SharePo、SQL Server 将 VSTO 和 SharePo<img src='/icons/70577int.gif' /> 内容类型相集成目录

  VSTO 自定义基础知识

  构建 VSTO 自定义

  创建用户Control控件

  部署和安全性

  新建内容类型

  结束语

  Office 业务应用 (OBA) 是使用组成 Microsoft® 2007 Office 系统服务、工具和服务器构建复合应用这些应用和业务线 (LOB) 系统(如 SAP、PeopleSoft 和 Microsoft Dynamics)相集成OBA 主要目标是:弥合员工无法直接访问 LOB 系统中业务数据时所产生沟壑以此利用对 LOB 系统现有投资

  由于存在这沟壑许多员工必须使用过期业务数据这可能导致因信息有误而做出业务决策并且为拥有 LOB 系统访问权限人员带来不必要请求从而损耗时间并且更多情况下会产生资金成本

  OBA 还具有其他优点如将业务数据引入日常工作环境中 — 通常是通过熟悉 Microsoft Office 应用来实现LOB 系统有时要想全面掌握是颇为困难(这还是婉转说法)以熟悉工具为构建基础有助于减少相应培训成本

  可使用以下 4个核心部件构建有效 OBA:LOB 系统、自定义 Office 客户端应用、Microsoft Office SharePo® Server (MOSS) 2007 以及将其他 3部分结合起来服务也可将其他产品(如 Exchange Server 或 Office Communications Server (OCS))绑定到 OBA 中来扩大其范围和功能Visual Studio® Tools for Office (VSTO) 还提供内置功能来帮助快速构建解决方案

  例如可创建 Excel® 服务 Web 部件来指向 Excel 2007 电子表格中数据从而使开发人员可在 SharePo 中构建商业智能视图或者通过将 Visual Studio Tools for Office (VSTO) 自定义集成到 SharePo这样用户可直接从文档库自定义模板或文档从而可提供丰富客户端自定义

  这种特定类型集成具有很多优点如以 Office 客户端应用功能集为构建基础(因此不必在应用中重新生成此功能集)、有效管理和部署文档或模板集(VSTO 自定义)以及允许在集中存储和管理数据同时能在工作流驱动协作环境中操作数据

  本文将重点介绍提到第 2个和第 3个优点:构建文档级 VSTO 自定义和将其和 SharePo内容类型相集成这两个优点组合起来后可在客户端上利用 Office 平台丰富用户功能同时将在客户端上捕获数据无缝扩展到企业

  我将特别为您展示如何创建、部署和保护 VSTO 文档级解决方案(它们使用通过自定义操作窗格绑定到集中管理数据 Microsoft Word 内容Control控件)然后我将展示如何在 SharePo 中创建内容类型最后展示如何将内容类型映射到自定义 VSTO 文档级解决方案

  VSTO 自定义基础知识

  请注意可构建两种 VSTO 加载项个(将在本文中介绍)是文档级解决方案 — 实质上是仅出现在特定文档或模板中自定义第 2个(本文没有介绍)是应用级加载项 — 实质上是每次打开宿主应用时会出现自定义

  由于 OBA 常常和流程相关因此我准备针对 Word 创建个非常简单 VSTO 自定义(它是更广泛采购订单 (PO) 流程个小部件)为便于本文讨论此流程包括 3个关键步骤:针对客户申请工作创建个 PO、从采购订单生成个工作介绍说明 (SOW)以及在完成工作时生成张发票当然具体 PO 流程可能有所区别但它们都是本文中举例基本组成部分

  在此方案中还假设公司使用 LOB 系统来集中管理数据(如工作或客户详细信息)为便于本文讨论(并为简单起见)我将使用 SQL Server® 连接;但是在真正实施中可使用 Windows® Communication Foundation (WCF) 服务或 Web 服务来连接 LOB 系统

  本文将重点介绍流程中开具发票这过程为此我将创建个自定义发票它使用集中管理数据并且随后和 SharePo 相集成接着考虑如何构建和集成流程中其他步骤并针对 SharePo自定义发票构建个工作流

  但是在开始编码的前您可能希望使用个自定义发票文档或模板如图 1 所示我创建了个非常简单客户发票它仅具有基本信息没有太多修饰

将 VSTO 和 SharePo<img src='/icons/70577int.gif' /> 内容类型相集成   图 1客户发票文档

  创建文档的后就可开始有趣工作:构建文档级自定义为此使用 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) 用户Control控件可从“工具箱”拖动Control控件并将它们放到文档中甚至是将事件添加到文档中

  Visual Studio 为您创建个项目外壳它将自定义文档用作项目核心部件通过使用创建项目外壳我向发票文档添加了两个主要自定义然后在文档后面添加了些代码来处理客户数据具体来说我是向文档添加了些 Word 内容Control控件然后创建个自定义操作窗格来管理内容Control控件中加载数据视图

  图 2 显示了以设计模式打开文档时项目视图在“工具栏”窗格中显示有 Word Control控件 — 可将这些 Word 内容Control控件拖到文档表面我已将它们添加到整个文档中在图 2 中文本“Click here to enter text.”指出了我已添加到文档内容Control控件对于本项目我使用是“丰富文本内容Control控件”可利用它来更加灵活地控制文本显示和格式还可添加其他类型Control控件(如图像、日期挑选器或组合框)

将 VSTO 和 SharePo<img src='/icons/70577int.gif' /> 内容类型相集成   图 2编辑 VSTO 自定义文档

  将内容Control控件添加到文档表面后接下会希望将数据源集成到项目中在 OBA 上下文中这可能意味着将服务集成到项目中然后让服务中成员能从 LOB 系统读取数据或将数据写入 LOB 系统中为简便起见我将把 SQL Server 数据库用作举例 LOB 系统数据源是名为 PODetails 包括列有 PO ID(主键)、客户名称、地址和联系人、PO 详细信息以及 PO 总金额

  通过使用“Add New Data Source Wizard”(添加新数据源向导)(“Data”(数据)|“Add New Data Source”(添加新数据源)|“New Connection”(新建连接))即可将 PODetails 数据用于我解决方案此向导提示输入集成到项目中然后为项目提供个默认连接

  创建用户Control控件

  现在创建将位于操作窗格内用户Control控件(请参阅图 3)此用户Control控件包括 6个具有标签字段和 4个按钮Control控件使用数据绑定属性将每个字段绑定到数据库表中个记录这些按钮用于将数据从 SQL Server 加载到Control控件中前后浏览数据以及将选定数据添加到自定义发票文档内容Control控件中

将 VSTO 和 SharePo<img src='/icons/70577int.gif' /> 内容类型相集成   图 3客户 PO 信息用户Control控件

  创建用户Control控件后向每个按钮Control控件添加事件对于加载数据事件添加以下代码:

CustomerInvoice {
 public partial CustomerDataFilterControl : UserControl {
  private void btnLoadPOData_Click(object sender, EventArgs e) {
   CustomerInvoice.PODataDataSetTableAdapters.
    PurchaseOrderDetailsTableAdapter poAdapter =
    CustomerInvoice.PODataDataSetTableAdapters.
    PurchaseOrderDetailsTableAdapter;
   poAdapter.Fill(this.pODataDataSet.PurchaseOrderDetails);
  }
 }
}


  另设计为在核心加载项类 StartUp 思路方法工作期间(在宿主应用加载集时执行)加载数据

  还添加了几个事件来负责前后浏览数据因此用户可通过单击按钮元素来在表中客户数据间移动为此针对绑定源使用 MovePrevious 和 MoveNext 思路方法:

CustomerInvoice {
 public partial CustomerDataFilterControl : UserControl {
  private void btnDataPrevious_Click(object sender, EventArgs e) {
   purchaseOrderDetailsBindingSource.MovePrevious;
  }
  private void btnDataNext_Click(object sender, EventArgs e) {
   purchaseOrderDetailsBindingSource.MoveNext;
  }
 }
}


  为将数据添加到内容Control控件我使用直接思路方法来从每个用户Control控件文本框 Text 属性读取系列串变量然后将这些串用作参数并设置文档中对应内容Control控件每个 Text 属性图 4 介绍说明了这举例技术

将 VSTO 和 SharePo<img src='/icons/70577int.gif' /> 内容类型相集成Figure4将数据添加到 Word 文档

CustomerInvoice {
 public partial CustomerDataFilterControl : UserControl {
  private void btnAddData_Click(object sender, EventArgs e) {
    companyName = txtCompanyName.Text;
    purchaseOrder = txtPONum.Text;
    workDetails = txtPODetails.Text;
    companyAddress = txtAddress.Text;
    contactPerson = txtContact.Text;
    poTotal = txtTotal.Text;
   addDataToWCCs(companyName, purchaseOrder, workDetails,
    companyAddress, contactPerson, poTotal);
  }
 public void addDataToWCCs( cmpyName, poNum,
    poDetails, address, contact, total) {
   Globals.ThisDocument.wccCustomerName.Text = cmpyName;
   Globals.ThisDocument.wccCustomerAddress.Text = address;
   Globals.ThisDocument.wccCustomerContact.Text = contact;
   Globals.ThisDocument.wccWorkDescription.Text = poDetails;
   Globals.ThisDocument.wccWorkItem.Text = poDetails;
   Globals.ThisDocument.wccPurchaseOrderNum.Text = poNum;
   Globals.ThisDocument.wccPurchaseOrderTotal.Text = total;
   Globals.ThisDocument.wccTotalCharges.Text = total;
  }
 }
}


  您可能已注意到内容Control控件有多个重复串变量赋值这是设计使然但由于在您解决方案中个给定发票可能有多个 PO 工作项因此第 2个总额(在我举例中指定给 wccTotalCharges)可能希望将串变量视作十字制数并且来将其汇总成发票总金额对于第 2个工作详细信息内容Control控件 (wccWorkItem)个思路方法是让表有个简短介绍说明让详细信息有个更长介绍说明为简便起见我在两个内容Control控件间重用

  我使用内容Control控件设计解决方案有以下 3个原因内容Control控件非常适合于将数据绑定到 Word 文档(并且非常稳定)第 2可锁定Control控件内容从而使用户无法删除Control控件或编辑Control控件中内容最后可象处理 VSTO 项目中其他对象样处理Control控件例如在图 4 中注意是使用 Globals 来访问每个内容Control控件 Text 属性它仅是可管理多个属性中图 5 展示是通过编程方式锁定内容Control控件因此用户无法删除或编辑Control控件

将 VSTO 和 SharePo<img src='/icons/70577int.gif' /> 内容类型相集成Figure5锁定内容Control控件

public void lockAllContentControls {
 Globals.ThisDocument.wccCustomerName.LockContentControl = true;
 Globals.ThisDocument.wccCustomerAddress.LockContentControl = true;
 Globals.ThisDocument.wccCustomerContact.LockContentControl = true;
 Globals.ThisDocument.wccWorkDescription.LockContentControl = true;
 Globals.ThisDocument.wccWorkItem.LockContentControl = true;
 Globals.ThisDocument.wccPurchaseOrderNum.LockContentControl = true;
 Globals.ThisDocument.wccPurchaseOrderTotal.LockContentControl = true;
 Globals.ThisDocument.wccTotalCharges.LockContentControl = true;
}


  此时构建并运行解决方案结果应如图 6 所示在此声明:我设计还没有利用所有可用 VSTO 功能例如还可使用功能区设计器来扩展功能区或使用 WPF Control控件来增强操作窗格中数据可视效果(如需将 WPF 用于 VSTO 操作窗格举例请参阅 msdn2.microsoft.com/magazine/cc163292.aspx)

将 VSTO 和 SharePo<img src='/icons/70577int.gif' /> 内容类型相集成   图 6处于调试模式 VSTO 自定义

  设计就谈到这里接下来是项更为重要任务将此集放入共享环境最终由于 PO 流程涉及到许多人因此我希望确保此集处于个安全共享环境中但首先我将部署并确保自定义安全以便员工可从 SharePo 中使用它

  部署和安全性

  执行进步操作的前右键单击解决方案并选择“清理解决方案”它会从开发环境中删除所有版次还希望确保已为 VSTO 自定义创建个文档库 — 本文稍后会用到它要创建文档库只需导航到 SharePo 站点并单击“文档中心”|“层次结构”|“创建”|“文档库”需提供些详细信息来介绍说明文档库然后单击“确定”创建文档库后在部署和保护 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 项目时右键单击项目并选择“属性”在“项目属性”视图“构建”选项卡中确保将输出路径设为刚为项目创建共享在我举例中它是 mossCustomerInvoice现在单击“发布”选项卡并将“Publishing Folder Location”(发布文件夹所在位置)和“Installation URL”(安装 URL)设置为此共享(请参阅图 7)同样对于我来说是 mossCustomerInvoice单击“Publish Now”(立即发布)按钮成功将 VSTO 项目发布到共享后可关闭项目

将 VSTO 和 SharePo<img src='/icons/70577int.gif' /> 内容类型相集成   图 7发布 VSTO 自定义

  此时项目已发布到安装位置但它在 Word 中还不是个受信任为使其成为受信任需将文档位置(存储在发布文件夹位置)添加到 Word 信任中心

  打开 Word 并单击 Office 按钮(文档左上角大圆形按钮)单击菜单底部“Word 选项”按钮并从左边窗格中选择“信任中心”然后单击“信任中心设置”按钮并从左边窗格中选择“受信任位置”(请参阅图 8)选中“Allow Trusted Locations _disibledevent=>   图 8将自定义添加到 Word 信任中心

  还需添加用户将在其中使用此 VSTO 自定义 SharePo 文档库位置(例如 moss.litware.com/Docs/CustomerInvoice)添加发布和 SharePo 位置后连续单击两次“确定”然后退出 Word

  还需配置浏览器受信任站点首先打开 Internet Explorer® 并单击“工具”|“Internet 选项”然后单击“安全”选项卡选择“受信任站点”并单击“站点”按钮可添加运行 VSTO 站点(例如在本例中为 moss.litware.com)并确保取消选中“要求服务器验证”

  现在通过导航到发布共享(如 mossCustomerInvoice)并打开文档(在本例中为 CustomerInvoice.docx)可测试 Word 文档无论在 VSTO 项目中添加了何种自定义它们都应能正常运行但此时您不希望保存任何内容因此可关闭文档不保存最后件事是创建个新 SharePo 内容类型并将其链接到自定义文档

  新建内容类型

  内容类型是 Windows SharePo Services (WSS) 中种类型定义可用于定义列表中项或文档库中文档行为可创建个自定义内容类型将它映射到个文档库(该文档库使用在本文前面创建自定义模板)

  将内容类型映射到自定义 VSTO 集实质上包括 3个简单步骤步是在 SharePo 中实际创建内容类型第 2步是将该内容类型和自定义 VSTO 集相关联第 3步是将新内容类型添加到 SharePo 文档库

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: