使用 WCF 服務模型在介面資料表和檢視上插入、更新、刪除或選取作業
Oracle E-Business 配接器會探索介面資料表上的一組基本插入、選取、更新和刪除作業。 藉由使用這些作業,您可以在目標介面資料表上執行由 WHERE 子句限定的簡單 Insert、Select、Update 和 Delete 語句。 本主題提供如何使用 WCF 服務模型執行這些作業的指示。
注意
Oracle E-Business 配接器僅支援介面檢視上的選取作業。
如需配接器如何支援這些作業的詳細資訊,請參閱 介面資料表和介面檢視上的作業。
關於本主題中使用的範例
本主題中的範例會在 MS_SAMPLE_EMPLOYEE 介面資料表上執行作業。 資料表的建立方式是執行範例所提供的腳本。 如需範例的詳細資訊,請參閱 Oracle EBS 配接器的範例。 Oracle E-Business 配接器範例也會提供以本主題為基礎的範例 Interface_Table_Ops。
WCF 用戶端類別
Oracle E-Business 配接器所探索的基本作業所產生的 WCF 用戶端名稱是以資料表或檢視表的名稱為基礎,如下表所列。
成品 | WCF 用戶端名稱 |
---|---|
介面資料表 | InterfaceTables_[APP_NAME][SCHEMA]\[TABLE_NAME]Client |
介面檢視 | InterfaceViews_[APP_NAME][SCHEMA]\[VIEW_NAME]Client |
[APP_NAME] = Oracle E-Business Suite 應用程式的實際名稱;例如,FND。
[SCHEMA] = 成品集合;例如,APPS。
[TABLE_NAME] = 資料表的名稱;例如,MS_SAMPLE_EMPLOYEE。
[VIEW_NAME] = 檢視的名稱;例如,MS_SAMPLE_EMPLOYEE_View。
叫用資料表上作業的方法簽章
下表顯示資料表上基本作業的方法簽章。 檢視的簽章相同,不同之處在于檢視命名空間和名稱會取代資料表的簽章。
作業 | 方法簽章 |
---|---|
插入 | string Insert (InsertRecord[] RECORDSET) ; |
選取 | SelectRecord[] 選取 (字串COLUMN_NAMES,字串 FILTER) ; |
更新 | string Update (UpdateRecord RECORDSET, string FILTER) ; |
刪除 | string Delete (string FILTER) ; |
例如,下列程式碼會顯示在預設 APPS 架構下,針對MS_SAMPLE_EMPLOYEE介面資料表上針對 Delete、Insert、Select 和 Update 作業產生的 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 E-Business Suite 上執行作業所需的一般動作集,牽涉到 使用 Oracle E-Business Suite 配接器之 WCF 通道模型概觀中所述的一組工作。 本節說明如何建立 WCF 用戶端,以叫用介面資料表上的基本插入、選取、更新、刪除作業。
建立 WCF 用戶端以對資料表執行作業
在 Visual Studio 中建立 Visual C# 專案。 針對本主題,建立主控台應用程式。
為 MS_SAMPLE_EMPLOYEE介面資料表上的 [插入]、[選取]、[更新] 和 [刪除] 作業產生 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"); 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 的用戶端系結。
設定用戶端的認證。
client.ClientCredentials.UserName.UserName = "myuser"; client.ClientCredentials.UserName.Password = "mypassword";
因為您在介面資料表上執行作業,所以必須設定應用程式內容。 在此範例中,若要設定應用程式內容,您可以指定 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_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();
您也可以取代上述程式碼片段來執行選取、更新或刪除作業。 您也可以附加程式碼片段,以在單一應用程式中執行所有作業。 如需有關如何執行這些作業的程式碼片段,請參閱分別 選取作業、 更新作業和 刪除作業 。
如下列程式碼片段所述關閉用戶端:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
建置專案,然後加以執行。 應用程式會在MS_SAMPLE_EMPLOYEE資料表中插入記錄。
選取作業
下列程式碼顯示以 MS_SAMPLE_EMPLOYEE 介面資料表為目標的 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();