使用 WCF 服务模型在 Oracle E-Business Suite 中调用并发程序

Oracle E-Business Suite 公开了可以执行的并发程序,以便对 Oracle 应用程序执行特定操作。 每个 Oracle 应用程序都有一组标准并发程序 (,这些程序在所有操作) 和特定于 Oracle 应用程序的某些并发程序中都是相同的。 Oracle E-Business 适配器将所有并发程序公开为适配器客户端可以调用的操作。 有关适配器如何支持并发程序的详细信息,请参阅 对并发程序的操作

注意

对于不公开其元数据的并发程序,Oracle 电子商务适配器会为每个并发程序公开 100 个可选参数。 若要成功调用这些并发程序,用户必须查阅 Oracle 电子商务套件文档,找出需要值的并发程序的参数,然后指定这些参数。 此类并发程序的一个示例是日记导入 (实际名称:总帐应用程序中的 GLLEZL) 。

关于本主题中使用的示例

本主题中的示例调用 MS_SAMPLE_COPY_EMP_DATA 并发程序,然后 调用Get_Status 并发程序,以了解第一个并发程序的状态。 这些并发程序是从 应用程序对象库 应用程序调用的。 MS_SAMPLE_COPY_EMP_DATA是通过运行随示例一起提供的脚本创建的。 有关示例的详细信息,请参阅 Oracle EBS 适配器的示例。 基于本主题 的示例 ConcurrentProgram_ServiceModel 也随 Oracle 电子商务适配器示例一起提供。

WCF 客户端类

下表列出了为调用 Oracle 电子商务适配器的并发程序而生成的 WCF 客户端的名称。

项目 WCF 客户端名称
并发程序 ConcurrentPrograms_[APP_NAME]客户端

[APP_NAME] = Oracle 电子商务套件应用程序的实际名称;例如 FND。

调用并发程序的方法签名

下表显示了并发程序的方法签名。

操作 方法签名
并发程序 公共 <返回类型><Concurrent_program_name> (param 1、param 2、...)

例如,以下代码显示了为 MS_SAMPLE_COPY_EMP_DATAGet_Status 并发程序生成的 WCF 客户端类的方法签名。

public partial class ConcurrentPrograms_FNDClient : System.ServiceModel.ClientBase<ConcurrentPrograms_FND>, ConcurrentPrograms_FND {      
  
    public string MS_SAMPLE_COPY_EMP_DATA(schemas.microsoft.com.OracleEBS._2008._05.Options.SetOptions SetOptions,  
      schemas.microsoft.com.OracleEBS._2008._05.Options.SetPrintOptions SetPrintOptions,  
      schemas.microsoft.com.OracleEBS._2008._05.Options.SetRepeatOptions SetRepeatOptions,  
      string Description, string StartTime);  
  
    public bool GetStatusForConcurrentProgram(string RequestId, out string Phase, out string Status,  
      out string DevPhase, out string DevStatus, out string Message);  
}  

在此代码片段中, ConcurrentPrograms_FNDClient 是添加适配器服务引用插件生成的 OracleEBSBindingClient.cs 中 WCF 类的名称。 MS_SAMPLE_COPY_EMP_DATA 是调用并发程序的方法的名称。 GetStatusForConcurrentProgram 是调用并发程序以获取第一个并发程序状态的方法的名称。

注意

GetStatusForConcurrentProgramGet_Status 并发程序的实际名称。

创建 WCF 客户端以调用并发程序

使用 WCF 客户端在 Oracle 电子商务套件上执行操作所需的通用操作集涉及 使用 Oracle 电子商务套件适配器的 WCF 服务模型概述中所述的一组任务。 本节介绍如何创建 WCF 客户端来调用 MS_SAMPLE_COPY_EMP_DATAGet_Status 并发程序。

创建 WCF 客户端

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

  2. MS_SAMPLE_COPY_EMP_DATAGet_Status 并发程序生成 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");  
    ConcurrentPrograms_FNDClient client = new ConcurrentPrograms_FNDClient(binding, address);  
    

    在此代码片段中, ConcurrentPrograms_FNDClient 是在 OracleEBSBindingClient.cs 中定义的 WCF 客户端。 此文件由添加适配器服务引用插件生成。

    注意

    在此代码片段中,在应用程序代码中显式指定绑定和终结点地址。 还可以从应用程序配置文件(app.config)使用这些值,这些值也由添加适配器服务引用插件生成。 有关指定客户端绑定的不同方法的详细信息,请参阅 为 Oracle E-Business Suite 配置客户端绑定

  6. 设置客户端的凭据。

    client.ClientCredentials.UserName.UserName = "myuser";  
    client.ClientCredentials.UserName.Password = "mypassword";  
    
  7. 由于在 Oracle 电子商务套件应用程序中调用并发程序,因此必须设置应用程序上下文。 在此示例中,若要设置应用程序上下文,请指定 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_COPY_EMP_DATAGet_Status 并发程序。

    string RequestID;  
    bool Result;  
    string Phase;  
    string Status;  
    string DevPhase;  
    string DevStatus;  
    string Message;  
    
    try  
    {  
        Console.WriteLine("Invoking the MS_SAMPLE_COPY_EMP_DATA concurrent program");  
        RequestID = client.MS_SAMPLE_COPY_EMP_DATA(null, null, null, null, null);  
        Console.WriteLine("The request ID generated for the concurrent program is : " + RequestID);  
        Console.WriteLine("********************************************************");  
        Console.WriteLine("\nWaiting for 60 seconds for the concurrent program to be complete");  
        System.Threading.Thread.Sleep(60000);  
        Console.WriteLine("\nInvoking the Get_Status concurrent program");  
        Result = client.GetStatusForConcurrentProgram(RequestID, out Phase, out Status, out DevPhase, out DevStatus, out Message);  
        Console.WriteLine("\nResult is  : " + Result);  
        Console.WriteLine("Phase is     : " + Phase);  
        Console.WriteLine("Status is    : " + Status);  
        Console.WriteLine("DevPhase is  : " + DevPhase);  
        Console.WriteLine("DevStatus is : " + DevStatus);  
        Console.WriteLine("Message is   : " + Message);  
        Console.WriteLine("********************************************************");  
        Console.WriteLine("\nHit <RETURN> to end");  
        Console.ReadLine();  
    }  
    catch (Exception ex)  
    {  
        Console.WriteLine("Exception : " + ex);  
        throw;                 
    }  
    
  10. 关闭客户端,如以下代码片段中所述:

    client.Close();  
    
  11. 生成项目,然后运行它。 应用程序调用 MS_SAMPLE_COPY_EMP_DATA 并返回请求 ID。 然后将 ID 传递给 Get_Status 并发程序,该程序最终提供 MS_SAMPLE_COPY_EMP_DATA 列程序的状态。

另请参阅

使用 WCF 服务模型开发 Oracle 电子商务套件应用程序