Oracle适配器配置与消息映射

BizTalkServer中,与Oracle数据库的交互通常需要通过Oracle适配器来实现。本文将介绍如何配置Oracle适配器,以及如何通过XSLT进行消息映射,以实现数据的标准化处理。

配置Oracle适配器

要使BizTalk能够与Oracle数据库进行通信,首先需要配置Oracle适配器。这包括设置传输属性,配置用户名、密码和服务名称(TNS别名),以及Oracle客户端的二进制路径。在Oracle传输属性中,可以通过点击省略号来检查所有属性是否配置正确。此外,还需要设置接收属性为SQLNative。

在项目中,需要添加Oracle适配器元数据以生成相应的架构。执行查询语句后,将返回包含数据的NativeSQL架构类型的消息。如果需要,还可以设置执行查询语句之前的后置查询语句。

建议将Oracle架构项目单独维护,因为如果其他项目使用相同的服务和NativeSQL架构,可能会导致路由失败。

在Visual Studio中创建元数据时,将同时创建多部分消息和端口类型,以及通过选择NativeSQL服务的编排。如果使用单独的项目来维护Oracle适配器元数据和工作项目,请相应地配置端口和多部分消息。

在工作示例中,通过配置消息类型属性并引用Oracle架构项目程序集中的消息部分,创建一个类型为SQLEvent的请求消息。返回的响应消息将是SQLEventResponse类型。

创建一个新的仅接收端口,并将编排中的请求消息的接收形状连接起来。

响应消息并不按照需求进行标准化,包含两个记录:“ColumnMetaData”和“RowMetaData”。ColumnMetaData包含列名,RowMetaData包含数据,但没有预期的列名作为XML标签。因此,需要一个智能映射来标准化它,使其更有用。

使用XSLT进行消息映射

最后,可以选择使用XSLT来标准化响应,以满足所需的架构。下面是一个简单的XSLT内联脚本,将SQLEventResponse消息映射到基于IFX的架构消息。需要使用脚本functoid,并使用Inline XSLT Call模板脚本。脚本如下,它将迭代行并将其映射到目标架构记录。

<xsl:template> <xsl:for-each select="/*[local-name()='SQLExecuteResponse' and namespace-uri()='http://schemas.microsoft.com/[OracleDb://OLTPDEV/NativeSQL]']/*[local-name()='Return' and namespace-uri()='http://schemas.microsoft.com/[OracleDb://OLTPDEV/NativeSQL]']/*[local-name()='rowData' and namespace-uri()='http://schemas.microsoft.com/[OracleDb://OLTPDEV/NativeSQL]']/*[local-name()='columnData' and namespace-uri()='http://schemas.microsoft.com/[OracleDb://OLTPDEV/NativeSQL]']"> <xsl:variable select='position()'/> <LOG_REFERENCE> <xsl:value-of select="/*[local-name()='SQLExecuteResponse' and namespace-uri()='http://schemas.microsoft.com/[OracleDb://OLTPDEV/NativeSQL]']/*[local-name()='Return' and namespace-uri()='http://schemas.microsoft.com/[OracleDb://OLTPDEV/NativeSQL]']/*[local-name()='rowData' and namespace-uri()='http://schemas.microsoft.com/[OracleDb://OLTPDEV/NativeSQL]']/*[local-name()='columnData' and namespace-uri()='http://schemas.microsoft.com/[OracleDb://OLTPDEV/NativeSQL]' and position()=$index]/*[local-name()='string' and namespace-uri()='http://schemas.microsoft.com/[OracleDb://OLTPDEV/NativeSQL]' and position()=1]"/> </LOG_REFERENCE> </xsl:for-each> </xsl:template>

通过这种方式,结果是一个标准化的消息,而不是从Oracle适配器返回的消息。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485