信息桥 1.5 演练 - 第 2 部分






4.43/5 (6投票s)
2005 年 4 月 2 日
28分钟阅读

69725

129
IBF 1.5 高级功能一览。
目的
本文的目的是通过结合信息桥框架(IBF)的一些高级功能,扩展之前的第一部分演练。在第一部分中,我简要介绍了 IBF 以及其发展成为产品的原因。我还创建了一个演示 IBF 1.5 基本功能的示例演练。第一部分应该为您创建更强大的 IBF 应用程序提供了一个良好的起点。
第二部分将在此基础上进行构建,使用户能够从自定义智能标签执行特定操作,例如:获取所有客户,或查看客户详细信息。我们还将允许用户从 IBF 搜索任务窗格搜索客户。最后,我们将创建一个标准的 Word 模板并附加一个 IBF 架构,允许用户直接从 IBF 任务窗格查看、更新和添加客户信息。涉及的任务如下所示:
- IBF 搜索窗格。
- 自定义智能标签操作和菜单项。
- Microsoft Word 附加架构。
- 从 IBF 任务窗格使用 Office。
- 客户端部署。
回顾
回顾一下,在第一部分中,我们创建了一个简单的 IBF 解决方案,使用户能够在 Microsoft Word 中检索 Northwind 客户的详细信息。从 Word 文档中,我们可以输入任何 Northwind 客户 ID,然后从智能标签获取其相应的详细信息。完成此操作涉及的任务如下所示:
- 创建 .NET IBF 解决方案。
- 创建符合 IBF 标准的 Web 服务。
- 使用 1.5 元数据指导任务窗格执行以下操作:
- 导入符合 IBF 标准的 Web 服务。
- 创建您的第一个实体和操作。
- 创建 .NET Windows 窗体区域。
- 测试您的 IBF 解决方案。
- 创建基本智能标签识别器。
- 在 Word 中测试您的应用程序。
假设
在我继续创建高级信息桥解决方案之前,有几个先决条件,我假定您已经熟悉并已在开发环境中进行了配置:
- 您熟悉 Microsoft Visual Studio .NET 2003 开发平台。
- 您可以访问 SQL Server Northwind 数据库,并熟悉数据库结构。
- 您已在服务器上安装并配置了信息桥 1.5 服务器,以及 IBF 1.5 SDK。
- 您已完整安装 Microsoft Office 2003。
- 您理解以下概念:Web 服务、.NET C#、.NET Windows 控件开发、Microsoft Office 2003 Word、Excel 和 Outlook 以及 Office 智能标签。
- 您使用过 XML 和 XSLT。
- 您知道如何使用强名称对程序集进行签名。
- 您的系统上已安装智能标签 SDK。
- 您已下载本文顶部的图片和列表。
- 您已阅读示例演练的第 1 部分。
- 您已安装示例演练的第 1 部分,并且它在您的系统上运行正常。
演练
本演练将为您提供使用新发布的 1.5 框架创建完整 IBF 解决方案的说明。这是示例的第二部分,因此我将基于第一部分的示例解决方案进行构建。
与第一部分一样,我将围绕标准的 Northwind 数据库构建应用程序。我将使用这个模型,因为我认为大多数人都熟悉数据库模式,如果您不熟悉,Microsoft 提供了许多关于它的文档。
IBF 搜索窗格
IBF 搜索区域是 IBF 任务窗格上的一个特定窗口,允许用户从任何业务线 (LOB) 应用程序搜索和检索结果。此窗格专为搜索功能而设计。它将允许您选择搜索条件、输入搜索参数并显示结果。要查看此区域,请导航到 IBF 任务窗格上的相应选项卡。(参见图 1。)
对于本次演练,我希望用户能够导航到 IBF 搜索窗格,输入客户 ID,然后检索详细信息。在第一部分中,我们创建了用于实现此目的的操作、方法和端口。我们只需要创建一个特定的搜索端口和转换,以便 IBF 知道这是一个应该在搜索窗格上执行的功能。
要创建适当的元数据,我将使用 IBF 元数据指导窗口启动向导,该向导将指导我们完成这些步骤。向导步骤如下所示:
- 打开在第 1 部分中创建的 IBFDemo 示例解决方案。
- 单击元数据指导窗口上的“搜索定义向导”超链接。
- 向导的第二个屏幕允许我们选择或创建一个新的元数据解决方案。由于我们已经创建了 NorthwindIBFSolution,我们将使用该解决方案来容纳我们的搜索范围。(参见图 2。)
- 在第三个屏幕上,我们将选择用于此搜索的
View_Locator
。由于要求是输入CustomerID
,然后检索结果,我们将使用我们已创建的Customer_View
。使用以下参数填充向导:- 元数据范围 – NorthwindIBF
- 实体 –
Customers
- 视图 –
Customre_View
- 视图定位器 –
Xsd.CustomerID
- 选择操作选项 - 输入上下文类型
- 第四个向导屏幕为我们提供了操作的输入模板。这应该会自动为您填充,因为我们已经在
View_Locator
中将其定义为CustomerID
架构。(参见图 3。) - 对于第五个屏幕,我们将提供搜索结果的显示位置和类别。使用类别是为了,如果定义了多个搜索范围,用户可以使用相同的 IBF 任务窗格搜索多个业务线实体。搜索结果的位置可以是三个位置之一:
SearchRegion
、SearchPage
或ReferencePage
。对于本次演练,在搜索类别标题中输入“Northwind 客户”,并选择SearchPage
作为结果位置。(参见图 4。) - 我们需要填充的最后一个向导屏幕是输入此查询的搜索条件。此对话框允许您添加多个搜索条件以获得您想要的确切结果。(参见图 8。)为此,我们必须向 IBF 提供几条信息:
- 搜索条件的标签和描述。
- 将选择数据的实际 XPath。
- 选择的类型,列表或简单文本框。
- 此字段是否为必填项。
点击“添加条件”按钮。此命令允许我们为查询指定上述信息。(参见图 7。)
- 标题名称 - 客户 ID
- 描述 – 搜索并检索 Northwind 客户的详细信息。
- XPath – 单击数据输入字段旁边的省略号。这将弹出 XPath 创建器。此对话框将自动填充我们查询的适当输入参数。单击 CustomerID 节点并单击“确定”。(参见图 6)
- 控件类型 – 文本
- 必需 – 是(勾选此选项。)
- 点击通过向导的最后一系列屏幕,并关闭向导。
这完成了我们新搜索元数据的创建。您会注意到信息桥范围中添加了两个元数据元素:端口和转换。要测试搜索,请将元数据发布到 IBF 服务,然后创建一个新的 Word 文档,并通过选择“工具”-->“信息桥”打开信息桥任务窗格。信息桥任务窗格出现后,您会注意到已定义了一个新的搜索范围,并且您现在可以输入客户 ID。点击“提交”按钮后,该客户的详细信息将显示出来。就是这么简单。通过简单地在向导中输入信息,向导创建了相应的元数据,搜索现在处于活动状态。(参见图 1。)
注意:重要的是要注意搜索端口和转换将位于信息桥元数据范围中。这是所有应用程序共享的通用 IBF 范围。
自定义智能标签操作和菜单项
我想要探讨的下一个领域是创建自定义智能标签菜单项的能力。正如您在第 1 部分中看到的,当我们为 CustomerID 创建识别器时,会出现一个默认的智能标签菜单。此菜单包含标准 IBF 菜单项“显示详细信息”。通常,您会希望此菜单有一个更具描述性的名称,例如“显示 Northwind 客户详细信息”。实现此功能相当简单,IBF 通过提供一个接口和元数据来帮助您完成此操作。
下面,我将引导您完成创建此自定义菜单以显示客户详细信息的步骤。
- 在示例演练解决方案中,向 IBFNorthwind_ST 项目添加一个新类。将新类重命名为
IBFNorthwindSelCustomerAction
。 - 导入 IBF 和智能标签命名空间。(参见列表 1。)使该类从
IActionHandler
接口继承。此接口实现以下方法,这些方法必须由操作处理程序使用:GetMenuItems
– 获取识别到相应术语时要显示的菜单项。Initialize
– 此方法用于设置操作句柄。InvokeMenuItem
– 此方法执行用户从智能标签菜单中选择的特定操作。
- 下一步将是创建实际的自定义菜单项。为此,我们需要创建一个从 IBF
IActionHandlerMenuItem
接口继承的新类。该类将包含菜单项的 ID 和标题。在此示例中,在IBFNorthwindSelCustomerAction
类中添加一个密封类,并使其从IActionHandlerMenuItem
继承。完成此操作后,您必须实现标题和 ID 属性以及将初始化这两个属性的构造函数。(参见列表 2。) - 现在我们将创建
GetMenuItems
方法。此方法将返回您希望智能标签在识别某些文本时显示的全套菜单项。在此方法中,我们将创建一个菜单项数组,然后添加我们上面创建的菜单项密封类。(参见列表 3。) - 现在我们只需要编写代码,以便在用户点击智能标签菜单时执行相应的操作。为此,我们将创建代码来确定选择了哪个菜单项。此代码将添加到
InvokeMenuItem
方法中。(参见列表 4。)接下来,我们将创建一个自定义方法来调用我们的特定ShowCustomerDetails
,它将执行特定的 IBF 上下文以启动Customer_View
。(参见列表 5。) - 最后一步是添加 IBF 元数据以显示自定义菜单项。为此,请按照以下步骤操作:
- 如果元数据浏览器尚未可见,请将其打开。
- 在“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>
- 最后,我们必须创建自定义操作以启动自定义智能标签菜单。为此,请导航到“InformationBridge”元数据范围中的以下节点:Entities --> GenericSmartTags --> GenericActionHandlers --> Actions。
- 双击“ [添加操作.]”节点。在此对话框中,我们将创建一个新操作。设置以下属性并单击“确定”。
- 名称 –
NorthwindCustomerDetailsAction
- 类型 –
EnterContext
- 参数架构 –
MSIBF.GenericActionHandler
- 顺序执行 –
未选中
注意:如果要将操作链接在一起,则使用顺序执行。如果您有多个要按顺序一起运行的操作,则可以选中此选项。由于这是我们唯一要执行的操作,因此我们不需要序列。(参见图 9)
- 名称 –
- 在新添加的操作上,双击该操作以打开操作设计器。我们只需将
LoadActionHandler
操作从操作节点拖放到操作设计器,并将转换实例设置为GenericActionHandler
。(参见图 10。)
- 现在我们准备测试新的智能标签菜单项。保存解决方案并发布您的元数据。关闭所有 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 区域,请按照以下步骤操作:
- 在 Visual Studio 中,在元数据指导窗口上,单击“服务元数据创建向导”超链接。这与我们在第 1 部分中用于创建
Customers
实体的向导相同。我将不详细介绍此向导,如果您需要,请参阅本演练的第 1 部分。现在,只需输入以下参数即可创建一个简单的Welcome
实体。- 屏幕 1 – 选择“NorthwindIBF”元数据范围。
- 屏幕 2 – 创建一个名为“
Welcome
”的新实体。默认引用架构将为“(无)”。最后,选中选项将其设为默认实体。 - 屏幕 3 – 创建一个名为
Welcome_View
的新视图。默认引用架构将为“(无)”。最后,选中选项将其设为默认视图。 - 屏幕 4 – 点击最后三个屏幕完成向导。
- 下一步是创建一个自定义操作来启动 HTML 区域。为此,请按照以下步骤操作:
- 接下来,我们将创建一个操作来显示 HTML 区域。导航到“NorthwindIBF”元数据范围中的“Operations”节点。
- 双击“[添加操作...]”节点。设置以下参数,其他所有参数保持默认。
- 名称 –
Northwind.Customer.Welcome
- 实体 – (无)
- 操作类型 –
MSIBF.UI.ShowRegion
- 输入架构 –
MSIBF.Text
- 输出架构 – (无)
- 端口 – (无)
- 名称 –
- 下一步是最重要的一步。这涉及创建 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。) - 关闭新操作窗口。
- 最后,我们将创建一个自定义操作来调用 HTML 操作。为此,请按照以下步骤操作:
- 导航到新
Welcome
实体中的“Actions”节点。NorthwindIBF --> Welcome --> Welcome_View --> Actions。 - 双击“[添加操作...]”节点。设置以下参数,其他所有参数均不选中。
- 名称 –
ShowWelcomeMsg
- 类型 –
EnterContext
- 参数架构 – (无)
- 名称 –
- 单击“确定”以完成新操作的添加。
- 现在双击新的
ShowWelcomeMsg
操作以打开操作设计器。 - 将新的“Northwind.Customer.Welcome”操作拖放到设计面板上。
- 保存并发布元数据。
- 测试新动作,查看是否显示了相应的元数据。
注意:当您测试此操作时,您无需指定任何视图定位器、输入引用或操作参数。正在调用的操作是完全自给自足的。
现在我们有了一个好的默认实体、视图和区域,我们可以测试将此架构附加到 Word 文档并查看它是否有效。我将引导您完成下面将 IBF 架构附加到 Word 的步骤:
- 打开记事本并将列表 5 粘贴到新的文本文件中。这是将启动 IBF 功能的架构。
- 将文件保存到本地磁盘,并将其命名为 NorthwindIBF.xsd。
- 打开一个新的 Word 文档,以便我们可以附加新的架构。
- 在 Word 中,单击“工具”菜单下的“模板和加载项…”菜单。当对话框打开时,单击“XML 架构”选项卡。(参见图 13。)此窗口允许您管理可以附加到 Word 文档的所有架构。我们现在需要告诉 Word “NorthwindIBF”架构在哪里。
- 点击“添加架构”按钮,浏览到您保存 NorthwindIBF.xsd 文件的位置。
- 现在您可以为这个架构起一个别名。我将这个架构命名为“NorthwindIBF”。
- 接下来,选择此架构,使其附加到此 Word 文档,然后单击“确定”。
- 单击“确定”后,您将看到“XML 结构”任务窗格出现。此窗格允许您从架构中选择实体并将其添加到文档中。您会注意到“NorthwindsCustomersDocument”元素可用于添加到文档中。(参见图 14。)
- 您现在可以通过单击选择该元素,它将自动放入 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 专业版。
完整过程包括以下六个步骤:
- 创建操作以调用现有动作。
- 创建一个端口来调用 XSL 以转换输入。
- 创建使用端口的
Transformation
实体。 - 创建一个新视图来承载新操作。
- 创建附加架构将调用的操作。此操作将调用步骤 1 和 3 中列出的操作和转换。
- 验证附加架构是否正确,创建 Word XML 并测试解决方案。
步骤 1
步骤 1 将涉及创建一个简单执行预先存在的动作的操作。由于我们已经有一个获取客户详细信息并显示区域的动作,我们所要做的就是创建另一个调用此动作的操作。在编码术语中,这就像创建一个方法并在其他应用程序或类中重用它。但不同之处在于,它是元数据而不是代码。下面是创建此操作的步骤。
- 导航到“添加端口元数据”元素。NorthwindIBF --> Operations --> [添加操作...]。
- 双击“[添加操作...]”以打开“添加操作”对话框。
- 设置以下参数:(参见图 16。)
- 名称 -
Att.CallShowCustomerDetails_Action
– 我使用前缀 Att 来表示此系列实体与附加架构相关。如果您愿意,可以使用任何前缀。 - 实体 – (无)
- 操作类型 –
OperationExecuteAction
。选择此类型后,需要完成相应的执行操作属性。 - 参考架构 –
Xsd.CustomerID
- 参数架构 – (无)
- 输出架构 – 此处无需操作。
- 元数据范围 – NorthwindIBF
- 实体 –
Customers
- 视图 –
Customer_View
- 动作 –
GetCustomerDetails_Action
- View_Locator –
Xsd.CustomerID
- 名称 -
- 正如您通过查看对话框中的参数所看到的那样,此操作仅指向元数据范围中的特定操作。通过使用这种类型的操作,您可以调用任何其他元数据范围、实体、视图等中的任何操作。单击“确定”以添加新操作。
第二步
步骤 2,我们将创建包含 XSL 的端口,用于将传入的 XML 转换为操作期望的适当语法。下面是创建此端口的步骤:
- 导航到添加端口元数据元素。NorthwindIBF --> 端口 --> [添加端口...]。
- 双击“[添加端口...]”以打开“添加端口”对话框。
- 设置以下参数:(参见图 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
在此步骤中,我们将创建转换元数据元素,它只是调用端口。下面是创建此转换的步骤:
- 导航到“添加转换元数据”元素。NorthwindIBF --> Transformations --> [添加转换...]。
- 双击“[添加转换...]”以打开“添加转换”对话框。
- 设置以下参数:(参见图 18)
- 名称 -
Att.Xsl.Transform.CustomerID
- 类型 – 转换 XSL
- 输入架构 – (无)
- 输出架构 –
MSIBF.Text
- 端口 –
Att.Xsl.Transform.CustomerID
- 名称 -
- 我们所做的只是创建了一个 XSL 转换实体,它调用了包含 XSL 的相应端口。单击“确定”完成“添加转换”对话框。
步骤 4
接下来的两个步骤很简单;它们只是涉及创建一个新的视图和一个动作。我们之前已经完成过这些步骤,所以不再赘述。按照以下步骤添加视图:
- 导航到“添加视图”元数据元素。NorthwindIBF --> Entities --> Customers --> Views --> [添加视图...]。
- 双击“[添加视图...]”以打开“添加视图”对话框。
- 设置以下参数:
- 名称 -
Att.CustomerDetails_View
- 架构 –
Xsd.CustomerID
- 名称 -
- 勾选选项将其设为默认视图。
- 单击“确定”关闭“添加视图”对话框。
步骤 5
此步骤将创建新的操作,该操作调用我们的新操作和转换。此步骤将所有元数据连接在一起。按照以下步骤添加和配置操作:
- 在
Att.CustomerDetails_View
中,双击“[添加操作...]”节点。 - 设置以下参数,然后单击“确定”以添加新操作:
- 名称 -
Att.CustomerDetails_View
- 类型 –
EnterContext
- 名称 -
- 双击新的
Att.CustomerDetails_View
操作以打开操作设计器。 - 将
Att.CallShowCustomerDetails_Action
操作拖放到操作设计器上。 - 当转换实例对话框打开时,设置以下属性:
- 数据源 – 引用
- 转换实例 -
Att.Xsl.Transform.CustomerID
- 单击“确定”关闭对话框。
- 保存元数据并发布到服务器。
步骤 6
最后一步是测试附加架构并确保它正常工作。为此,请按照以下步骤操作:
- 打开包含我们在上一节中创建的附加架构的 Word 文件。
- 当文档打开且 IBF 任务窗格显示 HTML 欢迎区域时,单击“NorthwindsCustomersDocument”元素之间。
- 单击“文档操作”菜单。此菜单位于 IBF 任务窗格的顶部。选择“XML 结构”菜单。这将带回 XML 结构视图。(参见图 19。)
- 在“选择要添加到文档的元素”部分,您将看到
CustomerID
元素。(参见图 20。)选择此元素以将其添加到 NorthwindsCustomersDocument 元素之间。 - 您可能已经注意到 IBF 窗格试图处理该操作并显示客户详细信息区域。但由于我们尚未指定任何
CustomerID
,因此导致了一个错误。为此,右键单击Customers
元素并选择“属性”选项。(参见图 20。) - 在“客户属性”对话框中,您现在将看到
CustomerID
属性。这是因为附加架构包含此属性,因此可以将其添加到文档中。在Value
字段中,添加 LETSS 的CustomerID
,然后单击“添加”按钮。(参见图 22。) - 单击“确定”关闭对话框。
- 现在,将光标移动到
Customers
元素之间,IBF 将初始化GetCustomerDetails_Action
。然后它应该显示相应的客户详细信息。如果客户详细信息区域完全没有显示,请尝试保存文档,关闭它,然后重新打开它。(参见图 23。)
就是这样!现在我们可以向此文档添加任意数量的 Customers
元素,并设置不同的 CustomerID
属性。这是 IBF 的一个非常强大的功能。您可能已经看到它可以在您的应用程序中使用的场景。为了创建它,我们无需编写或编译任何代码。我们只需创建一些 XML/XSL 并将其添加到 IBF 元数据存储库中。保存并关闭文档。下一节将向您展示如何从 IBF 任务窗格内自动化 Office。
IBF 的 Office 自动化
在本节中,我想演示如何从 IBF 任务窗格中自动化 Office 应用程序。这就是您如何扩展 IBF 区域功能,以便允许用户从 Word 执行操作。在此练习中,我只想在用户单击 IBF 任务窗格中的按钮时,将客户名称插入 Customers
元素中。为此,我们需要向 IBF 向导为我们创建的客户详细信息区域添加一些代码。请按照以下步骤完成此操作:
- 在 Visual Studio 中,打开 IBF 区域创建向导创建的“IBFNorthwind_ControlLib”项目。
- 打开 CustomerDetails.cs, Windows 窗体用户控件。
- 将此控件拉长,以便我们可以在底部添加一个按钮。
- 添加一个新按钮,命名为“插入公司名称”,然后双击它以创建事件代码。(参见图 24。)
- 添加对 Microsoft Word COM 对象的引用。这将允许您在 Visual Studio 中使用 Word 对象模型。
- 添加列表 8 中的代码。此代码创建 Word 应用程序和文档的对象。然后它将公司名称文本插入到 Word 文档中。
- 保存并编译项目。
- 重新打开带有附加架构的 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 数据库 |