基本的なカスタマイズ > ユーザーインタフェースのカスタマイズ > ウィザードの作成 > ウィザード処理 > ソリューション > 複数のターゲットオブジェクトが含まれたウィザード > 関連する複数のターゲットオブジェクト
  
関連する複数のターゲットオブジェクト
ウィザードによっては、関連のある複数のターゲットオブジェクトを含めることができます。たとえば、変更通知を作成し、その変更通知に関連する変更タスクを作成するウィザードを生成できます。変更通知と変更タスク間に関連性を生成するには、変更通知のプロセッサに、オブジェクト間にどのような関連性を生成するのかを指示する必要があります。
変更通知 ObjectBean には 3 つの子 ObjectBeans があります。変更タスク ObjectBeans は親 ObjectBean のみを持ち、子はありません。
この場合、ObjectBeans の構造を作成するために独自の FormProcessorController を記述する必要があります。これには、DefaultFormProcessorController のサブクラスを指定しても構いません。
デフォルトコントローラは、これらの ObjectBeans を作成します。その createObjectBeanStructure() メソッドはオーバーライドされ、すべての ObjectBeans のフラットリストが与えられる場合があります。そのメソッドでは、ObjectBeans の親と子を設定します。すべてのルート ObjectBeans のリストを戻します。ObjectBean 構造を作成した後、DefaultFormProcessorController は、ObjectBeans を以下のように ProcessorBeans にグループ化する ProcessorBean.newCollection() メソッドを呼び出します。
上図の円は ObjectBeans を表し、実線はそれらの関連性を表します。長方形は 2 つの ProcessorBeans を表し、点線はそれらの関連性を表します。
ProcessorBean には、その中のオブジェクトに必要な ObjectFormProcessorObjectFormProcessorDelegates の独自のインスタンスが格納されます。ルート ProcessorBean のプロセッサが "ProcessorInstance1" で、子 ProcessorBean のプロセッサが "ProcessorInstance2" である場合、プロセッサメソッドは、以下の要領で呼び出されます。
メソッド
実行されるタスク
1
ProcessorInstance1.preProcess(ProcessorBean 1 内の ObjectBean)
WTChangeOrder2 オブジェクトのインスタンスを 1 つ作成し、これを ObjectBean の object 属性に保存する。
2
ProcessorInstance2.preProcess(ProcessorBean 2 内の ObjectBean)
WTChangeActivity2 オブジェクトのインスタンスを 3 つ作成し、これらを ObjectBean の object 属性に保存する。
3
ProcessorInstance1.doOperation(ProcessorBean 1 内の ObjectBean)
WTChangeOrder2 オブジェクトを永続化する。
4
ProcessorInstance2.doOperation(ProcessorBean 2 内の ObjectBean)
WTChangeActivity2 インスタンスを永続化する。
5
ProcessorInstance1.postProcess(ProcessorBean 1 内の ObjectBean)
変更通知と変更タスク間の関連付けを生成する。
6
ProcessorInstance2.postProcess(ProcessorBean 2 内の ObjectBean)
なし
7
ProcessorInstance1.postTransactionProcess(ProcessorBean 1 内の ObjectBean)
なし
8
ProcessorInstance2.postTransactionProcess(ProcessorBean 2 内の ObjectBean)
なし
以上のタスクを実行する場合、ある程度の自由度があります。たとえば、メソッド 5 の代わりにメソッド 6 で関連付けを生成しても、影響はありません。あるいは、ObjectFormProcessorDelegate を作成し、その postProcess() メソッドで関連付けを作成することもできます。フレームワークには、ウィザードに合うように、コードをモジュール化できる柔軟性があります。以上のタスクは、主要トランザクションの開始点と終了点を守って行ってください。
ObjectBeans の構造はもっと複雑な場合があります。次に例を示します。
上図のように、以下の条件が当てはまる場合、ObjectBeans は、異なる ProcessorBeans クラスに配置されます。
ObjectBeans 内のオブジェクトが互いに異なるタイプである
ObjectBeans によって ObjectFormProcessor が異なる
(注記: この時点では、ウィザードのすべての ObjectBeansObjectFormProcessor は同じでなければなりません)
ObjectBeans によって ObjectFormProcessorDelegates のリストが異なる
ObjectBeans によって親 ObjectBean が異なる
DefaultFormProcessorController は、ツリーのルート ProcessorBean からリーフ ProcessorBeans の順に、各 ProcessorBean に関連付けられているプロセッサを順番に呼び出していきます。