共用方式為


使用 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 用戶端以對資料表執行作業

  1. 在 Visual Studio 中建立 Visual C# 專案。 針對本主題,建立主控台應用程式。

  2. 為 MS_SAMPLE_EMPLOYEE介面資料表上的 [插入]、[選取]、[更新] 和 [刪除] 作業產生 WCF 用戶端類別。 如需產生 WCF 用戶端類別的詳細資訊,請參閱 產生 WCF 用戶端或 Oracle E-Business Suite 解決方案成品的 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");  
    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 的用戶端系結

  6. 設定用戶端的認證。

    client.ClientCredentials.UserName.UserName = "myuser";  
    client.ClientCredentials.UserName.Password = "mypassword";  
    
  7. 因為您在介面資料表上執行作業,所以必須設定應用程式內容。 在此範例中,若要設定應用程式內容,您可以指定 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_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();  
    
    

    您也可以取代上述程式碼片段來執行選取、更新或刪除作業。 您也可以附加程式碼片段,以在單一應用程式中執行所有作業。 如需有關如何執行這些作業的程式碼片段,請參閱分別 選取作業更新作業刪除作業

  10. 如下列程式碼片段所述關閉用戶端:

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  11. 建置專案,然後加以執行。 應用程式會在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();  

另請參閱

使用 WCF 服務模型開發 Oracle E-Business Suite 應用程式