使用 WCF 通道模型对 Oracle E-Business Suite 中的接口表运行插入操作
Oracle 电子商务适配器发现一组对 Oracle E-Business Suite 接口表的“插入”、“选择”、“更新”和“删除”操作。 通过使用这些操作,可以对目标接口表执行由 Where 子句限定的简单 Insert、Select、Update 和 Delete 语句。 本主题提供有关如何使用 WCF 通道模型对接口表执行 Insert 操作的说明。
有关适配器如何支持这些操作的详细信息,请参阅 接口表和接口视图上的操作。 有关如何使用 WCF 通道模型对 Oracle E-Business Suite 执行操作的详细信息,请参阅 使用 Oracle E-Business Suite 适配器的 WCF 通道模型概述。
关于本主题中使用的示例
本主题中的示例对 MS_SAMPLE_EMPLOYEE 接口表执行操作。 表是通过运行示例提供的脚本创建的。 有关示例的详细信息,请参阅 Oracle EBS 适配器的示例。 基于本主题的示例 InsertOperation 也随 Oracle E-Business 适配器示例一起提供。
插入消息
若要使用 WCF 通道模型在 Oracle E-Business Suite 上执行操作,必须具有特定于该操作的请求消息。 对MS_SAMPLE_EMPLOYEE接口表执行 Insert 操作的请求消息如下所示:
<Insert xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/InterfaceTables/FND/APPS/MS_SAMPLE_EMPLOYEE">
<RECORDSET>
<InsertRecord xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/TableViewRecord/APPS/MS_SAMPLE_EMPLOYEE">
<EMP_NO>10050</EMP_NO>
<NAME>John Smith</NAME>
<DESIGNATION>Manager</DESIGNATION>
<SALARY>500000</SALARY>
<JOIN_DATE>1999-05-31</JOIN_DATE>
</InsertRecord>
</RECORDSET>
</Insert>
此请求消息插入包含以下详细信息的记录:
Employee Number = 10050
Name = Tom Smith
Designation = Manager
Salary = 500000
必须将消息复制到文件,例如 InsertRequest.xml。 此示例中使用此文件使用 Oracle 电子商务适配器将请求消息发送到 Oracle 电子商务套件。 有关表操作的消息架构的详细信息,请参阅 用于插入、更新、删除和选择操作的消息架构。
创建 WCF 通道应用程序
本部分提供有关如何创建 WCF 通道应用程序以对MS_SAMPLE_EMPLOYEE接口表执行 Insert 操作的说明。
创建用于将记录插入表中的 WCF 通道应用程序
在 Visual Studio 中创建 Visual C# 项目。 对于本主题,请创建控制台应用程序。
在解决方案资源管理器中添加对
Microsoft.Adapters.OracleEBS
、Microsoft.ServiceModel.Channels
、System.ServiceModel
和 的System.Runtime.Serialization
引用。打开 Program.cs 文件并添加以下命名空间:
Microsoft.Adapters.OracleEBS
Microsoft.ServiceModel.Channels
System.ServiceModel
System.ServiceModel.Channels
System.Xml
创建绑定和终结点。
OracleEBSBinding binding = new OracleEBSBinding(); EndpointAddress address = new EndpointAddress("oracleebs://ebs_instance_name");
由于要对接口表执行操作,因此必须设置应用程序上下文。 在此示例中,若要设置应用程序上下文,请指定 OracleUserName、 OraclePassword 和 OracleEBSResponsibilityName 绑定属性。 有关应用程序上下文的详细信息,请参阅 设置应用程序上下文。
binding.OracleUserName = "myOracleEBSUserName"; binding.OraclePassword = "myOracleEBSPassword"; binding.OracleEBSResponsibilityName = "myOracleEBSResponsibility";
创建并打开通道工厂。 此应用程序将请求消息发送到 Oracle E-Business Suite 并接收响应,因此必须实现 IRequestChannel 接口。
ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>(binding, address); factory.Credentials.UserName.UserName = "<Enter user name here>"; factory.Credentials.UserName.Password = "<Enter password here>"; factory.Open();
创建并打开通道。
IRequestChannel channel; try { channel = factory.CreateChannel(); channel.Open(); } catch (Exception ex) { Console.WriteLine("Exception :" + ex.Message); throw; }
创建并发送请求消息。
XmlReader readerIn; try { readerIn = XmlReader.Create("InsertRequest.xml"); Console.WriteLine("Reader created"); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; } Message messageIn; Message messageOut; try { messageIn = Message.CreateMessage(MessageVersion.Default, "InterfaceTables/Insert/FND/APPS/MS_SAMPLE_EMPLOYEE", readerIn); messageOut = channel.Request(messageIn); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }
创建请求消息时,必须指定指示适配器对接口表执行的操作的消息操作。 若要对MS_SAMPLE_EMPLOYEE表执行 Insert 操作,消息操作为
InterfaceTables/Insert/FND/APPS/MS_SAMPLE_EMPLOYEE
。 有关如何确定对表的各种操作的消息操作的信息,请参阅 插入、更新、删除和选择操作的消息架构。获取响应消息。
XmlReader readerOut = messageOut.GetReaderAtBodyContents(); XmlDocument doc = new XmlDocument(); doc.Load(readerOut); doc.Save("C:\\Response.xml");
关闭消息、通道和通道工厂。
messageOut.Close(); channel.Close(); factory.Close();
生成项目。 生成项目后,必须将请求消息(InsertRequest.xml)复制到项目可执行文件所在的同一位置。 通常,此位置在项目目录下为 \bin\Debug\。
运行应用程序。 响应消息 Response.xml 保存在应用程序中指定的位置。 响应消息包含插入的数字或记录,如下所示:
<InsertResponse xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/InterfaceTables/FND/APPS/MS_SAMPLE_EMPLOYEE"> <InsertResult>1</InsertResult> </InsertResponse>
值“1”表示将单个记录插入到MS_SAMPLE_EMPLOYEE表中。