使用 WCF 服務模型在 Oracle E-Business Suite 中叫用並行程式
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 E-Business Suite 上執行作業所需的一般動作集,牽涉到 使用 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 用戶端類別的詳細資訊,請參閱 產生 WCF 用戶端或 Oracle E-Business Suite 解決方案成品的 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 用戶端。 此檔案是由新增配接器服務參考外掛程式所產生。注意
在此程式碼片段中,您會在應用程式程式碼中明確指定系結和端點位址。 您也可以從應用程式組態檔使用這些值,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 並傳回要求識別碼。 識別碼接著會傳遞至 Get_Status 並行程式,最後提供 MS_SAMPLE_COPY_EMP_DATA 資料行程式的狀態。