使用存储过程轮询 Oracle 电子商务套件
可以使用存储过程连续轮询 Oracle 数据库,将 Oracle E-Business 适配器配置为接收定期数据更改消息。 可以将存储过程指定为轮询语句,适配器会定期执行该语句来轮询 Oracle 数据库。
若要启用轮询,必须在 WCF-Custom 或 WCF-OracleEBS 接收端口上指定某些绑定属性。 有关适配器如何支持轮询的详细信息,请参阅 支持使用轮询的入站调用。 有关用于轮询操作的 SOAP 消息的结构的信息,请参阅 轮询操作的消息架构。
使用 Oracle E-Business 适配器绑定属性配置轮询操作
下表汇总了用于配置适配器以接收数据更改消息的 Oracle E-Business 适配器绑定属性。 在BizTalk Server管理控制台中配置 WCF-Custom 或 WCF-OracleEBS 接收端口时,必须指定这些绑定属性。
Binding 属性 | 说明 |
---|---|
InboundOperationType | 指定是要执行 轮询 还是 通知 入站操作。 默认值为 轮询。 |
PolledDataAvailableStatement | 指定适配器执行的 SQL 语句,以确定是否有任何数据可用于轮询。 仅当记录可用时,才会执行为 PollingInput 绑定属性指定的存储过程。 |
PollingInterval | 指定 Oracle E-Business 适配器执行为 PolledDataAvailableStatement 绑定属性指定的语句的间隔(以秒为单位)。 默认为 30 秒。 轮询间隔确定连续轮询之间的时间间隔。 如果在指定的时间间隔内执行语句,则适配器在间隔中的剩余时间内休眠。 |
PollingInput | 指定轮询语句。 若要使用存储过程进行轮询,必须为此绑定属性指定整个请求消息。 请求消息必须与发送到适配器以调用存储过程作为出站操作的相同。 默认值为 NULL。 必须指定 PollingInput 绑定属性的值才能启用轮询。 仅当有可供轮询的数据(由 PolledDataAvailableStatement 绑定属性确定)时,才会执行轮询语句。 |
PollingAction | 指定轮询操作的操作。 可以使用使用适配器服务外接程序从为操作生成的元数据中确定特定操作的轮询操作。 |
PostPollStatement | 指定在执行 PollingInput 绑定属性指定的语句之后执行的语句块。 |
PollWhileDataFound | 指定 Oracle 电子商务适配器是否忽略轮询间隔并连续执行轮询语句(如果轮询表中的数据可用)。 如果表中没有可用数据,适配器将还原为在指定的轮询间隔内执行轮询语句。 默认值为 false。 |
有关这些属性的更完整说明,请参阅 阅读有关适用于 Oracle E-Business Suite 绑定属性的 BizTalk 适配器。 有关如何使用 Oracle 电子商务适配器轮询 Oracle 数据库的完整说明,请阅读以下部分。
本主题如何演示轮询
在本主题中,为了演示 Oracle E-Business 适配器如何支持使用存储过程接收数据更改消息,请创建 BizTalk 项目并为要用于轮询 Oracle 数据库的存储过程生成架构。 在本主题中,我们使用 GET_ACTIVITYS 存储过程轮询 ACCOUNTACTIVITY 表。 此存储过程可用于 ACCOUNT_PKG 包。 可以运行随示例一起提供的 SQL 脚本,在数据库中创建这些对象。
注意
本主题中的业务流程轮询 ACCOUNTACTIVITY 表,它是通过运行示例提供的脚本创建的基数据库表。 必须执行本主题中所述的类似过程才能轮询任何其他表,包括接口表。
为了演示轮询操作,我们执行以下操作:
为 PolledDataAvailableStatement 绑定属性指定 SELECT 语句,以确定要轮询的表 (ACCOUNTACTIVITY) 具有任何数据的位置。 在此示例中,可以将此绑定属性设置为:
SELECT COUNT (*) FROM ACCOUNTACTIVITY
这可确保适配器仅在 ACCOUNTACTIVITY 表具有一些记录时执行轮询语句。
通过提供请求消息作为 PollingInput 绑定属性的一部分来执行存储过程(GET_ACTIVITYS)。 此存储过程将检索 ACCOUNTACTIVITY 表中的所有行,你将从适配器获取响应消息。
执行 PL/SQL 块作为 PostPollStatement 绑定属性的一部分。 此语句会将 ACCOUNTACTIVITY 表中的所有数据移到数据库中的另一个表。 发生这种情况后,下次执行 PollingInput 时,它将不会提取任何数据,因此GET_ACTIVITYS存储过程将返回空响应消息。
在将更多数据添加到 ACCOUNTACTIVITY 表之前,你将继续收到空的响应消息。 因此,必须使用新记录重新填充 ACCOUNTACTIVITY 表。 为此,可以运行示例随附的 more_activity_data.sql 脚本。 运行此脚本后,下一个轮询操作将提取插入到表中的新记录。
如何从 Oracle 接收数据更改消息
使用 Oracle E-Business 适配器和 BizTalk Server 在 Oracle 数据库上执行操作涉及构建基块以创建 Oracle E-Business Suite 应用程序中所述的以下过程任务。 若要配置适配器以使用存储过程轮询 Oracle 数据库,这些任务包括:
创建 BizTalk 项目,并为要用于轮询的存储过程生成架构。
在 BizTalk 项目中创建一条消息,用于从 Oracle 数据库接收消息。
创建业务流程以接收来自 Oracle 数据库的消息并将其保存到文件夹。
生成和部署 BizTalk 项目。
通过创建物理发送和接收端口来配置 BizTalk 应用程序。
重要
对于入站轮询方案,必须始终配置单向接收端口。 入站操作不支持双向接收端口。
启动 BizTalk 应用程序。
本主题提供有关执行这些任务的说明。
基于本主题的示例
BizTalk 适配器包还提供了基于本主题的示例 PollingUsingStoredProc。 有关更多信息,请参阅示例。
生成架构
必须为GET_ACTIVITYS操作生成架构。 使用使用适配器服务加载项生成架构时执行以下任务。
选择协定类型作为 “服务” (“入站”操作) 。
为 GET_ACTIVITYS 过程生成架构。
有关如何生成架构的详细信息,请参阅 浏览、搜索和获取 Oracle 电子商务运营的元数据。
定义消息和消息类型
前面生成的架构描述了业务流程中的消息所需的“类型”。 消息通常是一个变量,其类型由相应的架构定义。 生成架构后,必须将其链接到 BizTalk 项目的业务流程视图中的消息。
对于本主题,必须创建一条消息才能从 Oracle 接收消息。
执行以下步骤以创建消息并将其链接到架构。
创建消息并链接到架构
将业务流程添加到 BizTalk 项目。 在解决方案资源管理器中,右键单击 BizTalk 项目名称,指向“添加”,然后单击“新建项”。 键入 BizTalk 业务流程的名称,然后单击“ 添加”。
打开 BizTalk 项目的业务流程视图窗口(如果尚未打开)。 单击“ 视图”,指向“ 其他窗口”,然后单击“ 业务流程视图”。
在 业务流程视图中,右键单击“ 消息”,然后单击“ 新建消息”。
右键单击新创建的消息,然后选择“ 属性窗口”。
在Message_1的“属性”窗格中,执行以下操作:
使用此选项 要执行此操作 标识符 键入 Receive。 消息类型 从下拉列表中展开“ 架构”,然后选择“ Polling.OracleEBSBindingSchema”,其中 轮询 是 BizTalk 项目的名称。 OracleEBSBindingSchema 是为 GET_ACTIVITYS 存储过程生成的响应架构。
重要: 由于轮询是单向操作,因此适配器生成的架构不包含响应节点,因此架构中只有一个根节点。 如果将此类架构用于消息类型,则必须通过生成的架构的文件名来标识架构。
例如,如果为双向操作创建架构,则架构文件中具有名称OracleEBSBindingSchema
的节点可能类似于“请求”和“响应”。 如果要在业务流程中创建映射到请求架构的消息,可以通过查找OracleEBSBindingSchema.Request
来标识列表中的架构。 但是,在轮询操作中,由于唯一的节点是“轮询”,因此很难识别要映射到的架构,因为具有单个节点的架构未列为 <schemafilename>。<rootnodename>。 相反,此类架构仅按文件名列出。 在这种情况下,标识架构的唯一方法是使用架构文件名,例如 OracleEBSBindingSchema。使用适配器服务外接程序为GET_ACTIVITYS存储过程的入站和出站操作生成架构。 必须使用入站操作的架构才能:
映射作为业务流程的一部分创建的消息。
若要检索操作,必须在运行时为 PollingAction 绑定属性指定。
必须使用出站操作的架构来获取必须指定为 PollingInput 绑定属性一部分的请求消息。
设置业务流程
必须创建 BizTalk 业务流程才能使用 BizTalk Server 从 Oracle 接收基于轮询的数据更改消息。 在此业务流程中,适配器通过执行指定请求消息作为 PollingInput 绑定属性的一部分的存储过程来接收响应。 存储过程的响应消息将保存到文件位置。 轮询 Oracle 数据库的典型业务流程将包含:
接收和发送形状,分别接收来自 Oracle 的消息和发送到 FILE 端口。
用于从 Oracle 数据库接收消息的单向接收端口。
重要
对于入站轮询方案,必须始终配置单向接收端口。 入站操作不支持双向接收端口。
用于从 Oracle 数据库发送轮询响应的单向发送端口。
示例业务流程如下所示。
Oracle
添加消息形状
请确保为每个邮件形状指定以下属性。 “形状”列中列出的名称是刚才提到的业务流程中显示的消息形状的名称。
形状 | 形状类型 | 属性 |
---|---|---|
ReceiveMessage | 接收 | - 将 Name 设置为 ReceiveMessage - 将 “激活” 设置为 “True” |
SaveMessage | 发送 | - 将 “名称” 设置为 SaveMessage |
添加端口
请确保为每个逻辑端口指定以下属性。 “端口”列中列出的名称是业务流程中显示的端口名称。
端口 | 属性 |
---|---|
OracleReceivePort | - 将 标识符 设置为 OracleReceivePort - 将 Type 设置为 OracleReceivePortType - 将 通信模式 设置为 单向 - 将 通信方向 设置为 接收 |
SaveMessagePort | - 将 标识符 设置为 SaveMessagePort - 将 Type 设置为 SaveMessagePortType - 将 通信模式 设置为 单向 - 将 “通信方向 ”设置为 “发送” |
为操作形状指定消息并连接到端口
下表指定了应设置的属性及其值,以便为操作形状指定消息并将消息链接到端口。 “形状”列中列出的名称是前面提到的业务流程中显示的消息形状的名称。
形状 | 属性 |
---|---|
ReceiveMessage | - 将 消息 设置为 接收 - 将 操作 设置为 OracleReceivePort.Polling.Request |
SaveMessage | - 将 消息 设置为 接收 - 将 操作 设置为 SaveMessagePort.Polling.Request |
指定这些属性后,将连接消息形状和端口,并且业务流程已完成。
现在必须生成 BizTalk 解决方案并将其部署到BizTalk Server。 有关详细信息,请参阅 生成和运行业务流程。
配置 BizTalk 应用程序
部署 BizTalk 项目后,前面创建的业务流程将列在 BizTalk Server 管理控制台的“业务流程”窗格中。 必须使用 BizTalk Server 管理控制台来配置应用程序。 有关演练,请参阅 演练:部署基本 BizTalk 应用程序。
配置应用程序涉及:
为应用程序选择主机。
将业务流程中创建的端口映射到 BizTalk Server 管理控制台中的物理端口。 对于此业务流程,必须:
在硬盘上定义一个位置和相应的 FILE 端口,BizTalk 业务流程将在其中删除来自 Oracle 的消息。 这些消息将响应你为接收端口指定的轮询语句。
定义物理 WCF-Custom 或 WCF-OracleEBS 单向接收端口。 此端口轮询 Oracle 数据库。 有关如何创建接收端口的信息,请参阅 手动配置到 Oracle 电子商务适配器的物理端口绑定。 请确保为接收端口指定以下绑定属性。
Binding 属性 值 InboundOperationType 将此项设置为 “轮询”。 PolledDataAvailableStatement 对于此示例,请将此绑定属性设置为:
SELECT COUNT (*) FROM ACCOUNTACTIVITY
这可确保适配器仅在 ACCOUNTACTIVITY 表具有一些记录时执行轮询语句。PollingAction 从为GET_ACTIVITYS过程的入站消息生成的架构中检索轮询操作。 对于此示例,请将此绑定属性设置为 PollingPackageApis/APPS/ACCOUNT_PKG/GET_ACTIVITYS。 PollingInput 对于此绑定属性,指定请求消息以调用GET_ACTIVITYS存储过程。 可以从使用适配器服务加载项生成的出站操作的架构中获取请求消息。 必须提供整个 XML 消息作为此绑定属性的输入。 对于此示例,请将此绑定属性设置为:
<GET_ACTIVITYS xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/PackageApis/APPS/ACCOUNT_PKG"> <INRECS>OPEN ? FOR SELECT * FROM ACCOUNTACTIVITY</INRECS> </GET_ACTIVITYS>
GET_ACTIVITYS存储过程采用输入 REF CURSOR 作为参数。PostPollStatement 指定轮询后语句以将所有数据从 ACCOUNTACTIVITY 表移到另一个表。 对于此示例,请将此绑定属性设置为:
BEGIN ACCOUNT_PKG.PROCESS_ACTIVITY(); END;
有关不同绑定属性的详细信息,请参阅 阅读有关 Oracle E-Business Suite 绑定属性的 BizTalk 适配器。
重要
如果要轮询接口表,则必须通过指定必要的绑定属性来设置应用程序上下文。 有关设置应用程序上下文的详细信息,请参阅 设置应用程序上下文。
注意
建议在使用 Oracle 电子商务适配器执行入站操作时配置事务隔离级别和事务超时。 为此,可以在配置 WCF-Custom 或 WCF-OracleEBS 接收端口时添加服务行为。 有关如何添加服务行为的说明,请参阅 使用 Oracle E-Business Suite 配置事务隔离级别和事务超时。
启动应用程序
必须启动 BizTalk 应用程序才能轮询 Oracle 数据库。 有关启动 BizTalk 应用程序的说明,请参阅 如何启动业务流程。
在此阶段,请确保:
WCF-Custom 或 WCF-OracleEBS 单向接收端口正在运行,该端口使用为 PollingInput 绑定属性指定的存储过程轮询 Oracle。
从 Oracle 数据库接收消息的 FILE 发送端口正在运行。
操作的 BizTalk 业务流程正在运行。
执行操作
运行应用程序后,将按相同的顺序执行以下一组操作:
适配器执行 PolledDataAvailableStatement ,该状态返回一个正值,指示适配器执行为 PollingInput 绑定属性指定的语句。
适配器执行为 PollingInput 绑定属性指定的GET_ACTIVITYS存储过程,并返回 ACCOUNTACTIVITY 表中的所有行。 Oracle 数据库的响应如下所示:
<?xml version="1.0" encoding="utf-8" ?> <GET_ACTIVITYS xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/PollingPackageApis/APPS/ACCOUNT_PKG"> <OUTRECS> <OUTRECSRecord xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/ReferencedRecordTypes/APPS/ACCOUNT_PKG/GET_ACTIVITYS/APPS/GET_ACTIVITYS"> <TID>1</TID> <ACCOUNT>100001</ACCOUNT> <AMOUNT>500</AMOUNT> <DESCRIPTION /> <TRANSDATE>2008-06-21T15:52:19</TRANSDATE> <PROCESSED>n</PROCESSED> </OUTRECSRecord> <OUTRECSRecord xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/ReferencedRecordTypes/APPS/ACCOUNT_PKG/GET_ACTIVITYS/APPS/GET_ACTIVITYS"> ...... ...... </OUTRECSRecord> ...... ...... </OUTRECS> </GET_ACTIVITYS>
适配器执行投票后语句,该语句会将所有数据从 ACCOUNTACTIVITY 表移到另一个表。
在轮询间隔后,适配器再次执行 PolledDataAvailableStatement。 由于 ACCOUNTACTIVITY 表现在没有记录, 因此 PolledDataAvailableStatement 不返回正值,因此适配器不会执行为 PollingInput 绑定属性指定的语句。 因此,适配器客户端不会收到任何轮询消息。
在将某些记录显式插入 ACCOUNTACTIVITY 表之前,适配器客户端不会再收到任何轮询消息。 若要插入更多记录,可以运行示例随附的 more_activity_data.sql 脚本。 运行此脚本后,下次执行 PolledDataAvailableStatement 时,它将返回正值。 因此,适配器执行轮询语句,适配器客户端再次接收轮询消息。
注意
Oracle E-Business 适配器将继续轮询,直到从 BizTalk Server 管理控制台显式禁用接收端口。
最佳实践
部署并配置 BizTalk 项目后,可以将配置设置导出到名为绑定文件的 XML 文件。 生成绑定文件后,可以从文件导入配置设置,这样就无需为同一业务流程创建发送端口和接收端口。 有关绑定文件的详细信息,请参阅 重用 SQL 适配器绑定。