WCF サービス モデルを使用して Oracle E-Business Suite で同時実行プログラムを呼び出す
Oracle E-Business Suite は、Oracle アプリケーションに対して特定の操作を実行するために実行できる同時実行プログラムを公開します。 各 Oracle アプリケーションには、一連の標準同時実行プログラム (すべての操作で同じ) と、Oracle アプリケーションに固有の特定の同時実行プログラムがあります。 Oracle E-Business アダプターは、アダプター クライアントが呼び出すことができる操作として、すべての同時実行プログラムを公開します。 アダプターが同時実行プログラムをサポートする方法の詳細については、「 同時実行プログラムに対する操作」を参照してください。
Note
メタデータを公開しない同時実行プログラムの場合、Oracle E-Business アダプターは、これらの同時実行プログラムごとに 100 個の省略可能なパラメーターを公開します。 これらの同時実行プログラムを正常に呼び出すには、Oracle E-Business Suite のドキュメントを参照して、値を必要とする同時実行プログラムのパラメーターを調べ、それらを指定する必要があります。 このような同時プログラムの例として、総勘定元帳アプリケーションの履歴インポート (実際の名前: GLLEZL) があります。
このトピックで使用する例について
このトピックの例では、 MS_SAMPLE_COPY_EMP_DATA 同時実行プログラムを呼び出し、その後に Get_Status 同時実行プログラムを呼び出して、最初の同時実行プログラムの状態を確認します。 これらの同時実行プログラムは、 アプリケーション オブジェクト ライブラリ アプリケーションから呼び出されます。 MS_SAMPLE_COPY_EMP_DATAは、サンプルに付属のスクリプトを実行して作成されます。 サンプルの詳細については、「 Oracle EBS アダプターのサンプル」を参照してください。 このトピックに基づく サンプル ConcurrentProgram_ServiceModelは、Oracle E-Business アダプターのサンプルでも提供されています。
WCF クライアント クラス
Oracle E-Business アダプターによって同時実行プログラムを呼び出すための WCF クライアントの名前を次の表に示します。
アーティファクト | WCF クライアント名 |
---|---|
同時実行プログラム | ConcurrentPrograms_[APP_NAME]クライアント |
[APP_NAME] = Oracle E-Business Suite アプリケーションの実際の名前。たとえば、FND です。
同時実行プログラムを呼び出すためのメソッド シグネチャ
次の表は、同時実行プログラムのメソッド シグネチャを示しています。
操作 | メソッド シグネチャ |
---|---|
同時実行プログラム | public <戻り値の型><Concurrent_program_name>(param 1, param 2, ...) |
たとえば、次のコードは、 MS_SAMPLE_COPY_EMP_DATAおよび同時 プログラム用に生成された WCF クライアント クラスのメソッド シグネチャ Get_Status 示しています。
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 は、同時実行プログラムを呼び出して最初の同時実行プログラムの状態を取得するメソッドの名前です。
Note
GetStatusForConcurrentProgram は、 Get_Status 同時実行プログラムの実際の名前です。
同時実行プログラムを呼び出す WCF クライアントの作成
WCF クライアントを使用して Oracle E-Business Suite で操作を実行するために必要な一連の一般的なアクションには、「 Oracle E-Business Suite アダプターを使用した WCF サービス モデルの概要」で説明されている一連のタスクが含まれます。 このセクションでは、MS_SAMPLE_COPY_EMP_DATAを呼び出して同時実行プログラムを Get_Status する WCF クライアントを作成 する 方法について説明します。
WCF クライアントを作成するには
Visual Studio で Visual C# プロジェクトを作成します。 このトピックでは、コンソール アプリケーションを作成します。
MS_SAMPLE_COPY_EMP_DATAと同時プログラムの WCF クライアント クラスGet_Status生成します。 WCF クライアント クラスの生成の詳細については、「 Oracle E-Business Suite ソリューション成果物の 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"); ConcurrentPrograms_FNDClient client = new ConcurrentPrograms_FNDClient(binding, address);
このスニペットでは、
ConcurrentPrograms_FNDClient
は OracleEBSBindingClient.cs で定義されている WCF クライアントです。 このファイルは、アダプター サービス参照の追加プラグインによって生成されます。Note
このスニペットでは、アプリケーション コードでバインディングとエンドポイント アドレスを明示的に指定します。 これらの値は、アダプター サービス参照の追加プラグインによって生成されたアプリケーション構成ファイル 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 列プログラムの状態が提供されます。