使用 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 客户端以对表执行操作

  1. 在 Visual Studio 中创建 Visual C# 项目。 对于本主题,请创建控制台应用程序。

  2. 为 MS_SAMPLE_EMPLOYEE 接口表上的 Insert、Select、Update 和 Delete 操作生成 WCF 客户端类。 有关生成 WCF 客户端类的详细信息,请参阅 为 Oracle 电子商务套件解决方案项目生成 WCF 客户端或 WCF 服务协定

    重要

    在生成 WCF 客户端类之前,请确保将 EnableBizTalkCompatibilityMode 绑定属性设置为 false。

  3. 在解决方案资源管理器,添加对 和 Microsoft.ServiceModel.ChannelsMicrosoft.Adapters.OracleEBS引用。

  4. 打开 Program.cs 文件并添加以下命名空间:

    • Microsoft.Adapters.OracleEBS

    • System.ServiceModel

  5. 打开 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 配置客户端绑定

  6. 设置客户端的凭据。

    client.ClientCredentials.UserName.UserName = "myuser";  
    client.ClientCredentials.UserName.Password = "mypassword";  
    
  7. 由于正在对接口表执行操作,因此必须设置应用程序上下文。 在此示例中,若要设置应用程序上下文,请指定 OracleUserNameOraclePasswordOracleEBSResponsibilityName 绑定属性。 有关应用程序上下文的详细信息,请参阅 设置应用程序上下文

    binding.OracleUserName = "myOracleEBSUserName";  
    binding.OraclePassword = "myOracleEBSPassword";  
    binding.OracleEBSResponsibilityName = "myOracleEBSResponsibility";  
    
  8. 打开客户端,如以下代码片段中所述:

    try  
    {  
       Console.WriteLine("Opening Client...");  
       client.Open();  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
  9. 对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();  
    
    

    也可以替换前面的代码片段来执行选择、更新或删除操作。 还可以追加代码片段,以在单个应用程序中执行所有操作。 有关如何执行这些操作的代码片段,请参阅分别 选择操作更新操作删除操作

  10. 关闭客户端,如以下代码片段中所述:

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  11. 生成项目,然后运行它。 应用程序在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();  

另请参阅

使用 WCF 服务模型开发 Oracle E-Business Suite 应用程序