使用 BizTalk Server 调用 Oracle 数据库中具有 RECORD 类型的函数和过程

Oracle RECORD 类型用于表示传递给 PL/SQL 函数和过程的参数中的分层信息。 适用于 Oracle 数据库的 Microsoft BizTalk 适配器将 RECORD 类型显示为复杂的 XML 类型。 有关 Oracle 数据库适配器如何支持 RECORD 类型的详细信息,请参阅 对 Oracle 数据库中具有 RECORD 类型的函数和过程的操作。 有关 RECORD 类型的 XML 结构的信息,请参阅 RECORD 类型的消息架构

如何在 Oracle 数据库中调用函数?

使用带 BizTalk Server 的 Oracle 数据库适配器对 Oracle 数据库执行操作涉及构建基块以使用 Oracle 数据库开发 BizTalk 应用程序中所述的过程性任务。 若要调用返回简单和嵌套 RECORD 类型的 Oracle 数据库中的函数,这些任务包括:

  1. 创建 BizTalk 项目,并为要在 Oracle 数据库中调用的函数生成架构。

  2. 在 BizTalk 项目中创建消息,以便从 Oracle 数据库发送和接收消息。

  3. 创建业务流程以调用 Oracle 数据库中的函数。

  4. 生成并部署 BizTalk 项目。

  5. 通过创建物理发送和接收端口配置 BizTalk 应用程序。

  6. 启动 BizTalk 应用程序。

    本主题提供有关执行这些任务的说明。

基于本主题的示例

BizTalk 适配器包还提供了基于本主题的示例Func_RecordTypes。 有关详细信息,请参阅 适配器示例

生成架构

在本主题中,为了演示 Oracle 数据库适配器如何支持调用返回 RECORD 类型参数的函数,我们将调用:

  • 返回简单 RECORD 类型的GET_ACCOUNTADDRESS函数。

  • 返回嵌套 RECORD 类型的GET_ACCOUNTINFO函数。

    这些函数作为通过运行示例随附的 SQL 脚本创建的ACCOUNT_PKG的一部分提供。 若要详细了解示例和 SQL 脚本,请参阅 架构示例

    因此,我们必须为 SCOTT\Package\ACCOUNT_PKG 架构下提供的函数(GET_ACCOUNTADDRESS 和 GET_ACCOUNTINFO)生成架构。 有关如何生成架构的详细信息,请参阅 在 Visual Studio 中检索 Oracle 操作的元数据

定义消息和消息类型

前面生成的架构描述了业务流程中的消息所需的“类型”。 消息通常是一个变量,其类型由相应的架构定义。 必须将第一步中生成的架构链接到 BizTalk 项目的“业务流程视图”窗口中的消息。

对于本主题,必须创建两个请求-响应消息集-一个请求-响应集以调用 GET_ACCOUNTADDRESS 函数并接收响应;另一个请求-响应消息设置为调用GET_ACCOUNTINFO函数并接收响应。

执行以下步骤来创建消息并将其链接到架构。

  1. 打开 BizTalk 项目的“业务流程视图”窗口(如果尚未打开该窗口)。 为此,请单击“ 视图”,指向 “其他窗口”,然后单击“ 业务流程视图”。

  2. 在“业务流程视图”中,右键单击“ 消息”,然后单击“ 新建消息”。

  3. 右键单击新创建的消息,然后选择“ 属性窗口”。

  4. Message_1的“属性”窗格中,执行以下操作:

    使用此选项 要执行此操作
    标识符 键入 “请求”。
    消息类型 从下拉列表中展开“ 架构”,然后选择 “Func_RecordTypes.OracleDBBindingSchema.GET_ACCOUNTINFO”,其中 Func_RecordTypes 是 BizTalk 项目的名称。 OracleDBBindingSchema 是为 GET_ACCOUNTADDRESS 函数生成的架构。
  5. 重复上一步,再创建三条消息。 在新邮件的“ 属性 ”窗格中,执行以下操作:

    将标识符设置为 将“消息类型”设置为
    响应 Func_RecordTypes.OracleDBBindingSchema.GET_ACCOUNTINFOResponse
    Request2 Func_RecordTypes.OracleDBBindingSchema.GET_ACCOUNTADDRESS
    Response2 Func_RecordTypes.OracleDBBindingSchema.GET_ACCOUNTADDRESSResponse

设置业务流程

必须创建 BizTalk 业务流程才能使用BizTalk Server调用函数返回简单和复杂的 RECORD 类型。 在此业务流程中,删除两个请求消息:

  • 一个用于返回简单 RECORD 类型的 GET_ACCOUNTADDRESS 函数。

  • 一个用于返回嵌套 RECORD 类型的GET_ACCOUNTINFO函数。

    这些消息将丢弃在接收位置。 Oracle 数据库适配器使用消息,并通过 ODP 将它们传递到 Oracle 数据库。 来自 Oracle 数据库的响应将保存到另一个位置。 由于业务流程同时选取两个请求,因此需要在业务流程中包含并行操作形状。 对于每个并行操作,必须包括“发送和接收”形状,以便分别将消息发送到 Oracle 数据库和接收响应。 但是,可以使用相同的端口来发送和接收这两个操作的消息。 同时执行这两个操作的典型业务流程将包含:

  • 发送和接收形状,用于将消息发送到 Oracle 数据库并接收响应。

  • 单向接收端口,用于接收要发送到 Oracle 数据库的请求消息。

  • 用于将请求消息发送到 Oracle 数据库和接收响应的双向发送端口。

  • 用于将响应从 Oracle 数据库发送到文件夹的单向发送端口。

    示例业务流程如下所示:

    6ee5e57b-48d5-435a-a16b-83bac878d0b7在 Oracle

添加消息形状

请确保为每个邮件形状指定以下属性。 “形状”列中列出的名称是刚才提到的业务流程中显示的消息形状的名称。 下表列出了必须为其中一个并行操作包含的形状。

形状 形状类型 属性
ReceiveMessage 接收 - 将 Name 设置为 ReceiveMessage
- 将 “激活” 设置为 “True”
SendMessage 发送 - 将 “名称” 设置为 SendMessage
ReceiveResponse 接收 - 将 Name 设置为 ReceiveResponse
- 将 “激活” 设置为 “False”
SendResponse 发送 - 将 “名称” 设置为 SendResponse

下表列出了必须包含用于其他并行操作的形状。

形状 形状类型 属性
ReceiveMessage2 接收 - 将 Name 设置为 ReceiveMessage2
- 将 “激活” 设置为 “True”
SendMessage2 发送 - 将 “名称” 设置为 SendMessage2
ReceiveResponse2 接收 - 将 Name 设置为 ReceiveResponse2
- 将 “激活” 设置为 “False”
SendResponse2 发送 - 将 Name 设置为 SendResponse2

添加端口

请确保为每个逻辑端口指定以下属性。 “端口”列中列出的名称是业务流程中显示的端口名称。

端口 属性
FileIn - 将 标识符 设置为 FileIn
- 将 Type 设置为 FileInType
- 将 通信模式 设置为 单向
- 将 通信方向 设置为 接收
LOBPort - 将 标识符 设置为 LOBPort
- 将 Type 设置为 LOBPortType
- 将 通信模式 设置为 请求-响应
- 将 通信方向 设置为 “发送-接收”
SaveResponse - 将 标识符 设置为 SaveResponse
- 将 Type 设置为 SaveResponseType
- 将 通信模式 设置为 单向
- 将 “通信方向 ”设置为 “发送”

由于你将使用这些端口处理两个请求和响应消息,因此必须为每个端口创建两个操作,其中每个操作对应于一个消息类型。 若要创建操作,请右键单击端口形状,然后选择“ 新建操作”。 将每个端口的第一个操作命名为 NestedRecType ,将每个端口的第二个操作命名为 SimpleRecType

使用相关性

相关是将传入消息与业务流程的相应实例相匹配的过程。 在业务流程中,将删除两个请求消息,每个重载一个。 使用关联,可将请求消息与正确的业务流程相关联。 有关相关性的详细信息,请参阅 在业务流程中使用相关性

使用相关性
  1. 从为每个函数生成的架构提升属性。 例如,从 GET_ACCOUNTADDRESS 函数的架构提升 CUSTNAME 属性;从 GET_ACCOUNTINFO 函数的架构提升 AID 属性。 若要提升某个属性,请在架构视图中右键单击该属性,指向“ 升级”,然后选择“ 快速升级”。 这会将 PropertySchema.xsd 文件添加到 BizTalk 项目。

    有关提升属性的信息,请参阅 提升属性

  2. 在“业务流程视图”中,右键单击“ 相关类型”,然后选择“ 新建相关类型”。

  3. 关联属性 ”对话框列出了在步骤 1 中升级的属性。 选择一个属性,然后单击“ 添加”。

  4. 单击 “确定”

  5. 若要为其他提升的属性创建相关类型,请重复这些步骤。

  6. 根据关联类型所关联的属性重命名相关类型。 可以将 CUSTNAME 属性 ) 的相关类型重命名为 CorrelationType_CUSTNAME (,并将 AID 属性) CorrelationType_AID (重命名。

  7. 在“业务流程视图”中,右键单击“ 相关集”,然后选择“ 新建相关集”。

  8. 右键单击新添加的关联集,然后单击“ 属性”。 在 “属性 ”窗格中,执行以下操作:

    使用此选项 要执行此操作
    相关类型 Func_RecordTypes.CorrelationType_CUSTNAME
    标识符 Correlation_CUSTNAME
  9. 添加另一个关联集,并从“属性”窗格中指定以下 属性

    使用此选项 要执行此操作
    相关类型 Func_RecordTypes.CorrelationType_AID
    标识符 Correlation_AID

指定操作形状的消息,并将其连接到端口

下表指定了应设置的属性及其值,以便为操作形状指定消息并将其链接到端口。 “形状”列中列出的名称是前面提到的业务流程中显示的消息形状的名称。

形状 属性
ReceiveMessage - 将 初始化相关集 设置为 Correlation_AID
- 将 “消息 ”设置为 “请求”
- 将 操作 设置为 FileIn.NestedRecType.Request
SendMessage - 将 “消息 ”设置为 “请求”
- 将 操作 设置为 LOBPort.NestedRecType.Request
ReceiveResponse - 将 消息 设置为 响应
- 将 操作 设置为 LOBPort.NestedRecType.Response
SendResponse - 将 消息 设置为 响应
- 将 操作 设置为 SaveResponse.NestedRecType.Request
ReceiveMessage2 - 将 初始化相关集 设置为 Correlation_CUSTNAME
- 将 消息 设置为 Request2
- 将 操作 设置为 FileIn.SimpleRecType.Request
SendMessage2 - 将 消息 设置为 Request2
- 将 操作 设置为 LOBPort.SimpleRecType.Request
ReceiveResponse2 - 将 Message 设置为 Response2
- 将 操作 设置为 LOBPort.SimpleRecType.Response
SendResponse2 - 将 消息 设置为 响应
- 将 操作 设置为 SaveResponse.SimpleRecType.Request

指定这些属性后,将连接消息形状和端口,并且业务流程已完成。

现在必须生成 BizTalk 解决方案并将其部署到BizTalk Server。 有关详细信息,请参阅 生成和运行业务流程

配置 BizTalk 应用程序

部署 BizTalk 项目后,前面创建的业务流程将列在 BizTalk Server 管理控制台的“业务流程”窗格中。 必须使用 BizTalk Server 管理控制台来配置应用程序。 有关演练,请参阅 演练:部署基本 BizTalk 应用程序

配置应用程序涉及:

  • 为应用程序选择主机。

  • 将业务流程中创建的端口映射到 BizTalk Server 管理控制台中的物理端口。 对于此业务流程,必须:

  • 在硬盘上定义一个位置和相应的文件端口,以便删除请求消息,每个重载过程一个。 BizTalk 业务流程将使用请求消息并将其发送到 Oracle 数据库。

  • 在硬盘上定义一个位置和相应的文件端口,BizTalk 业务流程将在其中删除响应消息,每个函数一个,其中包含来自 Oracle 数据库的响应。

    • 定义物理 WCF-Custom 或 WCF-OracleDB 发送端口以将消息发送到 Oracle 数据库。 还必须在发送端口中指定操作。 有关如何创建 WCF-Custom 或 WCF-OracleDB 端口的信息,请参阅 手动配置到 Oracle 数据库适配器的物理端口绑定。 由于 WCF-Custom 或 WCF-OracleDB 发送端口发送和接收符合多个架构的消息并执行两个操作,因此必须为这两个操作设置动态操作。 有关操作的详细信息,请参阅 为 Oracle 数据库配置 SOAP 操作。 对于此业务流程,应按如下所示设置操作:

      <BtsActionMapping>  
        <Operation Name="NestedRecType" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNTINFO" />  
        <Operation Name="SimpleRecType" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNTADDRESS" />  
      </BtsActionMapping>  
      

      注意

      使用使用适配器服务 BizTalk 项目外接程序生成架构还会创建一个绑定文件,其中包含有关要为这些端口设置的端口和操作的信息。 可以从 BizTalk Server 管理控制台导入此绑定文件,为出站呼叫创建发送端口 () 或接收) 入站呼叫 (端口。 有关详细信息,请参阅 使用到 Oracle 数据库的端口绑定文件配置物理端口绑定

启动应用程序

必须启动 BizTalk 应用程序才能在 Oracle 数据库表中调用函数。 有关启动 BizTalk 应用程序的说明,请参阅 如何启动业务流程

在此阶段,请确保:

  • 用于接收业务流程请求消息的 FILE 接收端口正在运行。

  • 用于从业务流程接收响应消息的 FILE 发送端口正在运行。

  • 用于将消息发送到 Oracle 数据库的 WCF-Custom 或 WCF-OracleDB 发送端口正在运行。

  • 操作的 BizTalk 业务流程正在运行。

执行操作

运行应用程序后,必须删除两条请求消息, (每个函数) 一条到 FILE 接收位置。 请求消息的架构必须符合前面生成的函数的架构。 业务流程使用请求消息并将其发送到 Oracle 数据库。 来自 Oracle 数据库的响应保存在定义为业务流程一部分的其他 FILE 位置。

有关使用 Oracle 数据库适配器调用函数的请求消息架构的详细信息,请参阅 函数的消息架构和过程

例如,调用 GET_ACCOUNINFO 函数的请求消息为:

<GET_ACCOUNTINFO xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG">  
  <AID>100000</AID>  
</GET_ACCOUNTINFO>  

同样,调用 GET_ACCOUNTADDRESS 函数的请求消息为:

<GET_ACCOUNTADDRESS xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG">  
  <CUSTNAME>Mindy Martin</CUSTNAME>  
</GET_ACCOUNTADDRESS>  

第一个请求消息调用返回嵌套记录类型的 GET_ACCOUNTINFO 函数。 调用 GET_ACCOUNTINFO 函数的响应消息为:

<?xml version="1.0" encoding="utf-8" ?>   
<GET_ACCOUNTINFOResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG">  
  <GET_ACCOUNTINFOResult>  
    <ACCT xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNTINFO">  
      <ACCTID>100000</ACCTID>   
      <NAME>Kim Ralls</NAME>   
      <BALANCE>10000</BALANCE>   
    </ACCT>  
    <ADDRESS xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNTINFO">  
      <STREET>1234 Main St.</STREET>   
      <CITY>Seattle</CITY>   
      <STATE>WA</STATE>   
    </ADDRESS>  
  </GET_ACCOUNTINFOResult>  
</GET_ACCOUNTINFOResponse>  

第二个请求消息调用返回简单记录类型的 GET_ACCOUNTADDRESS 函数。 调用 GET_ACCOUNTADDRESS 函数的响应消息为:

<?xml version="1.0" encoding="utf-8"?>  
<GET_ACCOUNTADDRESSResponse mlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG">  
  <GET_ACCOUNTADDRESSResult>  
    <ID xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNTADDRESS">100004</ID>  
    <NAME xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNTADDRESS">Mindy Martin</NAME>  
    <STREET xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNTADDRESS">6789 Cherry St.</STREET>  
    <CITY xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNTADDRESS">New York</CITY>  
    <STATE xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNTADDRESS">NY</STATE>  
  </GET_ACCOUNTADDRESSResult>  
</GET_ACCOUNTADDRESSResponse>  

可能的异常

有关在使用 BizTalk Server 调用函数或过程时可能遇到的异常的信息,请参阅 Oracle 数据库适配器的异常和错误处理

最佳实践

部署并配置 BizTalk 项目后,可以将配置设置导出到名为绑定文件的 XML 文件。 生成绑定文件后,可以从文件导入配置设置,这样就无需为同一业务流程创建发送端口、接收端口等。 有关绑定文件的详细信息,请参阅 重用 Oracle 数据库适配器绑定

另请参阅

使用 Oracle 数据库开发 BizTalk 应用程序的构建基块