エージェント・プロパティーの使用

ODA がビジネス・オブジェクト・ウィザードにエージェント・プロパティーを提供する状況は 2 つあります。

エージェント・プロパティーを表すために、ODK API は、AgentProperty クラスのインスタンスであるエージェント・プロパティー・オブジェクトを定義します。

エージェント・プロパティー・オブジェクトをインスタンス化するときは、表 49 に示すそのメンバー変数の一部またはすべてを初期化します。

表 49.
エージェント・プロパティー・オブジェクトのコンテンツ
メンバー変数 説明
propName
エージェント・プロパティーの名前。
description
エージェント・プロパティーの目的を記述するテキスト・ストリング。
type
エージェント・プロパティーのデータ型。プロパティー・タイプ定数によって表されます。
cardinality
エージェント・プロパティーのカーディナリティー。プロパティーが持つことのできる値が単一の値か複数の値かを指定します。
isHidden
ビジネス・オブジェクト・ウィザードがプロパティー値を標準テキストまたは暗号形式のどちらで表示するのかを決定します。
isMultiple
ビジネス・オブジェクト・ウィザードがエージェント・プロパティーの有効な値のドロップダウン・リストを表示するかどうかを決定します (このドロップダウン・リストはユーザーの選択対象となります)。
isReadOnly
エージェント・プロパティーの値を読み取り専用にするかどうかを決定します (表示値の変更が可能であるかどうか)。
isRequired
エージェント・プロパティーの値が必須であるかどうかを決定します (値の指定が必要であるかどうか)。
allDefaultValues
エージェント・プロパティーのデフォルト値の配列。
allDependencies
エージェント・プロパティーの条件の配列。
allValidValues
エージェント・プロパティーの有効な値の配列。
allValues
ユーザーが初期化したエージェント・プロパティー値の配列。

エージェント・プロパティー・オブジェクトをインスタンス化するには、次のいずれかの構文形式の AgentProperty() コンストラクターを使用します。

エージェント・プロパティーの定義

表 50 は、エージェント・プロパティー・オブジェクトに含まれるエージェント・プロパティーについての基本情報を示しています。

表 50. エージェント・プロパティーの基本情報
基本プロパティー情報 AgentProperty メンバー変数 説明
名前 propName

エージェント・プロパティーを識別します。

ビジネス・オブジェクト・ウィザードは、この値を「エージェントの構成」ダイアログ (構成プロパティー) または「BO プロパティー」ダイアログ・ボックス (ビジネス・オブジェクト・プロパティー) の「プロパティー」列に表示します。エージェント・プロパティーの名前は、どの形式の AgentProperty() コンストラクターでも初期化できます。

説明


(オプション)

description

エージェント・プロパティーの目的を説明する追加情報を提供します。

ビジネス・オブジェクト・ウィザードは、この値を「エージェントの構成」ダイアログ (構成プロパティー) または「BO プロパティー」ダイアログ・ボックス (ビジネス・オブジェクト・プロパティー) の「説明」列に表示します。エージェント・プロパティーの説明を初期化する際は、2 番目か 3 番目の形式の AgentProperty() コンストラクターを使用する必要があります。

データ型 type

エージェント・プロパティーが保持している値のデータ型を定義します。

ビジネス・オブジェクト・ウィザードは、この値を「エージェントの構成」ダイアログ (構成プロパティー) または「BO プロパティー」ダイアログ・ボックス (ビジネス・オブジェクト・プロパティー) の「タイプ」列に表示します。 1 番目の形式の AgentProperty() コンストラクターを使用してエージェント・プロパティーを初期化すると (プロパティー名のみの指定)、エージェント・プロパティーのタイプは String にデフォルト設定されます。タイプを指定するには、2 番目か 3 番目の形式の AgentProperty() コンストラクターを使用して、エージェント・プロパティーを初期化します。エージェント・プロパティーのタイプを表す際は、表 67に示すプロパティー・タイプ定数のいずれかを使用します。

プロパティー値の定義

ビジネス・オブジェクト・ウィザードは、エージェント・プロパティーの値を「エージェントの構成」ダイアログ (構成プロパティー) または「BO プロパティー」ダイアログ・ボックスの「値」列に表示します。エージェント・プロパティーを初期化するプロセスの一環として、次の操作を行う必要があります。

表示コントロールのタイプの選択

ビジネス・オブジェクト・ウィザードは、次の AgentProperty メタデータを使用して、プロパティー値を表示するコントロールのタイプを決定します。

表 51 は、プロパティー値コントロールを表示する際の可能な組み合わせを示しています。

表 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 は、デフォルト値の振る舞いをまとめたものです。


表 52. エージェント・プロパティーのデフォルト値
カーディナリティー allDefaultValues のコンテンツ 表示
単一 1 つの要素

有効な値を持つ場合 (isMultiple=true): デフォルト値は、有効な値のドロップダウン・リスト内で「チェックマーク付き」項目として表示されます。

有効な値を持たない場合 (isMultiple=false): デフォルト値は、プロパティーの「値」フィールドに表示されます。

複数 1 つまたは複数の要素 デフォルト値は、有効な値のドロップダウン・リスト内の「チェックマーク付き」項目として表示されます。

単一カーディナリティー・プロパティーの初期化

単一カーディナリティーのエージェント・プロパティーを初期化するには、次のステップを実行します。

次のコード・フラグメントは、選択対象の値のリストを提供せず、デフォルト値が 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 つの部分 (それぞれの部分は特定のタイプの副条件) から構成されます。

表 53. エージェント・プロパティー条件の各部分
副条件 説明 ODK API クラス
入力条件 現在のエージェント・プロパティー値に対する条件を定義します。 InputCondition
従属条件 関連する入力条件が true に評価されたときに満たす必要のある、従属プロパティーに対する条件を定義します。 DependentCondition

完了条件の定義

条件を表すために、ODK API は、CompleteCondition クラスのインスタンスである完了条件オブジェクトを定義します。表 54 は、完了条件オブジェクトに含まれるメンバー変数を示しています。


表 54. 完了条件オブジェクトのコンテンツ
メンバー変数 説明
allInputConditions
入力条件 (InputCondition) オブジェクトの配列。各オブジェクトには、エージェント・プロパティーの値の条件が 1 つだけ定義されています。
allDependentConditions
従属条件 (DependentCondition) オブジェクトの配列。各オブジェクトには、従属プロパティーの値の制限が 1 つだけ定義されています。

この制限は、(allInputConditions 配列内の) 関連する入力条件が true に評価されたときに、従属プロパティーの値に適用されます。

完了条件オブジェクトには、エージェント・プロパティーに対する条件を 1 つだけ 記述した情報が含まれます。エージェント・プロパティーには、多数の条件を定義することができます。それぞれの条件の完了条件オブジェクトは、エージェント・プロパティーの AgentProperty オブジェクトの allDependencies メンバー変数に保管されます。

エージェント・プロパティーに対する条件を 1 つ作成するには、次のステップを実行します。

  1. 条件に関する情報を保持する CompleteCondition オブジェクトをインスタンス化します。
  2. エージェント・プロパティーの入力条件を記述する適切な InputCondition オブジェクトをインスタンス化します。完了条件オブジェクトの入力条件配列 (allInputConditions メンバー変数) に各 InputCondition オブジェクトを保管します。入力条件については、入力条件の定義を参照してください。
  3. エージェント・プロパティーの従属条件を記述する適切な DependentCondition オブジェクトをインスタンス化します。完了条件オブジェクトの従属条件配列 (allDependentConditions メンバー変数) に各 DependentCondition オブジェクトを保管します。詳しくは、従属条件の定義を参照してください。
  4. 完了条件オブジェクトをエージェント・プロパティーの条件配列に保管します。この条件配列は、エージェント・プロパティー・オブジェクトの allDependencies メンバー変数に含まれています。

入力条件の定義

InputCondition クラスは、現在のエージェント・プロパティー値に対する条件を記述する入力条件 を表します。

入力条件が true に評価されると、関連する従属条件が従属エージェント・プロパティーに適用されます。 表 55 は、入力条件を定義する際に必要な情報を示しています。

表 55. 入力条件の情報
入力条件の情報 説明 InputCondition
メンバー変数
演算子 エージェント・プロパティー値に対して行う比較のタイプ。比較は関係演算子として表され、CompleteCondition クラス内の演算子定数の 1 つとして指定されます。 operatorType
特定の値 エージェント・プロパティーの値と比較する値。この値は、定数にすることも、別のエージェント・プロパティーの名前にすることもできます。 specificValuetypeOfSpecificValue
エージェント・プロパティーの値の比較を動的に行うかどうか 現在のエージェント・プロパティーの値を別のプロパティーの値と動的に比較するかどうかを指定する boolean 値。定数が関与する比較では、動的な比較は必要ありません。 isDynamic

入力条件を作成するには、いずれかの形式の 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");
 

図 72isDynamic メンバー変数には true が設定されています。これによりビジネス・オブジェクト・ウィザードは、最初に Property2 プロパティーの現行値を取得してから、ユーザー指定値とこの値を比較するようになります。また、specificValue には「Property2」、つまり比較対象のプロパティー名が設定されています。この入力条件の結果、プロパティーの従属条件は、このプロパティーの値が Property2 の値と同じでない 場合に限って 適用されます。

従属条件の定義

DependentCondition クラスは、特定の従属プロパティーの値に対する制限を記述する従属条件 を表します。

従属プロパティーは、その値が何らかのかたちで現在のプロパティーの値に依存しているプロパティーです。関連する 1 つまたは複数の入力条件が true に評価される場合、従属プロパティーの値は、従属条件で指定される制限を満たす必要があります。 表 56 は、従属条件を定義する際に必要な情報を示しています。

表 56. 従属条件の情報
従属条件の情報 説明 DependentCondition
メンバー変数
名前 関連する 1 つまたは複数の入力条件が true に評価された場合に従属条件が適用される従属プロパティーの名前。 propertyName
演算子 従属プロパティー値に対して行う比較のタイプ。比較は関係演算子として表され、CompleteCondition クラス内の演算子定数の 1 つとして指定されます。 operatorType
特定の値 従属プロパティー値と比較する値。この値は、定数にすることも、別のエージェント・プロパティーの名前にすることもできます。 specificValuetypeOfSpecificValue
ユーザー指定値の比較を動的に行うかどうか 従属プロパティーの値を別のプロパティーの値と動的に比較するかどうかを指定する boolean 値。定数が関与する比較では、動的な比較は必要ありません。 isDynamic

従属条件を作成するには、いずれかの形式の 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");
 

図 73isDynamic メンバー変数には true が設定されています。これによりビジネス・オブジェクト・ウィザードは、最初に Property2 プロパティーの現行値を取得してから、従属プロパティーの値とこの値とを比較するようになります。また、specificValue には「Property2」、つまり比較対象のプロパティー名が設定されています。

サンプル条件の定義

あるエージェント・プロパティー (Property1) に対して条件を定義し、この Property1 の値に基づいて 2 つの従属プロパティーに対する制限を指定したいとします。

図 74 は、上記 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;
 

Copyright IBM Corp. 2004