在 Oracle E-Business Suite 上完成复合操作
Oracle E-Business 适配器使适配器客户端能够对 Oracle 数据库执行复合操作。 复合操作可以包括:
对数据库表执行插入、更新、删除和选择操作。 选择对数据库视图执行的操作。
对接口表执行插入、更新、删除和选择操作。 选择对接口视图执行的操作。
存储过程和函数,在包内部或外部。
单个复合操作可以按任意顺序包含任意数量的这些操作。 例如,可以有两个插入,后跟一个删除,最后是一个存储过程执行。 此外,还可以针对不同的数据库表或视图执行不同的操作。 有关适配器如何支持复合操作的详细信息,请参阅 对复合操作的支持。 有关复合操作的 SOAP 消息的结构的信息,请参阅 复合操作的消息架构。
如何在 Oracle 数据库上执行复合操作?
使用具有 BizTalk Server 的 Oracle 电子商务适配器对 Oracle 数据库执行操作涉及构建基块以创建 Oracle E-Business Suite 应用程序中所述的过程性任务。 若要对 Oracle 数据库执行复合操作,这些任务包括:
在 Visual Studio 中创建 BizTalk 项目,并为要调用的所有操作生成架构。
手动创建一个架构文件,其中包含对在上一步中生成的所有架构的引用。
在 BizTalk 项目中创建消息,以便从 Oracle 数据库发送和接收消息。 这些消息必须符合在上一步中创建的请求和响应架构。
创建业务流程以调用 Oracle 数据库上的复合操作。
生成和部署 BizTalk 项目。
通过创建物理发送和接收端口来配置 BizTalk 应用程序。
启动 BizTalk 应用程序。
本主题提供有关如何执行这些任务的说明。
生成架构
在本主题中,为了演示如何执行复合操作,我们将按相同的顺序执行以下任务:
将记录插入 ACCOUNTACTIVITY 表。
通过在 ACCOUNT_PKG 包中调用GET_ALL_ACTIVITY过程,检索 ACCOUNTACTIVITY 表中的所有记录。
从 ACCOUNTACTIVITY 表中删除记录。
运行随示例一起提供的脚本以创建 ACCOUNTACTIVITY 表。 有关示例的详细信息,请参阅 示例。
必须创建 BizTalk 项目并使用“使用适配器服务加载项”生成架构。 有关如何生成架构的详细信息,请参阅 在 Visual Studio 中检索 Oracle 电子商务套件操作的元数据 。
创建复合架构定义
现在必须在 Visual Studio BizTalk 项目中创建一个复合架构,该架构引用为单个操作创建的架构。 执行以下步骤来创建复合架构定义。
添加复合架构定义
将架构文件添加到 Visual Studio 中的 BizTalk 项目。 右键单击解决方案名称,指向 “添加”,然后单击“ 新建项”。 在“ 添加新项 ”对话框中的“ 类别 ”框中,单击“ 架构文件”。 在 “模板 ”框中,单击“ 架构”。 指定架构文件的名称,然后单击“ 确定”。
对于此示例,将架构文件名指定为
CompositeSchema.xsd
。添加对为要执行的不同操作生成的架构的引用。 在此示例中,为操作生成的不同架构包括:
OracleEBSBinding.xsd,用于对 ACCOUNTACTIVITY 表执行插入和删除操作。
OracleEBSBinding2.xsd,用于GET_ALL_ACTIVITY过程。
添加引用:
右键单击 CompositeSchema.xsd 中的根 <架构> 节点,然后单击“ 属性”。
在“属性”框中,单击“导入”属性 (...) 省略号按钮。
在“ 导入 ”对话框中,从“ 将新架构导入为 ”列表中,选择“ XSD 导入”,然后单击“ 添加”。
在 “BizTalk 类型选取器 ”对话框中,展开 BizTalk 项目名称节点,展开 “架构”,然后选择要导入的架构。 对于此示例,请选择“ <BizTalk_project_name>”。OracleEBSBinding.xsd。 单击 “确定” 。
重复此步骤以导入 <BizTalk_project_name>。OracleEBSBinding2.xsd 也一样。
在“ 导入 ”对话框中,单击“ 确定”。
将两个子节点添加到根架构节点。 一个子节点对应于执行复合操作的请求架构。 另一个子节点对应于响应架构。 与请求架构相对应的节点可以具有任何名称。 与响应架构相对应的节点必须request_schema_node>响应调用<。 对于此示例,我们将请求架构节点称为 Request。 因此,响应架构节点称为 RequestResponse。
注意
默认情况下, 根 节点也会添加到新的架构文件中。 可以将 根 节点重命名为 “请求”。 若要重命名节点,请右键单击节点名称,然后单击“ 重命名”。
在“架构>”节点下<添加节点:
右键单击“架构”<>节点,指向“插入架构节点”,然后单击“子记录”。
将新节点重命名为 RequestResponse。
在 “请求” 节点下添加子节点,这些节点对应于将作为复合操作一部分执行的每个操作的请求架构。 对于此示例,必须添加对应于以下内容的子节点:
对 ACCOUNTACTIVITY 表执行插入和删除操作。
GET_ALL_ACTIVITY过程。
重要
必须按照要执行操作的相同顺序添加节点。 例如,如果要插入记录,则执行存储过程,然后删除记录,必须先为 Insert 操作添加一个节点,然后为存储过程添加一个节点,最后添加一个用于 Delete 操作的节点。
将子节点添加到 “请求 ”节点:
右键单击“ 请求 ”节点,指向“ 插入架构节点”,然后单击“ 子记录”。
插入架构
重命名记录,以对应于作为复合操作一部分执行的操作的请求架构。 例如,将节点重命名为“Insert”。
将 Insert 节点映射到 ACCOUNTACTIVITY 表上 Insert 操作的请求架构。 为此,请右键单击“ 插入 ”节点,然后单击“ 属性”。 在 “属性” 框中,从“ 数据结构类型 ”列表中选择“ 插入 (引用) ”。
重复这些步骤,为GET_ALL_ACTIVITY存储过程和删除操作的请求架构添加节点。 指定节点名称并将其映射到下表中提到的相应架构。
节点名称 映射到架构 GET_ALL_ACTIVITY GET_ALL_ACTIVITY (参考) 删除 删除 (引用)
在 RequestResponse 节点下添加子节点,这些节点对应于将作为复合操作一部分执行的每个操作的响应架构。 对于此示例,必须添加对应于以下内容的子节点:
对 ACCOUNTACTIVITY 表执行插入和删除操作。
GET_ALL_ACTIVITY存储过程。
重要
必须按照与 请求 节点下的子节点相同的顺序添加子节点。
将子节点添加到 RequestResponse 节点:
右键单击 RequestResponse 节点,指向 “插入架构节点”,然后单击“ 子记录”。
重命名记录,使其对应于作为复合操作的一部分执行的操作的响应架构。 例如,将节点重命名为“InsertResponse”。
将 InsertResponse 节点映射到 ACCOUNTACTIVITY 表上的 Insert 操作的响应架构。 为此,请右键单击“ InsertResponse ”节点,然后单击“ 属性”。 在 “属性 ”框中的“ 数据结构类型 ”列表中,选择“ InsertResponse (引用) ”。
重复这些步骤,为GET_ALL_ACTIVITY存储过程和 Delete 操作的响应架构添加节点。 指定节点名称并将其映射到下表中提到的相应架构。
节点名称 映射到架构 GET_ALL_ACTIVITYResponse GET_ALL_ACTIVITYResponse (参考) DeleteResponse DeleteResponse (参考)
保存 CompositeSchema.xsd 文件。
定义消息和消息类型
在上一步中创建的复合架构描述了业务流程中消息所需的“类型”。 消息通常是一个变量,其类型由相应的架构定义。 现在必须为业务流程创建消息,并将其链接到在上一步中创建的架构。
创建消息并链接到架构
在 Visual Studio 中将业务流程添加到 BizTalk 项目。 从 解决方案资源管理器,右键单击 BizTalk 项目名称,指向“添加”,然后单击“新建项”。 键入 BizTalk 业务流程的名称,并单击“ 添加”。
打开 BizTalk 项目的“业务流程视图”窗口(如果尚未打开该窗口)。 为此,请单击“ 视图”,指向 “其他窗口”,然后单击“ 业务流程视图”。
在“业务流程视图”中,右键单击“ 消息”,然后单击“ 新建消息”。
右键单击新创建的消息,然后选择“ 属性窗口”。
在Message_1的“属性”窗格中,执行以下操作:
使用此选项 要执行此操作 标识符 键入 Request
消息类型 从下拉列表中展开“ 架构”,然后选择“ Composite_Op.CompositeSchema.Request”,其中“Composite_Op”是 BizTalk 项目的名称。 CompositeSchema 是为复合操作手动创建的架构。 重复步骤 2 以创建新消息。 在新邮件的“ 属性 ”窗格中,执行以下操作:
使用此选项 要执行此操作 标识符 键入 Response
消息类型 从下拉列表中展开“ 架构”,然后选择 “Composite_Op.CompositeSchema.RequestResponse”。
设置业务流程
必须创建 BizTalk 业务流程才能使用 BizTalk Server 在 Oracle 数据库上执行复合操作。 在此业务流程中,会在定义的接收位置放置请求消息。 请求消息必须符合前面创建的复合架构。 Oracle 电子商务适配器使用此消息并将其传递到 Oracle 数据库。 来自 Oracle 数据库的响应将保存到另一个位置。 必须包含“发送和接收”形状,才能分别将消息发送到 Oracle 数据库和接收响应。 用于执行复合操作的基本业务流程如下所示:
添加消息形状
请确保为每个邮件形状指定以下属性。 “形状”列中列出的名称是刚才提到的业务流程中显示的消息形状的名称。
形状 | 形状类型 | 属性 |
---|---|---|
ReceiveMessage | 接收 | - 将 Name 设置为 ReceiveMessage - 将 “激活” 设置为 “True” |
SendMessage | 发送 | - 将 “名称” 设置为 SendMessage |
ReceiveResponse | 接收 | - 将 Name 设置为 ReceiveResponse - 将 “激活” 设置为 “False” |
SendResponse | 发送 | - 将 “名称” 设置为 SendResponse |
添加端口
请确保为每个逻辑端口指定以下属性。 “端口”列中列出的名称是业务流程中显示的端口名称。
端口 | 属性 |
---|---|
MessageIn | - 将 标识符 设置为 MessageIn - 将 Type 设置为 MessageInType - 将 通信模式 设置为 单向 - 将 通信方向 设置为 接收 |
LOBPort | - 将 标识符 设置为 LOBPort - 将 Type 设置为 LOBPortType - 将 通信模式 设置为 请求-响应 - 将 通信方向 设置为 “发送-接收” |
ResponseOut | - 将 标识符 设置为 ResponseOut - 将 Type 设置为 ResponseOutType - 将 通信模式 设置为 单向 - 将 “通信方向 ”设置为 “发送” |
指定操作形状的消息,并将其连接到端口
下表指定了应设置的属性及其值,以便为操作形状指定消息并将消息链接到端口。 “形状”列中列出的名称是前面提到的业务流程中显示的消息形状的名称。
形状 | 属性 |
---|---|
ReceiveMessage | - 将 “消息 ”设置为 “请求” - 将 操作 设置为 MessageIn.CompositeOp.Request |
SendMessage | - 将 “消息 ”设置为 “请求” - 将 操作 设置为 LOBPort.CompositeOp.Request |
ReceiveResponse | - 将 消息 设置为 响应 - 将 操作 设置为 LOBPort.CompositeOp.Response |
SendResponse | - 将 消息 设置为 响应 - 将 操作 设置为 ResponseOut.CompositeOp.Request |
指定这些属性后,将连接消息形状和端口,并且业务流程已完成。
现在必须生成 BizTalk 解决方案并将其部署到BizTalk Server。 有关详细信息,请参阅 生成和运行业务流程。
配置 BizTalk 应用程序
部署 BizTalk 项目后,前面创建的业务流程将列在 BizTalk Server 管理控制台的“业务流程”窗格中。 必须使用 BizTalk Server 管理控制台来配置应用程序。 有关演练,请参阅 演练:部署基本 BizTalk 应用程序。
配置应用程序涉及:
为应用程序选择主机。
将业务流程中创建的端口映射到 BizTalk Server 管理控制台中的物理端口。 对于此业务流程,必须:
在硬盘上定义一个位置和相应的文件端口,你将在其中放置请求消息。 BizTalk 业务流程将使用请求消息并将其发送到 Oracle 数据库。
在硬盘上定义一个位置和相应的文件端口,BizTalk 业务流程将删除包含来自 Oracle 数据库的响应的响应消息。
定义物理 WCF-Custom 或 WCF-OracleEBS 发送端口以将消息发送到 Oracle 数据库。 由于作为复合操作一部分的操作在单个事务中执行,因此请确保 UseAmbientTransaction 绑定属性设置为 True。
还必须在发送端口中指定操作。 复合操作的操作为“CompositeOperation”。 有关如何创建端口的信息,请参阅 手动配置到 Oracle 电子商务适配器的物理端口绑定。 有关如何为端口指定操作的详细信息,请参阅 为 Oracle E-Business Suite 配置 SOAP 操作。
重要
作为复合操作的一部分,如果要对属于 Oracle 电子商务套件应用程序的对象(例如存储过程、函数、接口表或接口视图)执行操作,则必须通过指定必要的绑定属性来设置应用程序上下文。 有关设置应用程序上下文的详细信息,请参阅 设置应用程序上下文。
可以通过指定绑定属性或通过设置 Oracle 电子商务适配器公开的消息上下文属性来设置应用程序上下文。 有关如何设置绑定属性的说明,请参阅 配置 Oracle 电子商务套件的绑定属性。 有关如何使用消息上下文属性设置应用程序上下文的说明,请参阅 在 Oracle 电子商务套件中使用消息上下文属性配置应用程序上下文。
注意
使用使用适配器服务 BizTalk 项目外接程序生成架构还会创建一个绑定文件,其中包含有关要为这些端口设置的端口和操作的信息。 可以从 BizTalk Server 管理控制台导入此绑定文件,为出站呼叫创建发送端口 () 或接收) 入站呼叫 (端口。 有关详细信息,请参阅 使用 Oracle E-Business Suite 的端口绑定文件配置物理端口绑定。 如果导入此绑定文件,则发送端口上的操作将设置为动态操作,涉及生成架构时在“使用适配器服务外接程序”中选择的所有操作。 对于复合操作,必须将动态操作替换为“CompositeOperation”。
启动应用程序
必须启动 BizTalk 应用程序才能对 Oracle 数据库执行复合操作。 有关启动 BizTalk 应用程序的说明,请参阅 如何启动业务流程。
在此阶段,请确保:
用于接收业务流程请求消息的 FILE 接收端口正在运行。
用于从业务流程接收响应消息的 FILE 发送端口正在运行。
用于将消息发送到 Oracle 数据库的 WCF-Custom 或 WCF-OracleEBS 发送端口正在运行。
操作的 BizTalk 业务流程正在运行。
执行操作
运行应用程序后,必须将请求消息删除到 FILE 接收位置。 请求消息的架构必须符合前面创建的复合操作的架构。 例如,在 ACCOUNTACTIVITY 表中插入记录、调用GET_ALL_ACTIVITY存储过程并从 ACCOUNTACTIVITY 表中删除记录的请求消息为:
<Request xmlns="http://Composite_Op.CompositeSchema">
<Insert xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/Tables/SCOTT/ACCOUNTACTIVITY">
<RECORDSET>
<InsertRecord xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/TableViewRecord/SCOTT/ACCOUNTACTIVITY">
<TID InlineValue="tid_seq.nextval"></TID>
<ACCOUNT>100001</ACCOUNT>
<AMOUNT>1500</AMOUNT>
<DESCRIPTION></DESCRIPTION>
<TRANSDATE InlineValue="sysdate">1999-05-31T13:20:00</TRANSDATE>
<PROCESSED>n</PROCESSED>
</InsertRecord>
</RECORDSET>
</Insert>
<GET_ALL_ACTIVITY xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/PackageApis/SCOTT/ACCOUNT_PKG" />
<Delete xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/Tables/SCOTT/ACCOUNTACTIVITY">
<FILTER>WHERE AMOUNT = 1500</FILTER>
</Delete>
</Request>
前面的请求消息首先插入一条记录,然后调用GET_ALL_ACTIVITY过程以获取 ACCOUNTACTIVITY 表中的所有记录。 然后,通过指定 FILTER 子句删除插入的记录。 有关使用 Oracle 电子商务适配器在 Oracle 数据库上执行复合操作的请求消息架构的详细信息,请参阅复合操作的消息架构。
注意
在前面的消息中,插入操作的摘录使用“InlineValue”属性。 有关“InlineValue”属性的详细信息,请参阅 插入、更新、删除和选择操作的消息架构中插入操作的架构说明。
业务流程使用该消息并将其发送到 Oracle 数据库。 来自 Oracle 数据库的响应保存在定义为业务流程一部分的其他 FILE 位置。 例如,Oracle 数据库对上述请求消息的响应如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<RequestResponse xmlns="http://Composite_Op.CompositeSchema">
<InsertResponse xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/Tables/SCOTT/ACCOUNTACTIVITY">
<InsertResult>1</InsertResult>
</InsertResponse>
<GET_ALL_ACTIVITYResponse xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/PackageApis/SCOTT/ACCOUNT_PKG">
<ALLRECS>
<xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element msdata:IsDataSet="true" name="NewDataSet">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="NewTable">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="TID" type="xs:decimal" />
<xs:element minOccurs="0" name="ACCOUNT" type="xs:decimal" />
<xs:element minOccurs="0" name="AMOUNT" type="xs:decimal" />
<xs:element minOccurs="0" name="DESCRIPTION" type="xs:string" />
<xs:element minOccurs="0" name="TRANSDATE" type="xs:dateTime" />
<xs:element minOccurs="0" name="PROCESSED" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<NewTable>
......
......
</NewTable>
......
......
<NewTable>
<TID>10</TID>
<ACCOUNT>100001</ACCOUNT>
<AMOUNT>1000</AMOUNT>
<TRANSDATE>2008-07-28T21:39:57</TRANSDATE>
<PROCESSED>n</PROCESSED>
</NewTable>
</NewDataSet>
</diffgr:diffgram>
</ALLRECS>
</GET_ALL_ACTIVITYResponse>
<DeleteResponse xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/Tables/SCOTT/ACCOUNTACTIVITY">
<DeleteResult>1</DeleteResult>
</DeleteResponse>
</RequestResponse>
前面的响应包含多个结果集,这些结果集对应于作为复合操作的一部分执行的不同操作。 例如, InsertResult
元素包含“1”,指示 Insert 操作插入的行数。 同样, DeleteResult
元素包含“1”,指示 Delete 操作删除的行数。
重要
如果在执行复合操作时遇到超时问题,可能是因为连接数小于复合操作中的操作数,涉及:
包含 BFILE、BLOB、CLOB、NCLOB 和 REF CURSOR 作为 OUT 或 IN OUT 参数的存储过程。
- 选择操作。
若要解决此问题,必须确保如果复合操作中存在“n”个此类操作,则为 MinPoolSize 绑定属性指定的值为“n+1”或更大。 有关 MinPoolSize 绑定属性的详细信息,请参阅 阅读有关 Oracle 电子商务套件绑定属性的 BizTalk 适配器。
最佳实践
部署并配置 BizTalk 项目后,可以将配置设置导出到名为绑定文件的 XML 文件。 生成绑定文件后,可以从文件导入配置设置,这样就无需为同一业务流程创建诸如发送端口和接收端口之类的项。 有关绑定文件的详细信息,请参阅 在 Oracle E-Business Suite 中重复使用适配器绑定。