ビジネス・オブジェクトに対する操作

このセクションでは、ビジネス・オブジェクトおよびその値の操作について説明します。これには、以下の操作が含まれます。

新規ビジネス・オブジェクトの作成

コンストラクター・メソッド new を使用して、新規ビジネス・オブジェクトを作成します。

構文

new BusObj(String busObjType)
 
 

パラメーター

busObjType
ビジネス・オブジェクト定義の名前

戻り値

BusObj タイプのオブジェクト。

例外

ObjectException - ビジネス・オブジェクト引き数が無効な場合に発生します。

このメソッドにより、値のないビジネス・オブジェクトが作成されます。この値は、属性を取り込むときに設定します。

新しいビジネス・オブジェクトの属性を子ビジネス・オブジェクトまたは子ビジネス・オブジェクト配列として定義する場合は、子ビジネス・オブジェクトを明示的に作成し、これに属性を関連付ける必要があります。詳細については、"新規ビジネス・オブジェクトでの子ビジネス・オブジェクトの作成"を参照してください。

以下の例では、Customer ビジネス・オブジェクト定義を使用して、destinationCustomer と呼ばれる新しいビジネス・オブジェクトを作成します。新しいビジネス・オブジェクトが作成されますが、属性値はありません。

BusObj destinationCustomer = new BusObj("Customer");
 

新規ビジネス・オブジェクトでの子ビジネス・オブジェクトの作成

新しいビジネス・オブジェクトを作成する場合、カーディナリティー 1 または n の子ビジネス・オブジェクトを含むように定義されている属性には値がありません。この属性に値を設定するには、子ビジネス・オブジェクトまたは子ビジネス・オブジェクト配列を明示的に作成し、これに属性を関連付ける必要があります。このセクションでは、単一の子ビジネス・オブジェクトおよび配列に対してこの操作を行う方法について説明します。

単一の子ビジネス・オブジェクトの作成

以下の手順では、最初に新しいビジネス・オブジェクトを作成してから、その属性の 1 つに含まれる子ビジネス・オブジェクトを作成する方法を示します。

  1. new メソッドを使用して、親ビジネス・オブジェクトを作成します。
  2. new メソッドを使用して、属性を定義するタイプの子ビジネス・オブジェクトを 1 つ作成します。
  3. BusObj.set() メソッドを使用して、親オブジェクトの属性値を新しい子ビジネス・オブジェクトに設定します。

以下の例は、SoldToAddressAttribute と呼ばれる属性を持つ新しい Invoice ビジネス・オブジェクトの作成を示します。この属性は、販売先顧客の住所を保持する Address タイプのビジネス・オブジェクトです。この例は、親ビジネス・オブジェクトと子ビジネス・オブジェクトの関係を示します。
// Declarations BusObj invoice = new BusObj("Invoice"); // Create child business object in invoice invoice.set("SoldToAddressAttribute", new BusObj("Address"));

コラボレーションが子ビジネス・オブジェクトを操作する必要がある場合、この例は以下のようになります。
// Declarations BusObj invoice = new BusObj("Invoice"); BusObj soldToAddress = new BusObj("Address"); // Manipulate child business object soldToAddress // Associate child business object soldToAddress with parent invoice invoice.set("SoldToAddressAttribute", soldToAddress);

子ビジネス・オブジェクト配列の作成

このセクションでは、以下の手順により、新しいビジネス・オブジェクトを作成してから、その属性の 1 つに含まれる子ビジネス・オブジェクト配列を作成する方法を示します。

  1. new メソッドを使用して、ビジネス・オブジェクトを作成します。これは親ビジネス・オブジェクトです。
  2. n と等しいカーディナリティーを持つビジネス・オブジェクトを含むように定義されている親ビジネス・オブジェクトの属性には、特定タイプの属性のビジネス・オブジェクトを 1 つ作成します。
  3. 親の属性値を新しい単一のビジネス・オブジェクトに設定します。
  4. BusObjArray オブジェクトを宣言し、属性の値を取得し、これを配列に割り当てます。

次に、BusObjArray クラスのメソッドを使用して、要素を追加するか、ビジネス・オブジェクト上でその他の操作を実行します。

以下の例は、新しい Bill of Materials ビジネス・オブジェクトの作成、その LineItems 属性の子ビジネス・オブジェクト配列の作成、そして配列上での追加ビジネス・オブジェクトの配置を示します。
// Declarations BusObj bom = new BusObj("Bill_Of_Materials"); BusObjArray lineItemArray = null; BusObj singleLineItem = new BusObj ("LineItem"); // Create first child item bom.set("LineItemsAttribute", singleLineItem); //If there are additional line items, do this once lineItemArray = bom.getBusObjArray("LineItemAttribute"); // Now do this for each additional child item lineItemArray.addElement(new BusObj("singleLineItem"));

トリガー・イベントのコピー

すべてのシナリオの第 1 アクションは、シナリオのフロー・トリガーを処理する必要があります。

Process Designer Express は、triggeringBusObj と呼ばれる BusObj タイプの変数を自動的に宣言します。この変数は、シナリオの実行を開始するフロー・トリガー (トリガー・イベントまたはトリガー・アクセス呼び出し) を保持します。

また、Process Designer Express は、定義されているポートごとにテンプレート BusObj 変数を自動的に宣言します。

BusObj 変数の名前は、ポート名に BusObj を付加したものです。

例えば、シナリオのトリガー・イベントが Customer.Create であるとします。

トリガー・イベントを受け取るポートは SourceCust と呼ばれます。Process Designer Express は、ポート名に BusObj というサフィックスを付加した SourceCustBusObj という名前の変数を自動的に宣言します。この場合は、Process Designer Express に以下の変数宣言が表示されます。
BusObj SourceCustBusObj = new BusObj("Customer");

以下のコード・フラグメントを追加して、トリガー・イベントを SourceCustBusObj にコピーできます。
SourceCustBusObj.copy(triggeringBusObj);

多くのコラボレーションは、複数のタイプのビジネス・オブジェクトによって起動されます。このため、まずビジネス・オブジェクトのタイプを決定してから、ビジネス・オブジェクトを作成してフロー・トリガーを保持する必要があります。フロー・トリガーに対して BusObj.getType() メソッドを使用して最初にそのタイプを確認し、次に適切なタイプのビジネス・オブジェクトを作成し、最後に新しく作成したビジネス・オブジェクトにフロー・トリガーをコピーします。


sourceBusObj = new BusObj(triggeringBusObj.getType()); sourceBusObj.copy(triggeringBusObj);

ヒント:
プログラミング上、最初に triggeringBusObj を別の変数にコピーしてから任意の操作を行うのが理想的です。

ビジネス・オブジェクトのコピーまたは複製

ビジネス・オブジェクト間で値を移動するメソッドには、copy()duplicate() という 2 つのメソッドあります。これらの両メソッドとも、親ビジネス・オブジェクトおよびすべての子ビジネスをコピーして、ビジネス・オブジェクトの階層全体を処理します。表 49 に、これら両メソッドの説明を示します。

表 49. copy() と duplicate() メソッドの比較
メソッド 説明
copy() 既存のビジネス・オブジェクトのすべての属性値を別のビジネス・オブジェクトの属性値にコピーします。
duplicate() 既存のビジネス・オブジェクトを複製して新しいビジネス・オブジェクトを作成します。属性値と動詞の両方を複製します。このメソッドの戻り値は、変数に割り当てる必要があります。

これら 2 つのメソッドの主な違いは、コピーした値を入力するビジネス・オブジェクトがあるかどうかです。

コピー

copy() メソッドを使用する前に、値のコピー先のビジネス・オブジェクトが存在している必要があります。

存在していない場合は、new メソッドを使用してビジネス・オブジェクトを作成します。

以下の例では、ソース・アプリケーションから受信した Customer ビジネス・オブジェクトに含まれる属性値を、宛先アプリケーションに送信されるビジネス・オブジェクトにコピーします。
BusObj destination = new BusObj("Customer"); destination.copy(sourceBusObj);

注:
copy() メソッドは、すべての子ビジネス・オブジェクトおよび子ビジネス・オブジェクト配列を含むビジネス・オブジェクト全体をコピーします。このメソッドは、コピーされたオブジェクトへの参照は設定しません。代わりに、すべての属性を複製します。つまり、属性の別のコピーを作成します。

複製

duplicate() は、copy() メソッドとは異なり、既存のビジネス・オブジェクトの完全な複製を作成してそれを戻します。

以下の例では、ソース・ビジネス・オブジェクトを複製し、destination と呼ばれる変数にこれを割り当てます。
BusObj destination = sourceBusObj.duplicate();

属性値の使用

コラボレーションは、受信したビジネス・オブジェクトに含まれる属性値を何度も検索します。

コラボレーションが受信した属性値を使用してなんらかの処理を行う必要がある場合、コラボレーションは、これを使用する前に、属性値が null でないことを確認する必要があります ("null の検査"を参照)。

null の検査

null 属性値を検査するために、コラボレーションは BusObj.isNull(attribute) を呼び出します。通常、null 値は、以下のいずれかの理由によって表示されます。

以下のコード・サンプルでは、Order ビジネス・オブジェクトで受信したデータを使用して Billing ビジネス・オブジェクトが設定されます。受信したオーダー・データ自体が null またはブランクである場合、属性は「Unknown」に設定されます。
//Check whether ProductLine is null or blank; if so, default it if (order.isNull("ProductLine") || order.isBlank("ProductLine")) { logInfo("Setting ProductLine to default Unknown"); order.set("ProductLine", "Unknown"); } //Now set Billing object's equivalent attribute to the same value billing.set("ProductLine", order.get("ProductLine");

isNull() メソッドは、子ビジネス・オブジェクトまたは子ビジネス・オブジェクト配列を含む属性を含め、すべてのタイプの属性に対して使用できます。

属性値と既知の値との比較

コラボレーションは、Java プログラム言語 equals() メソッドを使用して、特定の予測値に対して属性値をチェックできます。

equals() メソッドは、以下の例のように、予測値と検索した属性値を比較します。equals() を既知のオブジェクト上で呼び出し、これを既知の属性と比較します。

この例では、Smith は、LName 属性で予測される値です。
String name = "Smith"; boolean checkName=name.equals(CustBusObj.get("LName"));

属性の検索

このセクションでは、属性を検索する操作のタイプについて説明します。これらの操作は、簡単なものから複雑なものへと順に並んでいます。

基本型の属性の検索

BusObj.get() メソッドは、基本型の属性値を検索します。属性の基本型は、サポートされているプリミティブです (表 50 を参照)。

表 50. 基本データ型の属性の検索
基本データ型 属性を設定するメソッド
boolean getBoolean()
double getDouble()
float getFloat()
int getInt()
long getLong()
Object get()
LongText getLongText()
String getString()

以下の例では、Credit-Limit 属性の内容 (int) を検索します。
int creditLimit = customer.getInt("Credit-Limit");

属性のデータ型がわからない場合は、Java Object データ型を検索する get() メソッドの形式を使用します。

注:
get() メソッドは、属性のコピーを戻します。このメソッドは、ソース・ビジネス・オブジェクトのこの属性に対するオブジェクト参照を戻しません。このため、ソース・ビジネス・オブジェクトの属性の変更内容は、get() が戻す値には適用されません。このメソッドは、呼び出されるたびに属性の新しいコピー (複製) を戻します。

子ビジネス・オブジェクトからの属性の検索

属性がビジネス・オブジェクト・タイプの場合、ビジネス・オブジェクト定義に定義されているカーディナリティーは、属性に単一のビジネス・オブジェクトあるいは配列のいずれが含まれているかを示します。カーディナリティーの値により、以下のようになります。

以下の例では、Bill of Materials ビジネス・オブジェクトの SoldToAddress 属性に含まれる単一カーディナリティーの Address ビジネス・オブジェクトを検索します。
BusObj addr = new BusObj("Address"); addr = bom.getBusObj("SoldToAddress");

以下の例では、米国内の販売先住所を検索します。ビジネス・オブジェクト構造は、以下のとおりです。

属性値の設定

このセクションでは、属性を設定する操作の 3 つのタイプについて説明します。これらの操作は、簡単なものから複雑なものへと順に並んでいます。

基本型の属性の設定

BusObj.set() メソッドは、基本型の属性値を設定します。

属性の基本型は、サポートされているプリミティブの、booleandoublefloatintlongObject、および String です。

set() メソッドにはすべて同じ名前が付けられていますが、シグニチャーは異なります。最初のパラメーターは常に、値を設定する属性の名前が含まれる String です。2 番目のパラメーターは、プリミティブ・タイプ String オブジェクトまたは Object タイプである変数または定数です。変数のタイプとは関係なく、同じ set() メソッドを呼び出します。このメソッドは、あらゆるタイプの変数を受け入れられるように多重定義されます。どのメソッドのバリエーションを使用するかはコンパイラーが決めます。

次の例では、FirstNameSalary の 2 つの属性の値を設定します。
Customer.set("FirstName", "Sue"); Customer.set("Salary", 30500);

BusObj.get() メソッドと BusObj.set() メソッドを使用すると、あるビジネス・オブジェクトから別のビジネス・オブジェクトへ属性値をコピーすることができます。次の例では、ソース・ビジネス・オブジェクトから String 変数 HeaderIdServiceId を取得し、宛先ビジネス・オブジェクト内の属性 HeaderIdSalesNum をそれらの値に設定します。
DestinationBusObj.set( "HeaderId", SourceBusObj.getString("HeaderId")); DestinationBusObj.set( "SalesNum", SourceBusObj.getString("ServiceId"));

注:
set() メソッドは、値を属性に割り当てるときに、値に対してオブジェクト参照を設定します。これにより、ソース・ビジネス・オブジェクトから属性値が複製されることはありません。このため、ソース・ビジネス・オブジェクトの値の変更内容は、set() を呼び出すビジネス・オブジェクトの属性にも適用されます。

単一の子ビジネス・オブジェクトでの属性の設定

カーディナリティーが 1 に等しい子ビジネス・オブジェクトの属性を設定するには、最初に子ビジネス・オブジェクトのハンドルを取得する必要があります。

BusObj.getBusObj() メソッドを使用して、子ビジネス・オブジェクトのハンドルまたは参照を取得し、その結果を BusObj タイプの変数に割り当てます。

次に、BusObj.set() メソッドを呼び出します。これにより、属性のデータ型に一致するメソッドの多重定義バージョンが呼び出されます。

次の例では、図 75 を基にしています。Customer ビジネス・オブジェクトには、Address と呼ばれる属性があります。これは、CustAddress と呼ばれる子ビジネス・オブジェクトへの参照となります。

図 75. 単一の子ビジネス・オブジェクト


このコード例では、以下の処理が実行されます。

  1. addr と呼ばれる変数を宣言します。
  2. Customer ビジネス・オブジェクトの Address 属性を検索し、それを addr に割り当てます。
  3. City 属性を設定します。
    BusObj addr = Customer.getBusObj("Address"); addr.set("City", "SF");

子ビジネス・オブジェクトの配列での属性の設定

子ビジネス・オブジェクトの配列に属性 (カーディナリティーが n に等しい属性) を設定するには、BusObj.getBusObjArray() メソッドを使用し、その結果を BusObjArray タイプの変数に割り当てます。

次に、その変数で BusObjArray メソッドを使用します。

下記のコードは、以下の構造に基づいています。

図 76. 子ビジネス・オブジェクト配列


次の例では、図 76 で 1 の印が付いているビジネス・オブジェクトの OrderID 属性を設定します。
BusObjArray[] orders = cust.getBusObjArray("Orders").elementAt(1); orders[1].set("OrderID", "x1234");

次の例では、図 76 で 2 の印が付いているビジネス・オブジェクトの Factory 属性を設定します。
BusObjArray items = orders[1].getBusObjArray("Items"); BusObj item = items.elementAt(1); item.set("Factory", "MyCompany");

属性値を null に設定

以下の例では、order ビジネス・オブジェクトの Total 属性値を null に設定します。


order.set("Total", null);

この技法を使用して、属性値が基本型、BusObj タイプ、または BusObjArray タイプのいずれであるかに関係なく、あらゆるタイプの属性を null に設定できます。ただし、この技法を使用して、配列の子ビジネス・オブジェクトを null に設定することはできません。

Copyright IBM Corp. 2004