使用 WCF 服务模型对接口表和视图执行插入、更新、删除或选择操作
Oracle 电子商务适配器发现接口表上的一组基本插入、选择、更新和删除操作。 通过使用这些操作,可以对目标接口表执行由 WHERE 子句限定的简单 Insert、Select、Update 和 Delete 语句。 本主题提供有关如何使用 WCF 服务模型执行这些操作的说明。
注意
Oracle 电子商务适配器仅支持对接口视图执行 Select 操作。
有关适配器如何支持这些操作的详细信息,请参阅 接口表和接口视图上的操作。
关于本主题中使用的示例
本主题中的示例对 MS_SAMPLE_EMPLOYEE 接口表执行操作。 表是通过运行示例提供的脚本创建的。 有关示例的详细信息,请参阅 Oracle EBS 适配器的示例。 基于本主题的示例 Interface_Table_Ops 也随 Oracle 电子商务适配器示例一起提供。
WCF 客户端类
为 Oracle 电子商务适配器发现的基本操作生成的 WCF 客户端的名称基于表或视图的名称,如下表所示。
项目 | WCF 客户端名称 |
---|---|
接口表 | InterfaceTables_[APP_NAME][SCHEMA]\[TABLE_NAME]Client |
接口视图 | InterfaceViews_[APP_NAME][SCHEMA]\[VIEW_NAME]Client |
[APP_NAME] = Oracle 电子商务套件应用程序的实际名称;例如 FND。
[SCHEMA] = 项目集合;例如,APPS。
[TABLE_NAME] = 表的名称;例如,MS_SAMPLE_EMPLOYEE。
[VIEW_NAME] = 视图的名称;例如,MS_SAMPLE_EMPLOYEE_View。
对表调用操作的方法签名
下表显示了对表的基本操作的方法签名。 视图的签名相同,只是视图命名空间和名称替换了表的签名。
操作 | 方法签名 |
---|---|
插入 | string Insert (InsertRecord[] RECORDSET) ; |
Select | SelectRecord[] select (string COLUMN_NAMES,string FILTER) ; |
更新 | string Update (UpdateRecord RECORDSET, string FILTER) ; |
删除 | string delete (string FILTER) ; |
例如,以下代码显示了为默认 APPS 架构下的 MS_SAMPLE_EMPLOYEE 接口表上的删除、插入、选择和更新操作生成的 WCF 客户端类的方法签名。
public partial class InterfaceTables_FND_APPS_MS_SAMPLE_EMPLOYEEClient : System.ServiceModel.ClientBase<InterfaceTables_FND_APPS_MS_SAMPLE_EMPLOYEE>, InterfaceTables_FND_APPS_MS_SAMPLE_EMPLOYEE {
public SelectRecord[] Select(string COLUMN_NAMES, string FILTER);
public string Insert(InsertRecord[] RECORDSET);
public string Update(UpdateRecord RECORDSET, string FILTER);
public string Delete(string FILTER);
}
在此代码片段 中,InterfaceTables_FND_APPS_MS_SAMPLE_EMPLOYEEClient 是添加适配器服务引用插件生成的 OracleEBSBindingClient.cs 中 WCF 类的名称。
表操作的参数
本部分提供每个表操作所需的参数
选择操作
COLUMN_NAMES | FILTER |
---|---|
目标中以逗号分隔的列名列表;例如,“EMP_NO,指定”。 列列表指定应在结果集中返回的目标列。 未在列列表中指定的列将在返回的记录集中设置为其 .NET 默认值。 对于 nillable 列,此值为 null。 | 指定查询的目标行的 WHERE 子句的内容;例如,“指定 = 'Manager'”。 可以将此参数设置为 null 以返回目标的所有行。 |
Select 操作的返回值是包含指定列和行的强类型结果集。
插入操作
插入操作类型 | 记录 |
---|---|
多条记录 | 应插入表中的 INSERTRECORDS 的集合。 |
Insert 操作的返回值是插入的行数。
更新操作
记录 | FILTER |
---|---|
应在表中更新的记录的集合。 | 指定查询的目标行的 WHERE 子句的内容;例如,“指定 = 'Manager'”。 可以将此参数设置为 null 以返回目标的所有行。 |
Update 操作的返回值是更新的行数。
删除操作
Delete 操作采用 WHERE 子句作为输入,该子句指定要删除的行。 Delete 操作的返回值是删除的行数。
创建 WCF 客户端以调用对接口表和接口视图的操作
使用 WCF 客户端在 Oracle 电子商务套件上执行操作所需的通用操作集涉及 使用 Oracle 电子商务套件适配器的 WCF 通道模型概述中所述的一组任务。 本部分介绍如何创建 WCF 客户端以调用接口表上的基本插入、选择、更新、删除操作。
创建 WCF 客户端以对表执行操作
在 Visual Studio 中创建 Visual C# 项目。 对于本主题,请创建控制台应用程序。
为 MS_SAMPLE_EMPLOYEE 接口表上的 Insert、Select、Update 和 Delete 操作生成 WCF 客户端类。 有关生成 WCF 客户端类的详细信息,请参阅 为 Oracle 电子商务套件解决方案项目生成 WCF 客户端或 WCF 服务协定。
重要
在生成 WCF 客户端类之前,请确保将 EnableBizTalkCompatibilityMode 绑定属性设置为 false。
在解决方案资源管理器,添加对 和
Microsoft.ServiceModel.Channels
的Microsoft.Adapters.OracleEBS
引用。打开 Program.cs 文件并添加以下命名空间:
Microsoft.Adapters.OracleEBS
System.ServiceModel
打开 Program.cs 文件并创建客户端,如以下代码片段中所述。
OracleEBSBinding binding = new OracleEBSBinding(); EndpointAddress address = new EndpointAddress("oracleebs://ebs_instance_name"); InterfaceTables_FND_APPS_MS_SAMPLE_EMPLOYEEClient client = new InterfaceTables_FND_APPS_MS_SAMPLE_EMPLOYEEClient(binding, address);
在此代码片段中,
InterfaceTables_FND_APPS_MS_SAMPLE_EMPLOYEEClient
是在 OracleEBSBindingClient.cs 中定义的 WCF 客户端。 此文件由添加适配器服务引用插件生成。注意
在此代码片段中,在应用程序代码中显式指定绑定和终结点地址。 可以使用应用程序配置文件(app.config)中的这些值,这些值也由添加适配器服务引用插件生成。 有关指定客户端绑定的不同方法的详细信息,请参阅 为 Oracle E-Business Suite 配置客户端绑定。
设置客户端的凭据。
client.ClientCredentials.UserName.UserName = "myuser"; client.ClientCredentials.UserName.Password = "mypassword";
由于正在对接口表执行操作,因此必须设置应用程序上下文。 在此示例中,若要设置应用程序上下文,请指定 OracleUserName、 OraclePassword 和 OracleEBSResponsibilityName 绑定属性。 有关应用程序上下文的详细信息,请参阅 设置应用程序上下文。
binding.OracleUserName = "myOracleEBSUserName"; binding.OraclePassword = "myOracleEBSPassword"; binding.OracleEBSResponsibilityName = "myOracleEBSResponsibility";
打开客户端,如以下代码片段中所述:
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }
对MS_SAMPLE_EMPLOYEE表调用 Insert 操作。
Console.WriteLine("The application will insert a record in the MS_SAMPLE_EMPLOYEE interface table"); // The date values cannot contain time zone information. Hence, you must use // DateTimeKind.Unspecified to not include the time zone information. DateTime date = new DateTime(DateTime.Now.Ticks, DateTimeKind.Unspecified); string result; InsertRecord[] recordSet = new InsertRecord[1]; EMP_NO__COMPLEX_TYPE emp_no = new EMP_NO__COMPLEX_TYPE(); emp_no.Value = "10007"; NAME__COMPLEX_TYPE name = new NAME__COMPLEX_TYPE(); name.Value = "John Smith"; DESIGNATION__COMPLEX_TYPE desig = new DESIGNATION__COMPLEX_TYPE(); desig.Value = "Manager"; SALARY__COMPLEX_TYPE salary = new SALARY__COMPLEX_TYPE(); salary.Value = "500000"; JOIN_DATE__COMPLEX_TYPE doj = new JOIN_DATE__COMPLEX_TYPE(); doj.Value = date; recordSet[0] = new InsertRecord(); recordSet[0].EMP_NO = emp_no; recordSet[0].NAME = name; recordSet[0].DESIGNATION = desig; recordSet[0].SALARY = salary; recordSet[0].JOIN_DATE = doj; try { result = client.Insert(recordSet); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; } Console.WriteLine("Number of records inserted= " + result); Console.WriteLine("Press any key to continue..."); Console.ReadLine();
也可以替换前面的代码片段来执行选择、更新或删除操作。 还可以追加代码片段,以在单个应用程序中执行所有操作。 有关如何执行这些操作的代码片段,请参阅分别 选择操作、 更新操作和 删除操作 。
关闭客户端,如以下代码片段中所述:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
生成项目,然后运行它。 应用程序在MS_SAMPLE_EMPLOYEE表中插入记录。
选择操作
以下代码演示了一个以 MS_SAMPLE_EMPLOYEE 接口表为目标的 Select 操作。 Select 操作选择插入表中的最后一条记录。 返回的记录将写入控制台。
Console.WriteLine("The application will now select the last inserted record");
SelectRecord[] selectRecords;
try
{
selectRecords = client.Select("*", "WHERE EMP_NO LIKE 10007");
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
throw;
}
Console.WriteLine("The details of the newly added employee are:");
Console.WriteLine("********************************************");
for (int i = 0; i < selectRecords.Length; i++)
{
Console.WriteLine("Employee ID : " + selectRecords[i].EMP_NO);
Console.WriteLine("Employee Name : " + selectRecords[i].NAME);
Console.WriteLine("Employee Desigation : " + selectRecords[i].DESIGNATION);
Console.WriteLine("Employee Salary : " + selectRecords[i].SALARY);
Console.WriteLine();
}
Console.WriteLine("********************************************");
Console.WriteLine("Press any key to continue ...");
Console.ReadLine();
更新操作
以下代码演示了面向 MS_SAMPLE_EMPLOYEE 接口表的 Update 操作。
Console.WriteLine("The application will now update the employee name in the newly inserted record");
string recordsUpdated;
UpdateRecord updateRecordSet = new UpdateRecord();
updateRecordSet.NAME = "Tom Smith";
updateRecordSet.DESIGNATION = "Accountant";
try
{
recordsUpdated = client.Update(updateRecordSet, "WHERE EMP_NO LIKE 10007");
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
throw;
}
Console.WriteLine("No of records updated: " + recordsUpdated);
Console.WriteLine("Press any key to continue...");
Console.ReadLine();
删除操作
以下代码演示了一个针对 MS_SAMPLE_EMPLOYEE 接口表的 Delete 操作。
Console.WriteLine("The sample will now delete the record that it first inserted");
string deletedRecords;
try
{
deletedRecords = client.Delete("WHERE EMP_NO LIKE 10007");
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
throw;
}
Console.WriteLine("No of records deleted: " + deletedRecords);
Console.WriteLine("Press any key to exit...");
Console.ReadLine();