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

信息桥 1.5 演练 - 第 2 部分

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.43/5 (6投票s)

2005 年 4 月 2 日

28分钟阅读

viewsIcon

69725

downloadIcon

129

IBF 1.5 高级功能一览。

目的

本文的目的是通过结合信息桥框架(IBF)的一些高级功能,扩展之前的第一部分演练。在第一部分中,我简要介绍了 IBF 以及其发展成为产品的原因。我还创建了一个演示 IBF 1.5 基本功能的示例演练。第一部分应该为您创建更强大的 IBF 应用程序提供了一个良好的起点。

第二部分将在此基础上进行构建,使用户能够从自定义智能标签执行特定操作,例如:获取所有客户,或查看客户详细信息。我们还将允许用户从 IBF 搜索任务窗格搜索客户。最后,我们将创建一个标准的 Word 模板并附加一个 IBF 架构,允许用户直接从 IBF 任务窗格查看、更新和添加客户信息。涉及的任务如下所示:

  1. IBF 搜索窗格。
  2. 自定义智能标签操作和菜单项。
  3. Microsoft Word 附加架构。
  4. 从 IBF 任务窗格使用 Office。
  5. 客户端部署。

回顾

回顾一下,在第一部分中,我们创建了一个简单的 IBF 解决方案,使用户能够在 Microsoft Word 中检索 Northwind 客户的详细信息。从 Word 文档中,我们可以输入任何 Northwind 客户 ID,然后从智能标签获取其相应的详细信息。完成此操作涉及的任务如下所示:

  1. 创建 .NET IBF 解决方案。
  2. 创建符合 IBF 标准的 Web 服务。
  3. 使用 1.5 元数据指导任务窗格执行以下操作:
    1. 导入符合 IBF 标准的 Web 服务。
    2. 创建您的第一个实体和操作。
    3. 创建 .NET Windows 窗体区域。
  4. 测试您的 IBF 解决方案。
  5. 创建基本智能标签识别器。
  6. 在 Word 中测试您的应用程序。

假设

在我继续创建高级信息桥解决方案之前,有几个先决条件,我假定您已经熟悉并已在开发环境中进行了配置:

  1. 您熟悉 Microsoft Visual Studio .NET 2003 开发平台。
  2. 您可以访问 SQL Server Northwind 数据库,并熟悉数据库结构。
  3. 您已在服务器上安装并配置了信息桥 1.5 服务器,以及 IBF 1.5 SDK。
  4. 您已完整安装 Microsoft Office 2003。
  5. 您理解以下概念:Web 服务、.NET C#、.NET Windows 控件开发、Microsoft Office 2003 Word、Excel 和 Outlook 以及 Office 智能标签。
  6. 您使用过 XML 和 XSLT。
  7. 您知道如何使用强名称对程序集进行签名。
  8. 您的系统上已安装智能标签 SDK。
  9. 您已下载本文顶部的图片和列表。
  10. 您已阅读示例演练的第 1 部分。
  11. 您已安装示例演练的第 1 部分,并且它在您的系统上运行正常。

演练

本演练将为您提供使用新发布的 1.5 框架创建完整 IBF 解决方案的说明。这是示例的第二部分,因此我将基于第一部分的示例解决方案进行构建。

与第一部分一样,我将围绕标准的 Northwind 数据库构建应用程序。我将使用这个模型,因为我认为大多数人都熟悉数据库模式,如果您不熟悉,Microsoft 提供了许多关于它的文档。

IBF 搜索窗格

IBF 搜索区域是 IBF 任务窗格上的一个特定窗口,允许用户从任何业务线 (LOB) 应用程序搜索和检索结果。此窗格专为搜索功能而设计。它将允许您选择搜索条件、输入搜索参数并显示结果。要查看此区域,请导航到 IBF 任务窗格上的相应选项卡。(参见图 1。)

对于本次演练,我希望用户能够导航到 IBF 搜索窗格,输入客户 ID,然后检索详细信息。在第一部分中,我们创建了用于实现此目的的操作、方法和端口。我们只需要创建一个特定的搜索端口和转换,以便 IBF 知道这是一个应该在搜索窗格上执行的功能。

要创建适当的元数据,我将使用 IBF 元数据指导窗口启动向导,该向导将指导我们完成这些步骤。向导步骤如下所示:

  1. 打开在第 1 部分中创建的 IBFDemo 示例解决方案。
  2. 单击元数据指导窗口上的“搜索定义向导”超链接。
  3. 向导的第二个屏幕允许我们选择或创建一个新的元数据解决方案。由于我们已经创建了 NorthwindIBFSolution,我们将使用该解决方案来容纳我们的搜索范围。(参见图 2。)
  4. 在第三个屏幕上,我们将选择用于此搜索的 View_Locator。由于要求是输入 CustomerID,然后检索结果,我们将使用我们已创建的 Customer_View。使用以下参数填充向导:
    • 元数据范围 – NorthwindIBF
    • 实体 – Customers
    • 视图 – Customre_View
    • 视图定位器 – Xsd.CustomerID
    • 选择操作选项 - 输入上下文类型
  5. 第四个向导屏幕为我们提供了操作的输入模板。这应该会自动为您填充,因为我们已经在 View_Locator 中将其定义为 CustomerID 架构。(参见图 3。)
  6. 对于第五个屏幕,我们将提供搜索结果的显示位置和类别。使用类别是为了,如果定义了多个搜索范围,用户可以使用相同的 IBF 任务窗格搜索多个业务线实体。搜索结果的位置可以是三个位置之一:SearchRegionSearchPageReferencePage。对于本次演练,在搜索类别标题中输入“Northwind 客户”,并选择 SearchPage 作为结果位置。(参见图 4。)
  7. 我们需要填充的最后一个向导屏幕是输入此查询的搜索条件。此对话框允许您添加多个搜索条件以获得您想要的确切结果。(参见图 8。)为此,我们必须向 IBF 提供几条信息:
    • 搜索条件的标签和描述。
    • 将选择数据的实际 XPath。
    • 选择的类型,列表或简单文本框。
    • 此字段是否为必填项。

    点击“添加条件”按钮。此命令允许我们为查询指定上述信息。(参见图 7。)

    • 标题名称 - 客户 ID
    • 描述 – 搜索并检索 Northwind 客户的详细信息。
    • XPath – 单击数据输入字段旁边的省略号。这将弹出 XPath 创建器。此对话框将自动填充我们查询的适当输入参数。单击 CustomerID 节点并单击“确定”。(参见图 6)
    • 控件类型 – 文本
    • 必需 – 是(勾选此选项。)
  8. 点击通过向导的最后一系列屏幕,并关闭向导。

这完成了我们新搜索元数据的创建。您会注意到信息桥范围中添加了两个元数据元素:端口和转换。要测试搜索,请将元数据发布到 IBF 服务,然后创建一个新的 Word 文档,并通过选择“工具”-->“信息桥”打开信息桥任务窗格。信息桥任务窗格出现后,您会注意到已定义了一个新的搜索范围,并且您现在可以输入客户 ID。点击“提交”按钮后,该客户的详细信息将显示出来。就是这么简单。通过简单地在向导中输入信息,向导创建了相应的元数据,搜索现在处于活动状态。(参见图 1。)

注意:重要的是要注意搜索端口和转换将位于信息桥元数据范围中。这是所有应用程序共享的通用 IBF 范围。

自定义智能标签操作和菜单项

我想要探讨的下一个领域是创建自定义智能标签菜单项的能力。正如您在第 1 部分中看到的,当我们为 CustomerID 创建识别器时,会出现一个默认的智能标签菜单。此菜单包含标准 IBF 菜单项“显示详细信息”。通常,您会希望此菜单有一个更具描述性的名称,例如“显示 Northwind 客户详细信息”。实现此功能相当简单,IBF 通过提供一个接口和元数据来帮助您完成此操作。

下面,我将引导您完成创建此自定义菜单以显示客户详细信息的步骤。

  1. 在示例演练解决方案中,向 IBFNorthwind_ST 项目添加一个新类。将新类重命名为 IBFNorthwindSelCustomerAction
  2. 导入 IBF 和智能标签命名空间。(参见列表 1。)使该类从 IActionHandler 接口继承。此接口实现以下方法,这些方法必须由操作处理程序使用:
    • GetMenuItems – 获取识别到相应术语时要显示的菜单项。
    • Initialize – 此方法用于设置操作句柄。
    • InvokeMenuItem – 此方法执行用户从智能标签菜单中选择的特定操作。
  3. 下一步将是创建实际的自定义菜单项。为此,我们需要创建一个从 IBF IActionHandlerMenuItem 接口继承的新类。该类将包含菜单项的 ID 和标题。在此示例中,在 IBFNorthwindSelCustomerAction 类中添加一个密封类,并使其从 IActionHandlerMenuItem 继承。完成此操作后,您必须实现标题和 ID 属性以及将初始化这两个属性的构造函数。(参见列表 2。)
  4. 现在我们将创建 GetMenuItems 方法。此方法将返回您希望智能标签在识别某些文本时显示的全套菜单项。在此方法中,我们将创建一个菜单项数组,然后添加我们上面创建的菜单项密封类。(参见列表 3。)
  5. 现在我们只需要编写代码,以便在用户点击智能标签菜单时执行相应的操作。为此,我们将创建代码来确定选择了哪个菜单项。此代码将添加到 InvokeMenuItem 方法中。(参见列表 4。)接下来,我们将创建一个自定义方法来调用我们的特定 ShowCustomerDetails,它将执行特定的 IBF 上下文以启动 Customer_View。(参见列表 5。)
  6. 最后一步是添加 IBF 元数据以显示自定义菜单项。为此,请按照以下步骤操作:
    1. 如果元数据浏览器尚未可见,请将其打开。
    2. 在“InformationBridge”元数据范围中,展开端口节点。找到 GenericActionHandler 端口,右键单击并编辑它。修改 XML 数据模板以反映自定义智能标签命名空间和类名。对于此示例,请使用以下 XML。修改的元素已突出显示。
      <msibf:GenericActionHandler
         TypeName="IBFNorthwind_ST.IBFNorthwindSelCustomerAction" 
         xmlns:msibf=
           "http://schemas.microsoft.com/InformationBridge/2004">
       <YourInitializationData>
         xmlns=
          "http://schemas.microsoft.com/InformationBridge/2004/Metadata"
       </YourInitializationData>
      </msibf:GenericActionHandler>
    3. 最后,我们必须创建自定义操作以启动自定义智能标签菜单。为此,请导航到“InformationBridge”元数据范围中的以下节点:Entities --> GenericSmartTags --> GenericActionHandlers --> Actions。
    4. 双击“ [添加操作.]”节点。在此对话框中,我们将创建一个新操作。设置以下属性并单击“确定”。
      • 名称NorthwindCustomerDetailsAction
      • 类型EnterContext
      • 参数架构MSIBF.GenericActionHandler
      • 顺序执行未选中

      注意:如果要将操作链接在一起,则使用顺序执行。如果您有多个要按顺序一起运行的操作,则可以选中此选项。由于这是我们唯一要执行的操作,因此我们不需要序列。(参见图 9)

    5. 在新添加的操作上,双击该操作以打开操作设计器。我们只需将 LoadActionHandler 操作从操作节点拖放到操作设计器,并将转换实例设置为 GenericActionHandler。(参见图 10。)
  7. 现在我们准备测试新的智能标签菜单项。保存解决方案并发布您的元数据。关闭所有 IBF 兼容应用程序并打开一个新的 Microsoft Word 文档。在文档中输入“LETSS”。识别器应该已经识别出文本并用紫色点将其下划线。将鼠标悬停在文本上并单击智能标签。您现在应该会看到自定义菜单项“显示 Northwind 客户详细信息”。如果您单击此菜单项,它将弹出 IBF 任务窗格并显示相应的客户详细信息。(参见图 11。)

至此,创建 IBF 中自定义智能标签菜单项的演练就完成了。总而言之,我们创建了一个继承自 IActionHandler 接口的新类。然后,我们添加了一个继承自 IActionHandlerMenuItem 接口的子类。我们相应地设置了属性和方法,以显示正确的菜单项和上下文。我们添加了 IBF 元数据,就是这样。接下来,我将引导您完成 IBF 附加架构文档的创建。

IBF 附加架构 – 默认 HTML 区域

附加架构是 IBF 最强大的功能之一。这之所以可能,是因为在 Office 2003 中,您可以将架构 (XSD) 附加到文档。一旦架构附加到文档,用户就可以在预定义的 XML 元素中输入特定的业务信息,从而使数据收集、格式化和验证更加容易。例如,如果您的架构需要两个子节点,但只输入了一个,Word 将会警告您。这些业务规则将在您的文档中运行,而无需编写任何 VBA 或自定义 COM 加载项。

IBF 附加架构与将标准 XSD 附加到 Word 文档没有什么不同。唯一的要求是您在架构中指定特定的 IBF 元数据元素,例如元数据范围。下面列出了一个 IBF 附加架构的示例。(这是我们将在演练稍后用于附加到 Word 的架构 – 参见列表 5。)

<?xml version="1.0"?>
<xs:schema targetNamespace="NorthwindIBF" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:att="NorthwindIBF"
    elementFormDefault="qualified" id="NorthwindData">
  <xs:element name="NorthwindsCustomersDocument">
    <xs:complexType mixed="true">
      <xs:all>
        <xs:element name="Customers" type="att:Customers"/>
      </xs:all>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="Customers">
    <xs:attribute name="CustomerID" type="xs:string"/>
  </xs:complexType>
</xs:schema>

如您所见,我们已将 targetNamespace 指定为我们希望此 IBF 架构引用的元数据范围。当您将此架构附加到 Word 文档时(我将在下面详细说明),IBF 将在此元数据范围中启动默认操作。例如,根据上述 XSD,在 NorthwindIBF 元数据范围中,默认实体是 Customers。默认视图是 Customer_View。IBF 将从 IBF 元数据存储库中读取此信息,并自动打开 IBF 任务窗格并运行 GetCustomerDetails_Action

问题在于此默认操作需要一个参数 CustomerID。如果我将特定架构附加到文档,我可能还没有此客户信息,因此我不希望默认的 Customer_View 成为 IBF 运行的第一个操作。我真正想创建的是一个不需要任何参数的默认视图,然后在此默认视图下嵌套特定的 CustomerID 元素。

由于我想创建一个新的默认实体和视图,每次都适用于我的附加架构,因此我将创建一个 HTML 区域来显示欢迎消息。要创建 HTML 区域,请按照以下步骤操作:

  1. 在 Visual Studio 中,在元数据指导窗口上,单击“服务元数据创建向导”超链接。这与我们在第 1 部分中用于创建 Customers 实体的向导相同。我将不详细介绍此向导,如果您需要,请参阅本演练的第 1 部分。现在,只需输入以下参数即可创建一个简单的 Welcome 实体。
    • 屏幕 1 – 选择“NorthwindIBF”元数据范围。
    • 屏幕 2 – 创建一个名为“Welcome”的新实体。默认引用架构将为“(无)”。最后,选中选项将其设为默认实体。
    • 屏幕 3 – 创建一个名为 Welcome_View 的新视图。默认引用架构将为“(无)”。最后,选中选项将其设为默认视图。
    • 屏幕 4 – 点击最后三个屏幕完成向导。
  2. 下一步是创建一个自定义操作来启动 HTML 区域。为此,请按照以下步骤操作:
    1. 接下来,我们将创建一个操作来显示 HTML 区域。导航到“NorthwindIBF”元数据范围中的“Operations”节点。
    2. 双击“[添加操作...]”节点。设置以下参数,其他所有参数保持默认。
      • 名称Northwind.Customer.Welcome
      • 实体 – (无)
      • 操作类型MSIBF.UI.ShowRegion
      • 输入架构MSIBF.Text
      • 输出架构 – (无)
      • 端口 – (无)
    3. 下一步是最重要的一步。这涉及创建 HTML 区域的 XML。为此,请将以下 XML 添加到“XML 属性”文本部分。(参见列表 7)
      <iwb:Region 
          Enabled="true" 
          MetadataScopeName="NorthwindIBF" 
          EntityName="Welcome" 
          xmlns:iwb=
            "http://schemas.microsoft.com/InformationBridge/2004">
        <iwb:RegionProperties 
          RegionName="NorthwindWelcome" 
          Caption="Northwind Customer Maintenance" 
          Description="Northwind Customer Maintenance Application" 
          ShowAs="ExpandedRegion" 
          TypeName=
           "Microsoft.InformationBridge.Framework.UI.Controls.HtmlRegion">
          <iwb:XHTML Height="100">
            <body xmlns="http://www.w3.org/1999/xhtml">
              <div>
                <font color="#00006B" size="3">
                  <strong>Northwind Inc.</strong>
                </font>
              </div>
              <div>
                <strong>
                  <font size="2">
                    Customers Maintenance
                  </font>
                </strong>
              </div>
              <p>
              </p>
              <div>
                <font size="1">This is the 
                    Northwind Customer
                    Maintenance Application.
                </font>
              </div>
            </body>
          </iwb:XHTML>
        </iwb:RegionProperties>
      </iwb:Region>

      此 XML 的关键是 Region 实体和 RegionProperties 实体。Region 属性必须设置为与您的元数据范围和实体匹配。RegionProperties 必须设置名称、标题和描述。然后,在 <iwb.XHTML> 元素中,您可以为您的区域放置任何有效的 HTML。(参见图 12。)

    4. 关闭新操作窗口。
  3. 最后,我们将创建一个自定义操作来调用 HTML 操作。为此,请按照以下步骤操作:
    1. 导航到新 Welcome 实体中的“Actions”节点。NorthwindIBF --> Welcome --> Welcome_View --> Actions。
    2. 双击“[添加操作...]”节点。设置以下参数,其他所有参数均不选中。
      • 名称ShowWelcomeMsg
      • 类型EnterContext
      • 参数架构 – (无)
    3. 单击“确定”以完成新操作的添加。
    4. 现在双击新的 ShowWelcomeMsg 操作以打开操作设计器。
    5. 将新的“Northwind.Customer.Welcome”操作拖放到设计面板上。
    6. 保存并发布元数据。
    7. 测试新动作,查看是否显示了相应的元数据。

    注意:当您测试此操作时,您无需指定任何视图定位器、输入引用或操作参数。正在调用的操作是完全自给自足的。

    现在我们有了一个好的默认实体、视图和区域,我们可以测试将此架构附加到 Word 文档并查看它是否有效。我将引导您完成下面将 IBF 架构附加到 Word 的步骤:

    1. 打开记事本并将列表 5 粘贴到新的文本文件中。这是将启动 IBF 功能的架构。
    2. 将文件保存到本地磁盘,并将其命名为 NorthwindIBF.xsd
    3. 打开一个新的 Word 文档,以便我们可以附加新的架构。
    4. 在 Word 中,单击“工具”菜单下的“模板和加载项…”菜单。当对话框打开时,单击“XML 架构”选项卡。(参见图 13。)此窗口允许您管理可以附加到 Word 文档的所有架构。我们现在需要告诉 Word “NorthwindIBF”架构在哪里。
    5. 点击“添加架构”按钮,浏览到您保存 NorthwindIBF.xsd 文件的位置。
    6. 现在您可以为这个架构起一个别名。我将这个架构命名为“NorthwindIBF”。
    7. 接下来,选择此架构,使其附加到此 Word 文档,然后单击“确定”。
    8. 单击“确定”后,您将看到“XML 结构”任务窗格出现。此窗格允许您从架构中选择实体并将其添加到文档中。您会注意到“NorthwindsCustomersDocument”元素可用于添加到文档中。(参见图 14。)
    9. 您现在可以通过单击选择该元素,它将自动放入 Word 文档中。将此元素添加到 Word 后,IBF 将自动初始化并显示默认实体和视图,在本例中是 HTML 区域。(参见图 15。)

既然我们的附加架构已经工作,并且您已经看到 IBF 如何从 Word 初始化,您可能会问自己;那么传递参数呢?IBF 支持通过允许您在元素中指定属性来传递参数。这些属性将作为参数传递给 IBF 操作。下一节将向您展示如何做到这一点。保存并关闭 Word 文档,因为我们将在下一节中向其添加功能。

IBF 附加架构 – 自定义属性

本演练的这一部分演示了如何将参数从附加架构传递到 IBF。如果您需要将参数传递给 IBF 操作,这很有用。在此示例中,我希望将 CustomerID 从我的附加架构传递给 IBF,以便在 IBF 任务窗格中显示相应的客户详细信息。实现此目的并非易事。这一部分花了我最长的时间才弄清楚。诀窍是准确理解从附加架构传递到 IBF 的内容。然后,将传递到 IBF 的内容转换为 IBF 操作期望的正确格式化输入。您可以使用包含正确 XSL 的端口来完成此转换。

注意:我发现手头有一个 XSL 编辑器来测试 XSL 并确保其正确非常方便。我推荐 XML Spy 或 Stylus Studio XML 专业版。

完整过程包括以下六个步骤:

  1. 创建操作以调用现有动作。
  2. 创建一个端口来调用 XSL 以转换输入。
  3. 创建使用端口的 Transformation 实体。
  4. 创建一个新视图来承载新操作。
  5. 创建附加架构将调用的操作。此操作将调用步骤 1 和 3 中列出的操作和转换。
  6. 验证附加架构是否正确,创建 Word XML 并测试解决方案。

步骤 1

步骤 1 将涉及创建一个简单执行预先存在的动作的操作。由于我们已经有一个获取客户详细信息并显示区域的动作,我们所要做的就是创建另一个调用此动作的操作。在编码术语中,这就像创建一个方法并在其他应用程序或类中重用它。但不同之处在于,它是元数据而不是代码。下面是创建此操作的步骤。

  1. 导航到“添加端口元数据”元素。NorthwindIBF --> Operations --> [添加操作...]。
  2. 双击“[添加操作...]”以打开“添加操作”对话框。
  3. 设置以下参数:(参见图 16。)
    • 名称 - Att.CallShowCustomerDetails_Action – 我使用前缀 Att 来表示此系列实体与附加架构相关。如果您愿意,可以使用任何前缀。
    • 实体 – (无)
    • 操作类型OperationExecuteAction。选择此类型后,需要完成相应的执行操作属性。
    • 参考架构 Xsd.CustomerID
    • 参数架构 – (无)
    • 输出架构 – 此处无需操作。
    • 元数据范围 – NorthwindIBF
    • 实体 Customers
    • 视图 Customer_View
    • 动作 GetCustomerDetails_Action
    • View_Locator Xsd.CustomerID
  4. 正如您通过查看对话框中的参数所看到的那样,此操作仅指向元数据范围中的特定操作。通过使用这种类型的操作,您可以调用任何其他元数据范围、实体、视图等中的任何操作。单击“确定”以添加新操作。

第二步

步骤 2,我们将创建包含 XSL 的端口,用于将传入的 XML 转换为操作期望的适当语法。下面是创建此端口的步骤:

  1. 导航到添加端口元数据元素。NorthwindIBF --> 端口 --> [添加端口...]。
  2. 双击“[添加端口...]”以打开“添加端口”对话框。
  3. 设置以下参数:(参见图 17)
    • 名称 - Att.Xsl.Transform.CustomerID
    • 类型 – 端口文件 XML
    • 端口文件 XML 属性 – 选择单选按钮以将 XML 数据保存到元数据文件。这将直接将 XML 保存到元数据中。您也可以将 XSL 存储在外部文件中,然后引用它。
    • XML – 在文本编辑框中,复制并粘贴以下 XSL:
      <xsl:stylesheet version="1.0" 
         xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
         xmlns:iwb=
           "http://schemas.microsoft.com/InformationBridge/2004" 
         xmlns:att="NorthwindIBF">
        <xsl:template match="/">
          <CustomerID xmlns="CustomerID-Data">
            <xsl:attribute name="CustomerID">
              <xsl:value-of select="/att:Customers/@CustomerID">
              </xsl:value-of>
            </xsl:attribute>
          </CustomerID>
        </xsl:template>
      </xsl:stylesheet>

      让我们仔细看看这个 XSL。所有这个 XSL 所做的,就是获取任何传入的 XML 并将其转换为以下语法:

      <?xml version='1.0' ?>
      <CustomerID 
          xmlns="CustomerID-Data"
          xmlns:iwb=
            "http://schemas.microsoft.com/InformationBridge/2004" 
          xmlns:att="NorthwindIBF" 
          CustomerID=""/>

      这正是 IBF 调用 GetCustomerDetails_Action 所需的。如果您回顾一下本文第 1 部分,获取客户详细信息的 Web 方法期望 CustomerID 架构。此架构就是您上面看到的。区别在于我们希望动态输入 CustomerID 的属性值。为此,我们添加 <xsl:value-of> 和 select 属性。这会查找 <Customers CustomerID=""> 元素和属性,并将 CustomerID 属性中的值替换为 XML 中传入的值。

      为了演示,如果您传入以下 XML

      <att:Customers CustomerID="LETSS" 
          xmlns:att="NorthwindIBF"/>

      到以下 XSL

      <xsl:stylesheet version="1.0" 
          xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
          xmlns:iwb=
            "http://schemas.microsoft.com/InformationBridge/2004" 
          xmlns:att="NorthwindIBF">
        <xsl:template match="/">
          <CustomerID xmlns="CustomerID-Data">
            <xsl:attribute name="CustomerID">
              <xsl:value-of select="/att:Customers/@CustomerID">
              </xsl:value-of>
            </xsl:attribute>
          </CustomerID>
        </xsl:template>
      </xsl:stylesheet>

      您将得到以下 XML 转换

      <CustomerID 
          xmlns="CustomerID-Data" 
          xmlns:iwb=
            "http://schemas.microsoft.com/InformationBridge/2004" 
          xmlns:att="NorthwindIBF" 
          CustomerID="LETSS"/>

      注意 CustomerID 现在是如何填充“LETSS”的。单击“确定”完成“添加端口”对话框。

步骤 3

在此步骤中,我们将创建转换元数据元素,它只是调用端口。下面是创建此转换的步骤:

  1. 导航到“添加转换元数据”元素。NorthwindIBF --> Transformations --> [添加转换...]。
  2. 双击“[添加转换...]”以打开“添加转换”对话框。
  3. 设置以下参数:(参见图 18)
    • 名称 - Att.Xsl.Transform.CustomerID
    • 类型 – 转换 XSL
    • 输入架构 – (无)
    • 输出架构MSIBF.Text
    • 端口Att.Xsl.Transform.CustomerID
  4. 我们所做的只是创建了一个 XSL 转换实体,它调用了包含 XSL 的相应端口。单击“确定”完成“添加转换”对话框。

步骤 4

接下来的两个步骤很简单;它们只是涉及创建一个新的视图和一个动作。我们之前已经完成过这些步骤,所以不再赘述。按照以下步骤添加视图:

  1. 导航到“添加视图”元数据元素。NorthwindIBF --> Entities --> Customers --> Views --> [添加视图...]。
  2. 双击“[添加视图...]”以打开“添加视图”对话框。
  3. 设置以下参数:
    • 名称 - Att.CustomerDetails_View
    • 架构Xsd.CustomerID
  4. 勾选选项将其设为默认视图。
  5. 单击“确定”关闭“添加视图”对话框。

步骤 5

此步骤将创建新的操作,该操作调用我们的新操作和转换。此步骤将所有元数据连接在一起。按照以下步骤添加和配置操作:

  1. Att.CustomerDetails_View 中,双击“[添加操作...]”节点。
  2. 设置以下参数,然后单击“确定”以添加新操作:
    • 名称 - Att.CustomerDetails_View
    • 类型EnterContext
  3. 双击新的 Att.CustomerDetails_View 操作以打开操作设计器。
  4. Att.CallShowCustomerDetails_Action 操作拖放到操作设计器上。
  5. 当转换实例对话框打开时,设置以下属性:
    • 数据源 – 引用
    • 转换实例 - Att.Xsl.Transform.CustomerID
  6. 单击“确定”关闭对话框。
  7. 保存元数据并发布到服务器。

步骤 6

最后一步是测试附加架构并确保它正常工作。为此,请按照以下步骤操作:

  1. 打开包含我们在上一节中创建的附加架构的 Word 文件。
  2. 当文档打开且 IBF 任务窗格显示 HTML 欢迎区域时,单击“NorthwindsCustomersDocument”元素之间。
  3. 单击“文档操作”菜单。此菜单位于 IBF 任务窗格的顶部。选择“XML 结构”菜单。这将带回 XML 结构视图。(参见图 19。)
  4. 在“选择要添加到文档的元素”部分,您将看到 CustomerID 元素。(参见图 20。)选择此元素以将其添加到 NorthwindsCustomersDocument 元素之间。
  5. 您可能已经注意到 IBF 窗格试图处理该操作并显示客户详细信息区域。但由于我们尚未指定任何 CustomerID,因此导致了一个错误。为此,右键单击 Customers 元素并选择“属性”选项。(参见图 20。)
  6. 在“客户属性”对话框中,您现在将看到 CustomerID 属性。这是因为附加架构包含此属性,因此可以将其添加到文档中。在 Value 字段中,添加 LETSS 的 CustomerID,然后单击“添加”按钮。(参见图 22。)
  7. 单击“确定”关闭对话框。
  8. 现在,将光标移动到 Customers 元素之间,IBF 将初始化 GetCustomerDetails_Action。然后它应该显示相应的客户详细信息。如果客户详细信息区域完全没有显示,请尝试保存文档,关闭它,然后重新打开它。(参见图 23。)

就是这样!现在我们可以向此文档添加任意数量的 Customers 元素,并设置不同的 CustomerID 属性。这是 IBF 的一个非常强大的功能。您可能已经看到它可以在您的应用程序中使用的场景。为了创建它,我们无需编写或编译任何代码。我们只需创建一些 XML/XSL 并将其添加到 IBF 元数据存储库中。保存并关闭文档。下一节将向您展示如何从 IBF 任务窗格内自动化 Office。

IBF 的 Office 自动化

在本节中,我想演示如何从 IBF 任务窗格中自动化 Office 应用程序。这就是您如何扩展 IBF 区域功能,以便允许用户从 Word 执行操作。在此练习中,我只想在用户单击 IBF 任务窗格中的按钮时,将客户名称插入 Customers 元素中。为此,我们需要向 IBF 向导为我们创建的客户详细信息区域添加一些代码。请按照以下步骤完成此操作:

  1. 在 Visual Studio 中,打开 IBF 区域创建向导创建的“IBFNorthwind_ControlLib”项目。
  2. 打开 CustomerDetails.cs, Windows 窗体用户控件。
  3. 将此控件拉长,以便我们可以在底部添加一个按钮。
  4. 添加一个新按钮,命名为“插入公司名称”,然后双击它以创建事件代码。(参见图 24。)
  5. 添加对 Microsoft Word COM 对象的引用。这将允许您在 Visual Studio 中使用 Word 对象模型。
  6. 添加列表 8 中的代码。此代码创建 Word 应用程序和文档的对象。然后它将公司名称文本插入到 Word 文档中。
  7. 保存并编译项目。
  8. 重新打开带有附加架构的 Word 文档。将光标放在 Customers 元素之间。IBF 客户详细信息区域加载后,您将看到新的“插入客户名称”按钮。单击此按钮,公司名称将插入到 Word 中,位于 Customers 元素之间。(参见图 25。)

部署

这最后一部分将简要讨论客户端部署。要将 IBF 解决方案部署到客户端,用户必须在其系统上安装 IBF 客户端。他们还需要安装 Office 2003。IBF 在客户端安装后,需要进行配置以指向适当的元数据服务。为此,IBF 1.5 提供了一个管理和配置工具,允许您设置这些属性。此工具可在“开始”菜单上的“管理工具”文件夹中找到。(参见图 26。)

一旦客户端具有指向元数据服务器的正确配置,用户就需要从您的项目中安装相应的智能标签和 Windows 窗体用户控件程序集。这可以通过几种方式完成。您可以创建一个安装程序,将这些程序集安装到 GAC 或 IBF 元数据可以找到的其他位置。但更简单的方法是简单地将您的 IBF 端口指向可以找到它们的 Web 位置。您可以将这些程序集放置在公共可用的 Web 服务器上,然后将端口元数据指向此位置,而不是硬编码到本地磁盘的路径。

例如,端口“Asm.UI.CustomerDetailsAssembly”引用了一个程序集 CustomerDetailsAssembly.dll,它位于我本地计算机的“C”驱动器上。我可以将此程序集复制到我的 Web 服务目录,然后更改此端口以指向该 Web 地址。因此,您将有一个类似于:http://myserver.com/ibf/customers/CustomerDetailsAssembly.dll 的引用,而不是:C:\Projects\CustomerDetailsAssembly.dll

现在,当用户打开包含附加架构的文档时,此程序集将自动下载并安装到用户的机器上。

注意:您的程序集必须在用户的机器上进行签名并受到信任。为此,您可以让 IT 管理员创建机器策略,以信任您的签名程序集。

摘要

总结本文,我们深入探讨了 IBF 的几个高级主题,包括:自定义智能标签菜单、搜索区域、附加架构和部署。这些文章的目的是向您展示如何在 IBF 1.5 中准确完成这些任务。我相信这是一项伟大的技术,它真正展示了集成 Office 应用程序、Web 服务、元数据、XML/XSL 当然还有 .NET 的强大功能。我希望本文能对您有所帮助,并且您现在可以独立创建完整的 IBF 解决方案。

参考文献

IBF 网站 信息桥框架
智能标签 SDK Office 2003: 智能标签软件开发工具包 (SDK)
Office 狂热者 Office Zealot
SQL Northwind 数据库

Northwind 和 pubs 示例数据库

© . All rights reserved.