このセクションでは、ビジネス・オブジェクトおよびその値の操作について説明します。これには、以下の操作が含まれます。
コンストラクター・メソッド new を使用して、新規ビジネス・オブジェクトを作成します。
new BusObj(String busObjType)
BusObj タイプのオブジェクト。
ObjectException - ビジネス・オブジェクト引き数が無効な場合に発生します。
このメソッドにより、値のないビジネス・オブジェクトが作成されます。この値は、属性を取り込むときに設定します。
新しいビジネス・オブジェクトの属性を子ビジネス・オブジェクトまたは子ビジネス・オブジェクト配列として定義する場合は、子ビジネス・オブジェクトを明示的に作成し、これに属性を関連付ける必要があります。詳細については、"新規ビジネス・オブジェクトでの子ビジネス・オブジェクトの作成"を参照してください。
以下の例では、Customer ビジネス・オブジェクト定義を使用して、destinationCustomer と呼ばれる新しいビジネス・オブジェクトを作成します。新しいビジネス・オブジェクトが作成されますが、属性値はありません。
BusObj destinationCustomer = new BusObj("Customer");
新しいビジネス・オブジェクトを作成する場合、カーディナリティー 1 または n の子ビジネス・オブジェクトを含むように定義されている属性には値がありません。この属性に値を設定するには、子ビジネス・オブジェクトまたは子ビジネス・オブジェクト配列を明示的に作成し、これに属性を関連付ける必要があります。このセクションでは、単一の子ビジネス・オブジェクトおよび配列に対してこの操作を行う方法について説明します。
以下の手順では、最初に新しいビジネス・オブジェクトを作成してから、その属性の 1 つに含まれる子ビジネス・オブジェクトを作成する方法を示します。
以下の例は、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 つに含まれる子ビジネス・オブジェクト配列を作成する方法を示します。
次に、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); |
ビジネス・オブジェクト間で値を移動するメソッドには、copy() と duplicate() という 2 つのメソッドあります。これらの両メソッドとも、親ビジネス・オブジェクトおよびすべての子ビジネスをコピーして、ビジネス・オブジェクトの階層全体を処理します。表 49 に、これら両メソッドの説明を示します。
表 49. copy() と duplicate() メソッドの比較
メソッド | 説明 |
---|---|
copy() | 既存のビジネス・オブジェクトのすべての属性値を別のビジネス・オブジェクトの属性値にコピーします。 |
duplicate() | 既存のビジネス・オブジェクトを複製して新しいビジネス・オブジェクトを作成します。属性値と動詞の両方を複製します。このメソッドの戻り値は、変数に割り当てる必要があります。 |
これら 2 つのメソッドの主な違いは、コピーした値を入力するビジネス・オブジェクトがあるかどうかです。
copy() メソッドを使用する前に、値のコピー先のビジネス・オブジェクトが存在している必要があります。
存在していない場合は、new メソッドを使用してビジネス・オブジェクトを作成します。
以下の例では、ソース・アプリケーションから受信した Customer ビジネス・オブジェクトに含まれる属性値を、宛先アプリケーションに送信されるビジネス・オブジェクトにコピーします。
BusObj destination = new BusObj("Customer"); destination.copy(sourceBusObj); |
duplicate() は、copy() メソッドとは異なり、既存のビジネス・オブジェクトの完全な複製を作成してそれを戻します。
以下の例では、ソース・ビジネス・オブジェクトを複製し、destination と呼ばれる変数にこれを割り当てます。
BusObj destination = sourceBusObj.duplicate(); |
コラボレーションは、受信したビジネス・オブジェクトに含まれる属性値を何度も検索します。
コラボレーションが受信した属性値を使用してなんらかの処理を行う必要がある場合、コラボレーションは、これを使用する前に、属性値が null でないことを確認する必要があります ("null の検査"を参照)。
null 属性値を検査するために、コラボレーションは BusObj.isNull(attribute) を呼び出します。通常、null 値は、以下のいずれかの理由によって表示されます。
ビジネス・オブジェクトの作成時は、すべての属性は null で、明示的に設定されるまでは 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 を参照)。
基本データ型 | 属性を設定するメソッド |
---|---|
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() メソッドの形式を使用します。
属性がビジネス・オブジェクト・タイプの場合、ビジネス・オブジェクト定義に定義されているカーディナリティーは、属性に単一のビジネス・オブジェクトあるいは配列のいずれが含まれているかを示します。カーディナリティーの値により、以下のようになります。
以下の例では、Bill of Materials ビジネス・オブジェクトの SoldToAddress 属性に含まれる単一カーディナリティーの Address ビジネス・オブジェクトを検索します。
BusObj addr = new BusObj("Address"); addr = bom.getBusObj("SoldToAddress"); |
以下の例では、米国内の販売先住所を検索します。ビジネス・オブジェクト構造は、以下のとおりです。
//Look for sold-to address in the US
//Start with the busOrg business object
//Get the child business object array in the "SoldToSite" attribute
if (!busOrg.isNull("SoldToSite"))
{
BusObjArray siteAddArray = busOrg.getBusObjArray("SoldToSite");
//
//String to compare with sold-to country name
String countryName = "USA";
//Get size of child business object array
int count = siteAddArray.size();
//
//For each business object in the array get the SoldToAddress
//attribute, which is a business object, and compare its
//SoldToCountryName attribute to the string "USA"
//
for (int i = 0; i < count ; i ++)
{
BusObj siteAddr = siteAddArray.elementAt( i );
if (!siteAddr.isNull("SoldToAddress"))
{
BusObj soldToAddress =
siteAddr.getBusObj("SoldToAddress");
if (countryName.equalsIgnoreCase(
soldToAddress.getString("SoldToCountryName")))
{
//do something
}
}//end if
}//end for }//end if |
このセクションでは、属性を設定する操作の 3 つのタイプについて説明します。これらの操作は、簡単なものから複雑なものへと順に並んでいます。
BusObj.set() メソッドは、基本型の属性値を設定します。
属性の基本型は、サポートされているプリミティブの、boolean、double、float、int、long、Object、および String です。
各 set() メソッドにはすべて同じ名前が付けられていますが、シグニチャーは異なります。最初のパラメーターは常に、値を設定する属性の名前が含まれる String です。2 番目のパラメーターは、プリミティブ・タイプ String オブジェクトまたは Object タイプである変数または定数です。変数のタイプとは関係なく、同じ set() メソッドを呼び出します。このメソッドは、あらゆるタイプの変数を受け入れられるように多重定義されます。どのメソッドのバリエーションを使用するかはコンパイラーが決めます。
次の例では、FirstName と Salary の 2 つの属性の値を設定します。
Customer.set("FirstName", "Sue"); Customer.set("Salary", 30500); |
BusObj.get() メソッドと BusObj.set() メソッドを使用すると、あるビジネス・オブジェクトから別のビジネス・オブジェクトへ属性値をコピーすることができます。次の例では、ソース・ビジネス・オブジェクトから String 変数 HeaderId と ServiceId を取得し、宛先ビジネス・オブジェクト内の属性 HeaderId と SalesNum をそれらの値に設定します。
DestinationBusObj.set( "HeaderId", SourceBusObj.getString("HeaderId")); DestinationBusObj.set( "SalesNum", SourceBusObj.getString("ServiceId")); |
カーディナリティーが 1 に等しい子ビジネス・オブジェクトの属性を設定するには、最初に子ビジネス・オブジェクトのハンドルを取得する必要があります。
BusObj.getBusObj() メソッドを使用して、子ビジネス・オブジェクトのハンドルまたは参照を取得し、その結果を BusObj タイプの変数に割り当てます。
次に、BusObj.set() メソッドを呼び出します。これにより、属性のデータ型に一致するメソッドの多重定義バージョンが呼び出されます。
次の例では、図 75 を基にしています。Customer ビジネス・オブジェクトには、Address と呼ばれる属性があります。これは、CustAddress と呼ばれる子ビジネス・オブジェクトへの参照となります。
このコード例では、以下の処理が実行されます。
BusObj addr = Customer.getBusObj("Address"); addr.set("City", "SF"); |
子ビジネス・オブジェクトの配列に属性 (カーディナリティーが n に等しい属性) を設定するには、BusObj.getBusObjArray() メソッドを使用し、その結果を BusObjArray タイプの変数に割り当てます。
次に、その変数で BusObjArray メソッドを使用します。
下記のコードは、以下の構造に基づいています。
次の例では、図 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"); |
以下の例では、order ビジネス・オブジェクトの Total 属性値を null に設定します。
order.set("Total", null); |
この技法を使用して、属性値が基本型、BusObj タイプ、または BusObjArray タイプのいずれであるかに関係なく、あらゆるタイプの属性を null に設定できます。ただし、この技法を使用して、配列の子ビジネス・オブジェクトを null に設定することはできません。