ODA がビジネス・オブジェクト・ウィザードにエージェント・プロパティーを提供する状況は 2 つあります。
エージェント・プロパティーを表すために、ODK API は、AgentProperty クラスのインスタンスであるエージェント・プロパティー・オブジェクトを定義します。
エージェント・プロパティー・オブジェクトをインスタンス化するときは、表 49 に示すそのメンバー変数の一部またはすべてを初期化します。
エージェント・プロパティー・オブジェクトをインスタンス化するには、次のいずれかの構文形式の AgentProperty() コンストラクターを使用します。
表 50 は、エージェント・プロパティー・オブジェクトに含まれるエージェント・プロパティーについての基本情報を示しています。
基本プロパティー情報 | AgentProperty メンバー変数 | 説明 |
---|---|---|
名前 | propName |
エージェント・プロパティーを識別します。
ビジネス・オブジェクト・ウィザードは、この値を「エージェントの構成」ダイアログ (構成プロパティー) または「BO プロパティー」ダイアログ・ボックス (ビジネス・オブジェクト・プロパティー) の「プロパティー」列に表示します。エージェント・プロパティーの名前は、どの形式の AgentProperty() コンストラクターでも初期化できます。 |
説明
(オプション) | description |
エージェント・プロパティーの目的を説明する追加情報を提供します。
ビジネス・オブジェクト・ウィザードは、この値を「エージェントの構成」ダイアログ (構成プロパティー) または「BO プロパティー」ダイアログ・ボックス (ビジネス・オブジェクト・プロパティー) の「説明」列に表示します。エージェント・プロパティーの説明を初期化する際は、2 番目か 3 番目の形式の AgentProperty() コンストラクターを使用する必要があります。 |
データ型 | type |
エージェント・プロパティーが保持している値のデータ型を定義します。
ビジネス・オブジェクト・ウィザードは、この値を「エージェントの構成」ダイアログ (構成プロパティー) または「BO プロパティー」ダイアログ・ボックス (ビジネス・オブジェクト・プロパティー) の「タイプ」列に表示します。 1 番目の形式の AgentProperty() コンストラクターを使用してエージェント・プロパティーを初期化すると (プロパティー名のみの指定)、エージェント・プロパティーのタイプは String にデフォルト設定されます。タイプを指定するには、2 番目か 3 番目の形式の AgentProperty() コンストラクターを使用して、エージェント・プロパティーを初期化します。エージェント・プロパティーのタイプを表す際は、表 67に示すプロパティー・タイプ定数のいずれかを使用します。 |
ビジネス・オブジェクト・ウィザードは、エージェント・プロパティーの値を「エージェントの構成」ダイアログ (構成プロパティー) または「BO プロパティー」ダイアログ・ボックスの「値」列に表示します。エージェント・プロパティーを初期化するプロセスの一環として、次の操作を行う必要があります。
ビジネス・オブジェクト・ウィザードは、次の AgentProperty メタデータを使用して、プロパティー値を表示するコントロールのタイプを決定します。
表 51 は、プロパティー値コントロールを表示する際の可能な組み合わせを示しています。
カーディナリティー | 複数の値を表示 (isMultiple) | 有効な値 (すべての ValidValues) が提供されるか?
| 説明 |
---|---|---|---|
1 |
false | いいえ | プロパティー値は、プレーン・テキスト編集コントロール (1 つの値を入力または編集可能なシンプルなボックス) として表示されます。 |
1 |
true | はい | プロパティー値は、指定された有効な値を含むドロップダウン・リストとして表示されます (図 71 を参照)。このリストからは、値を 1 つのみ選択できます。 |
n |
true | はい | プロパティー値は、指定された有効な値を含むドロップダウン・リストとして表示されます。このリスト内のそれぞれの値はチェック・ボックスとともに表示されます。チェック・ボックスを選択すると、その値がプロパティーの値セットに含められます (図 71 を参照)。 |
n |
true | いいえ | プロパティー値は、表示値を持たないグリッド・コントロールとして表示されます。最初このグリッドには、1 行の空行を持つサブグリッドが表示されます。この行にテキストを入力すると、ビジネス・オブジェクト・ウィザードは別の空行を挿入します。このプロセスは、ユーザーが新しい行を入力している間続きます。値を削除する場合、ユーザーはその値のテキストを削除します。ビジネス・オブジェクト・ウィザードは、空でない行のみをプロパティーの値セットに含めます。 |
有効な値を持たない 単一カーディナリティー・プロパティーをビジネス・オブジェクト・ウィザードが表示する場合、プロパティーの「値」フィールドは空のままになります。ただし、プロパティーにデフォルト値を定義することができます。その場合、ビジネス・オブジェクト・ウィザードは、「値」フィールドにデフォルト値を表示します。詳しくは、デフォルト値の指定を参照してください。
図 71 は、複数の値を表示する (isMultiple = true) ビジネス・オブジェクト・ウィザードの 2 つのコントロールを示しています。
図 71. 複数の値を持つプロパティー用の単一カーディナリティー・コントロールと複数カーディナリティー・コントロール
図 71 は、単一カーディナリティー・コントロールと複数カーディナリティー・コントロールを示しています。どちらのコントロールも、ドロップダウン・リスト内に複数の値が表示されています。
エージェント・プロパティーのデフォルト値を指定するには、そのデフォルト値を allDefaultValues メンバー変数に提供します。このメンバー変数は、Object 値の配列です。この配列内の要素の数は、プロパティーのカーディナリティーと同じでなければなりません。
ビジネス・オブジェクト・ウィザードは、デフォルト値をプロパティーに割り当ててから、プロパティーを表示します。プロパティー値を指定してこのデフォルトをオーバーライドしない場合、このデフォルトの値はプロパティー値のままとなります。
表 52 は、デフォルト値の振る舞いをまとめたものです。
カーディナリティー | allDefaultValues のコンテンツ | 表示 |
---|---|---|
単一 | 1 つの要素 |
有効な値を持つ場合 (isMultiple=true): デフォルト値は、有効な値のドロップダウン・リスト内で「チェックマーク付き」項目として表示されます。
有効な値を持たない場合 (isMultiple=false): デフォルト値は、プロパティーの「値」フィールドに表示されます。
|
複数 | 1 つまたは複数の要素 | デフォルト値は、有効な値のドロップダウン・リスト内の「チェックマーク付き」項目として表示されます。 |
単一カーディナリティーのエージェント・プロパティーを初期化するには、次のステップを実行します。
有効な値のリストを提供しない 場合は、isMultiple 変数に false を設定し、有効な値の配列を渡さないようにします。
次のコード・フラグメントは、選択対象の値のリストを提供せず、デフォルト値が 256 である単一カーディナリティー・エージェント・プロパティーを初期化します。
defaultVal[0] = 256; AgentProperty("Property1", AgentProperty.TYPE_INTEGER, "Description of property", false, false, ODKConstant.SINGLE_CARD, null, defaultVal);
複数カーディナリティー・エージェント・プロパティーを初期化するには、次のステップを実行します。
有効な値のリストを提供しない 場合、ビジネス・オブジェクト・ウィザードは、各プロパティー値を指定するためのサブグリッドを提供します。
図 65 に示すコード・フラグメントは、有効な値とデフォルト値のリストを持つ、複数カーディナリティー・エージェント・プロパティーである Verbs を初期化します。
AgentProperty クラスは、エージェント・プロパティーに対する条件を定義する機能を備えています。条件 を設定すると、従属プロパティー と呼ばれる 1 つのエージェント・プロパティーの値を別のエージェント・プロパティーの値に基づいて制限できます。条件は、表 53 に示すように、2 つの部分 (それぞれの部分は特定のタイプの副条件) から構成されます。
副条件 | 説明 | ODK API クラス |
---|---|---|
入力条件 | 現在のエージェント・プロパティー値に対する条件を定義します。 | InputCondition |
従属条件 | 関連する入力条件が true に評価されたときに満たす必要のある、従属プロパティーに対する条件を定義します。 | DependentCondition |
条件を表すために、ODK API は、CompleteCondition クラスのインスタンスである完了条件オブジェクトを定義します。表 54 は、完了条件オブジェクトに含まれるメンバー変数を示しています。
完了条件オブジェクトには、エージェント・プロパティーに対する条件を 1 つだけ 記述した情報が含まれます。エージェント・プロパティーには、多数の条件を定義することができます。それぞれの条件の完了条件オブジェクトは、エージェント・プロパティーの AgentProperty オブジェクトの allDependencies メンバー変数に保管されます。
エージェント・プロパティーに対する条件を 1 つ作成するには、次のステップを実行します。
InputCondition クラスは、現在のエージェント・プロパティー値に対する条件を記述する入力条件 を表します。
入力条件が true に評価されると、関連する従属条件が従属エージェント・プロパティーに適用されます。
表 55 は、入力条件を定義する際に必要な情報を示しています。
入力条件を作成するには、いずれかの形式の InputCondition() コンストラクターを使用します。図 74 に示すコード・フラグメントは、エージェント・プロパティー値と 2 つの定数ストリング値「optionA」および「optionB」とを比較する入力条件を作成します。エージェント・プロパティー値をその他のプロパティー値と比較することもできます。図 72 に示すコード・フラグメントは、エージェント・プロパティーの値を現在 Property2 エージェント・プロパティーに入っている値と比較する入力条件を作成します。
図 72. プロパティー値と別のプロパティー値を比較する入力条件
// Instantiate a complete-condition object condition1 = new CompleteCondition();
// Input condition to compare property value with Property2's value condition1.allInputConditions[0] = new InputCondition( CompleteCondition.OP_NOT_EQUAL, true, AgentProperty.TYPE_INTEGER, "Property2");
図 72 で isDynamic メンバー変数には true が設定されています。これによりビジネス・オブジェクト・ウィザードは、最初に Property2 プロパティーの現行値を取得してから、ユーザー指定値とこの値を比較するようになります。また、specificValue には「Property2」、つまり比較対象のプロパティー名が設定されています。この入力条件の結果、プロパティーの従属条件は、このプロパティーの値が Property2 の値と同じでない 場合に限って 適用されます。
DependentCondition クラスは、特定の従属プロパティーの値に対する制限を記述する従属条件 を表します。
従属プロパティーは、その値が何らかのかたちで現在のプロパティーの値に依存しているプロパティーです。関連する 1 つまたは複数の入力条件が true に評価される場合、従属プロパティーの値は、従属条件で指定される制限を満たす必要があります。
表 56 は、従属条件を定義する際に必要な情報を示しています。
従属条件を作成するには、いずれかの形式の DependentCondition() コンストラクターを使用します。図 74 に示すコード・フラグメントは、次の従属条件を作成します。
従属プロパティー値をその他のプロパティー値と比較することもできます。図 73 に示すコード・フラグメントは、従属プロパティーの値を現在 Property2 エージェント・プロパティーに入っている値と比較する従属条件を作成します。
図 73. プロパティー値を別のプロパティー値と比較する従属条件
// Dependent condition to compare property value with Property2's value condition1.allDependentConditions[0] = new DependentCondition( CompleteCondition.OP_EQUAL, true, AgentProperty.TYPE_INTEGER, "Property2");
図 73 で isDynamic メンバー変数には true が設定されています。これによりビジネス・オブジェクト・ウィザードは、最初に Property2 プロパティーの現行値を取得してから、従属プロパティーの値とこの値とを比較するようになります。また、specificValue には「Property2」、つまり比較対象のプロパティー名が設定されています。
あるエージェント・プロパティー (Property1) に対して条件を定義し、この Property1 の値に基づいて 2 つの従属プロパティーに対する制限を指定したいとします。
図 74 は、上記 2 つの条件を実装したコードを示しています。
// 1. Instantiate the complete-condition object condition1 = new CompleteCondition();
// 2. Create the condition on the "optionA" value // a) Instantiate the input condition on "optionA" condition1.allInputConditions[0] = new InputCondition( CompleteCondition.OP_EQUAL, false, AgentProperty.TYPE_STRING, "optionA");
// b) Instantiate the dependent conditions for DepProperty1 condition1.allDependentConditions[0] = new DependentCondition( "DepProperty1", CompleteCondition.OP_EQUAL, false, AgentProperty.TYPE_INTEGER, "0");
condition1.allDependentConditions[1] = new DependentCondition( "DepProperty1", CompleteCondition.OP_EQUAL, false, AgentProperty.TYPE_INTEGER, "1");
condition1.allDependentConditions[2] = new DependentCondition( "DepProperty1", CompleteCondition.OP_EQUAL, false, AgentProperty.TYPE_INTEGER, "256");
condition1.allDependentConditions[3] = new DependentCondition( "DepProperty1", CompleteCondition.OP_EQUAL, false, AgentProperty.TYPE_INTEGER, "512");
// 3. Instantiate the next complete-condition object condition2 = new CompleteCondition();
// 4. Create the condition on the "optionB" value // a) Instantiate the input condition on "optionB" condition2.allInputConditions[0] = new InputCondition( CompleteCondition.OP_EQUAL, false, AgentProperty.TYPE_STRING, "optionB");
// b) Instantiate the dependent conditions for DepProperty2 condition2.allDependentConditions[0] = new DependentCondition( "DepProperty2", CompleteCondition.OP_GREATER_THAN_EQUAL, false, AgentProperty.TYPE_INTEGER, "1");
condition2.allDependentConditions[1] = new DependentCondition( "DepProperty2", CompleteCondition.OP_LESS_THAN_EQUAL, false, AgentProperty.TYPE_INTEGER, "5");
// Save conditions in the agent-property object agentProp.allDependencies[0] = condition1; agentProp.allDependencies[1] = condition2;