WCF サービス モデルを使用してインターフェイス テーブルとビューに対する操作を挿入、更新、削除、または選択する
Oracle E-Business アダプターは、インターフェイス テーブルに対する基本的な挿入、選択、更新、および削除の一連の操作を検出します。 これらの操作を使用すると、ターゲット インターフェイス テーブルの WHERE 句で修飾された単純な Insert、Select、Update、Delete ステートメントを実行できます。 このトピックでは、WCF サービス モデルを使用してこれらの操作を実行する方法について説明します。
Note
Oracle E-Business アダプターでは、インターフェイス ビューに対する Select 操作のみがサポートされます。
アダプターがこれらの操作をサポートする方法の詳細については、「 インターフェイス テーブルとインターフェイス ビューに対する操作」を参照してください。
このトピックで使用する例について
このトピックの例では、MS_SAMPLE_EMPLOYEE インターフェイス テーブルに対して操作を実行します。 このテーブルは、サンプルに付属のスクリプトを実行して作成されます。 サンプルの詳細については、「 Oracle EBS アダプターのサンプル」を参照してください。 このトピックに基づく サンプル Interface_Table_Opsは、Oracle E-Business アダプターのサンプルでも提供されています。
WCF クライアント クラス
Oracle E-Business アダプターが検出する基本的な操作のために生成される WCF クライアントの名前は、次の表に示すように、テーブルまたはビューの名前に基づいています。
アーティファクト | WCF クライアント名 |
---|---|
インターフェイス テーブル | InterfaceTables_[APP_NAME][SCHEMA]\[TABLE_NAME]Client |
インターフェイス ビュー | InterfaceViews_[APP_NAME][SCHEMA]\[VIEW_NAME]クライアント |
[APP_NAME] = Oracle E-Business Suite アプリケーションの実際の名前。たとえば、FND です。
[SCHEMA] = 成果物のコレクション。たとえば、APPS です。
[TABLE_NAME] = テーブルの名前。たとえば、MS_SAMPLE_EMPLOYEE。
[VIEW_NAME] = ビューの名前。たとえば、MS_SAMPLE_EMPLOYEE_View。
テーブルに対する操作を呼び出すためのメソッド シグネチャ
次の表は、テーブルに対する基本的な操作のメソッド シグネチャを示しています。 ビューのシグネチャは同じですが、ビューの名前空間と名前がテーブルの名前空間と名前に置き換えられる点が除きます。
操作 | メソッド シグネチャ |
---|---|
挿入 | string Insert(InsertRecord[] RECORDSET); |
Select | SelectRecord[] Select(string COLUMN_NAMES, string 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、DESIGNATION" などです。 列リストは、結果セットで返されるターゲットの列を指定します。 列リストで指定されていない列は、返されたレコード セットの .NET 既定値に設定されます。 nillable 列の場合、この値は null です。 | クエリのターゲット行を指定する WHERE 句の内容。たとえば、"Designation = 'Manager' などです。 このパラメーターを null に設定すると、ターゲットのすべての行を返すことができます。 |
Select 操作の戻り値は、指定された列と行を含む厳密に型指定された結果セットです。
挿入操作
挿入操作の種類 | レコード |
---|---|
複数のレコード | テーブルに挿入する必要がある INSERTRECORDS のコレクション。 |
挿入操作の戻り値は、挿入された行の数です。
更新操作
レコード | FILTER |
---|---|
テーブル内で更新する必要があるレコードのコレクション。 | クエリのターゲット行を指定する WHERE 句の内容。たとえば、"Designation = '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 クライアント クラスの生成の詳細については、「 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"); 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 クライアントです。 このファイルは、アダプター サービス参照の追加プラグインによって生成されます。Note
このスニペットでは、アプリケーション コードでバインディングとエンドポイント アドレスを明示的に指定します。 これらの値は、アダプター サービス参照の追加プラグインによって生成されたアプリケーション構成ファイル 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();
前のコード スニペットを置き換えて、Select、Update、または Delete 操作も実行できます。 コード スニペットを追加して、1 つのアプリケーションですべての操作を実行することもできます。 これらの操作を実行する方法のコード スニペットについては、「操作の選択」、「更新操作」、「削除操作」をそれぞれ参照してください。
次のスニペットで説明されているように、クライアントを閉じます。
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
プロジェクトをビルドし、実行します。 アプリケーションは、MS_SAMPLE_EMPLOYEE テーブルにレコードを挿入します。
操作の選択
次のコードは、MS_SAMPLE_EMPLOYEE インターフェイス テーブルを対象とする Select 操作を示しています。 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();