Oracle E-Business Suite 提供可执行的并发程序,以便在 Oracle 应用程序上执行特定操作。 每个 Oracle 应用程序都有一组标准并发程序(在所有作中相同)和特定于 Oracle 应用程序的某些并发程序。 Oracle E-Business 适配器将所有并发程序公开为供适配器客户端调用的操作。 有关适配器如何支持并发程序的详细信息,请参阅 并发程序上的作。
注释
对于不公开其元数据的并发程序,Oracle E-Business 适配器为每个并发程序公开 100 个可选参数。 若要成功调用这些并发程序,用户必须查阅 Oracle E-Business Suite 文档,以找出需要值的并发程序的参数,然后指定它们。 此类并发程序的一个示例是“常规账本”应用程序中的“日记导入”(实际名称:GLLEZL)。
关于本主题中使用的示例
本主题中的示例调用 MS_SAMPLE_COPY_EMP_DATA 并发程序,后跟 Get_Status 并发程序以了解第一个并发程序的状态。 从 应用程序对象库 应用程序调用这些并发程序。 MS_SAMPLE_COPY_EMP_DATA是通过运行随示例提供的脚本创建的。 有关示例的详细信息,请参阅 Oracle EBS 适配器的示例。 Oracle E-Business 适配器示例中还提供了一个示例ConcurrentProgram_ServiceModel,此示例基于本主题。
WCF 客户端类
下表中列出了由 Oracle E-Business 适配器生成用于调用并发程序的 WCF 客户端的名称。
项目 | WCF 客户端名称 |
---|---|
并发程序 | ConcurrentPrograms_[APP_NAME]Client |
[APP_NAME] = Oracle E-Business Suite 应用程序的实际名称;例如,FND。
调用并发程序的方法的签名
下表显示了并发程序的方法签名。
操作 | 方法签名 |
---|---|
并发程序 | public <return type><Concurrent_program_name>(param 1, param 2, ...) |
例如,以下代码显示了为 MS_SAMPLE_COPY_EMP_DATA 和 Get_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 是调用并发程序以获取第一个并发程序状态的方法的名称。
注释
GetStatusForConcurrentProgram 是 Get_Status 并发程序的实际名称。
创建 WCF 客户端以调用并发程序
使用 WCF 客户端对 Oracle 电子商务套件执行作所需的通用作集涉及一组任务,这些任务在 Oracle E-Business Suite 适配器的 WCF 服务模型概述中介绍。 本部分介绍如何创建 WCF 客户端来调用 MS_SAMPLE_COPY_EMP_DATA 和 Get_Status 并发程序。
创建 WCF 客户端
在 Visual Studio 中创建 Visual C# 项目。 对于本主题,请创建控制台应用程序。
为 MS_SAMPLE_COPY_EMP_DATA 和 Get_Status 并发程序生成 WCF 客户端类。 有关生成 WCF 客户端类的详细信息,请参阅 为 Oracle E-Business Suite 解决方案项目生成 WCF 客户端或 WCF 服务协定。
重要
在生成 WCF 客户端类之前,请确保将 EnableBizTalkCompatibilityMode 绑定属性设置为 false。
在解决方案资源管理器中,添加对
Microsoft.Adapters.OracleEBS
和Microsoft.ServiceModel.Channels
的引用。打开Program.cs文件并添加以下命名空间:
Microsoft.Adapters.OracleEBS
System.ServiceModel
打开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 配置客户端绑定。
设置客户端的凭据。
client.ClientCredentials.UserName.UserName = "myuser"; client.ClientCredentials.UserName.Password = "mypassword";
由于在 Oracle E-Business Suite 应用程序中调用并发程序,因此必须设置应用程序上下文。 在此示例中,若要设置应用程序上下文,请指定 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_COPY_EMP_DATA 和 Get_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; }
按以下代码片段中所述关闭客户端:
client.Close();
生成项目,然后运行它。 应用程序调用 MS_SAMPLE_COPY_EMP_DATA 并返回请求 ID。 然后,ID 传递给 Get_Status 并发程序,最后提供 MS_SAMPLE_COPY_EMP_DATA 列程序的状态。