演练:在声明性解决方案中使用 BCS 可重用代码组件

通过显示自定义外部数据部件和代码操作并使用自定义功能区管理器,可以进一步扩展中间声明性 Outlook 解决方案。SharePoint 2010 SDK 包括 代码示例:AdventureWorks2008 声明性 Outlook 解决方案的可重用组件

上次修改时间: 2010年9月2日

适用范围: SharePoint Server 2010

此示例定义一个自定义功能区管理器、一个自定义外部数据部件和一个代码操作。有关创建这些代码组件的步骤,请参阅本主题中的在声明性 Outlook 解决方案中创建和使用可重用代码组件一节。本主题的第一部分说明如何在中间声明性 Outlook 解决方案中引用和使用现有代码组件。第二部分包含用于在中间声明性 Outlook 解决方案中创建和使用可重用代码组件的步骤。

重要注释重要说明

在打包解决方案之前,必须将定义这些代码组件的 Microsoft .NET Framework 程序集复制到声明性解决方案的 Solution Artifacts 文件夹中。

概览:在中间声明性 Outlook 解决方案中使用现有代码组件

使用自定义代码操作

在 OIR.config 文件中,可以使用自定义代码操作,如以下示例所示。

<Declarative:CodeMethodAction Name ="CreateTaskAction" MethodType ="Custom" 
  MethodName="NewCustomVisitTask" 
  QualifiedTypeName="ContosoCustomer.CustomCodeAction, ContosoCustomer, 
  Version=1.0.0.0, Culture=neutral, PublicKeyToken=e355b6f7ef818b12">
  <Declarative:Parameters>
    <Declarative:ConstantParameter Name="Para1" 
                                   Value="EditRelatedOrderHeader" 
                                   ValueType="System.String"/>
  </Declarative:Parameters>
</Declarative:CodeMethodAction>

在布局中使用自定义外部数据部件

在布局文件中,可引用自定义外部数据部件,如以下代码所示。

<?xml version="1.0" encoding="utf-8" ?>
<Container ContainerType="Stack" 
  xmlns="https://schemas.microsoft.com/office/2009/05/BusinessApplications/Layout" 
  xmlns:loc="https://schemas.microsoft.com/office/2009/05/BusinessApplications/Localization">
  <CustomProperties />
  <Children>
    <OBPart DataSourceName="PrimaryEntityNameInContext" PartType="Custom" 
            Text="Related Order" FillParent="true" 
            QualifiedTypeName="ContosoCustomer.CustomOBPart, ContosoCustomer, 
            Version=1.0.0.0, Culture=neutral, PublicKeyToken=e355b6f7ef818b12">
      <CustomProperties />
    </OBPart>
  </Children>
</Container>

使用自定义功能区管理器

在 OIR.config 文件中,指定自定义功能区管理器,如以下代码所示。

<SolutionSettings SolutionId="ContosoSalesManager" 
                  SolutionDisplayName="Contoso Sales Manager" 
                  SolutionVersion="1.0.0.0" 
                  xsl:type="Declarative:DeclarativeSolutionSettings" 
                  CustomRibbonManager="ContosoCustomer.CustomRibbonManager, 
                  ContosoCustomer, Version=1.0.0.0, Culture=neutral, 
                  PublicKeyToken=e355b6f7ef818b12"/>

在声明性 Outlook 解决方案中创建和使用可重用代码组件

本节包含用于创建和使用可重用代码组件的步骤,即一个自定义代码操作、一个自定义外部数据部件和一个自定义功能区管理器。若要在此演练中创建解决方案,您必须先按照演练:创建中间声明性 Outlook 解决方案中的步骤执行操作以创建将在此演练中修改的解决方案项目。

以下是此演练中使用的代码段:

先决条件

创建、生成和部署解决方案

  1. 在 Visual Studio 2010 中创建一个 C# 类库项目,然后将其命名为 ContosoCustomer。

  2. 向您的项目中添加以下引用:

    • Microsoft.Office.Interop.Outlook

    • Office

    • System.Windows.Forms

  3. 从 Office 安装文件夹(路径通常为 C:\Program Files\Microsoft Office\Office14\,但在您的环境中可能有所变化)中添加特定于 Microsoft Business Connectivity Services (BCS) 的以下程序集:

    • Microsoft.BusinessData.dll

    • Microsoft.Office.BusinessApplications.Runtime.dll

    • Microsoft.Office.BusinessApplications.RuntimeUi.dll

  4. 向您的项目中添加一个新的类文件,并将其命名为 CustomCodeAction.cs。

  5. 使用代码段:自定义代码操作中的代码替换 CustomCodeAction.cs 中的代码。

  6. 向您的项目中添加一个新的类文件,并将其命名为 CustomRibbonManager.cs。

  7. 使用代码段:自定义功能区管理器中的代码替换 CustomRibbonManager.cs 中的代码。

  8. 向您的项目中添加一个新的用户控件,并将其命名为 CustomOBPart.cs。

  9. 查看 CustomOBPart.cs 文件的代码,并将其内容替换为代码段:自定义外部数据部件的第一个示例中的代码。

  10. 使用代码段:自定义外部数据部件中的第二个示例中的代码来替换 CustomOBPart.Designer.cs 的代码。

  11. 对解决方案进行签名。

    在项目属性中的"签名"选项卡上,选择"为程序集签名",然后创建一个密钥文件。您可选择任意密钥文件名和密码。

  12. 生成解决方案。

    这将在项目文件夹的 bin\Debug(或 bin\Release)文件夹中生成程序集。

  13. 将程序集复制到解决方案项目文件夹中。该程序集是在上一步骤中生成解决方案时生成的。

  14. 从解决方案项目文件夹打开 OIR.config 文件,并在 OutlookContactCustomer 的 ContextDefinition 结束标记之前添加以下自定义代码操作 XML。

    在按照演练:创建中间声明性 Outlook 解决方案中的步骤执行操作之后,您应有一个解决方案项目文件夹。

    <Declarative:CodeMethodAction Name ="EditRelatedOrderHeaderAction" 
                                  MethodType ="ShowTaskpaneLayout">
      <Declarative:Parameters>
        <Declarative:ConstantParameter Name="Para1" 
                                       Value="EditRelatedOrderHeader" 
                                       ValueType="System.String"/>
      </Declarative:Parameters>
    </Declarative:CodeMethodAction>
    <Declarative:CodeMethodAction 
      Name ="CreateTaskAction" MethodType ="Custom" 
      MethodName="NewCustomVisitTask" 
      QualifiedTypeName="ContosoCustomer.CustomCodeAction, ContosoCustomer, 
      Version=1.0.0.0, Culture=neutral, PublicKeyToken=e355b6f7ef818b12">
    </Declarative:CodeMethodAction>
    

    编辑自定义代码操作 XML。在 CodeMethodAction 元素中,将 QualifiedTypeName 属性的值替换为在上一步骤中生成解决方案时生成的程序集的 CustomCodeAction 类型的程序集限定名。

  15. 从解决方案项目文件夹打开 Ribbon.xml,并为 tabs 元素内的 CreateTaskAction 添加以下选项卡和功能区按钮定义。

    <tab idMso="TabContact">
      <group id="ContosoCustomerSalesGroupID"
             label="Contoso Customer Sales" getVisible="GetVisible" tag="Context[OutlookContactCustomer.ContosoCustomerSalesGroupID]">
        <button id="NewCustomerVisitTaskButton"
                     size="large"
                     label="New Customer Visit Task"
                     onAction="OnAction"
                     image="TaskItem.bmp"
                     getEnabled ="GetEnabled"
                     tag="Action[OutlookContactCustomer.CreateTaskAction]"
                      />
      </group>
    </tab>
    
  16. 在 Ribbon.xml 中,为 ContosoSalesSolutionTabID 选项卡的 ContosoCustomerSalesGroupID 组内的 EditRelatedOrderHeaderAction 添加以下功能区按钮定义。

    <button id="EditRelatedOrderHeaderButton"
            size="large"
            label="Edit Customer Orders"
            onAction="OnAction"
            image="ArrowGreen.jpg"
            getEnabled ="GetEnabled"
            tag="Action[OutlookContactCustomer.EditRelatedOrderHeaderAction]"
    />
    
  17. 将 CustomRibbonManager 属性添加到 OIR.config 文件中的 SolutionSettings 元素,如以下 XML 示例所示。

    <SolutionSettings 
      SolutionId="ContosoSalesManager"
      SolutionDisplayName="Contoso Sales Manager"
      SolutionVersion="1.0.0.0"
      xsl:type="Declarative:DeclarativeSolutionSettings"
      CustomRibbonManager="ContosoCustomer.CustomRibbonManager, ContosoCustomer, 
      Version=1.0.0.0, Culture=neutral, PublicKeyToken=e355b6f7ef818b12"/>
    
  18. 将 CustomRibbonManager 属性的值替换为在上一步骤中生成解决方案时生成的程序集的 CustomRibbonManager 类型的程序集限定名。

  19. 在解决方案项目文件夹中创建一个名为 EditRelatedOrderHeader.xml 的文件,并向该文件添加以下自定义外部数据部件 XML 示例。然后,将该文件保存到解决方案项目文件夹中。

    <?xml version="1.0" encoding="utf-8" ?>
    <Container ContainerType="Stack"
      xmlns="https://schemas.microsoft.com/office/2009/05/BusinessApplications/Layout"
      xmlns:loc="https://schemas.microsoft.com/office/2009/05/BusinessApplications/Localization">
      <CustomProperties />
      <Children>
        <OBPart DataSourceName="PrimaryEntityNameInContext" PartType="Custom"
                Text="Related Order" FillParent="true"
                QualifiedTypeName="ContosoCustomer.CustomOBPart, ContosoCustomer, 
                Version=1.0.0.0, Culture=neutral, PublicKeyToken=e355b6f7ef818b12">
          <CustomProperties />
        </OBPart>
      </Children>
    </Container>
    
  20. 编辑 EditRelatedOrderHeader.xml 文件。在 OBPart 元素中,将 QualifiedTypeName 属性的值替换为在上一步骤中生成解决方案时生成的程序集的 CustomOBPart 类型的程序集限定名。

  21. 向 OIR.config 文件中添加布局。在 OIR.config 文件中的 Layouts 元素内,将以下代码添加到 OutlookContactCustomer 的 ContextDefinition 结束标记之前。

    <Declarative:Layout Name="EditRelatedOrderHeader" 
                        LayoutFileName="EditRelatedOrderHeader">
    </Declarative:Layout>
    
  22. 打包并部署解决方案。

    1. 启动 BCS 解决方案包装工具(该链接可能指向英文页面)

    2. 提供解决方案的名称和版本,然后为解决方案类型选择"Outlook Intermediate Declarative Solution"。

    3. 选择解决方案项目文件夹作为"Source Folder Path"。

    4. 在您的本地计算机上创建一个文件夹,并选择它作为"Output Folder Path"。

    5. 单击"Package"以打包解决方案。

    6. 单击"Deploy"以部署解决方案。

备注

前面提到的 XML 示例已经分别为 CodeMethodAction、CustomRibbonManager 和 OBPart XML 值包含 CustomCodeAction、CustomRibbonManager 和 CustomOBPart 类的程序集限定名。但由于 PublicKeyToken 值在对该解决方案的程序集进行签名后会有所不同,因此您需要更新程序集限定名的值。此外,如果使用一个不同的命名空间名称或类名称,则这些程序集限定名将不同且必须进行更新。