Sample : FrameImportを使った実装を便利に行う。
FrameImport機能を使った場合の実装で、「特定画面をImportしたフレーム」(以降、子フレームと表現)から 「Importされたフレーム」(以降、親フレームと表現)の要素へアクセスできないのが不便です。
そこで、子フレームから特定の命名規約により親フレームのコンポーネントに対する処理ブロックを追加したり、 親フレームのコンポーネントを子フレームのアイテムに自動バインドしてロジッククラスの操作対象として使用するための ExecutionHookerを用意してみました。
実行中にアイテムや処理ブロック内の実行リストを操作したりしているため、 その他のHookerや複雑なロジッククラスを使用している場合など、予期せぬ動作をしてしまう事も考えられます。 このページ自体がサンプルである事もあり、サポートの対象外のモジュールですからご注意ください。
親フレームの仕様↑top
まずはサンプル親フレームの前提条件(ToolClientの設定)の説明です。
親フレームの設定↑top

コンポーネント ButtonF3
- アイテム
ButtonF3 - 実行リスト
F3-ダイアログ表示
コンポーネント ButtonF4
- アイテム
ButtonF4 - 実行リスト
F4-YesNoダイアログ表示(UserError:CANCEL)
コンポーネント ButtonF5
- アイテム
なし
コンポーネント ButtonF12
- アイテム
ButtonF12 - 実行リスト
画面終了
コンポーネント CommonMessageArea
- アイテム
なし
親フレーム単体での実行↑top
- コンポーネント ButtonF3
Clickする事により、「F3が押されました。」というMessageDialogが表示されます。 - コンポーネント ButtonF4
Clickする事により、「F4が押されました。Noを押すとCancelします。」というYesNoDialogが表示されます。 - コンポーネント ButtonF5
アイテムすら定義されていないため、何も起こりません。 - コンポーネント ButtonF12
Clickする事により、画面が終了します。 - コンポーネント CommonMessageArea
アイテムすら定義されていないため、何も表示されません。
子フレームの仕様↑top
次にサンプル子フレームの前提条件(ToolClientの設定)の説明です。
子フレームの設定↑top

コンポーネントを中心にみた設定。
コンポーネント Text1
- アイテム
Text1 - 実行リスト
なし
コンポーネント Text2
- アイテム
Text2 - 実行リスト
なし
コンポーネント ButtonCalc
- アイテム
ButtonCalc - 実行リスト
計算
アイテムを中心に見た設定。
アイテム @BindTo_ CommonMessageArea
- コンポーネント
なし - 実行リスト
なし - 使用場所
計算ロジッククラスのOut
上記以外のアイテムは先にコンポーネント中心に見たときに説明されているので省略します。 また、この@BindTo_CommonMessageAreaに関してはコンポーネントが設定されていないため、 このアイテムに値を設定してもそれはどこにも表示されないはずです。しかし、計算ロジッククラスのOutに設定されています。
処理ブロックを中心に見た設定。
処理ブロック @Override_ ButtonF3
- 実行リスト
「@Override」MessageDialogを表示。 - 使用場所
なし
処理ブロック @Extends_ ButtonF4
- 実行リスト
「@Extends」MessageDialogを表示。 - 使用場所
なし
処理ブロック @BindTo_ ButtonF5
- 実行リスト
「@BindTo」MessageDialogを表示。 - 使用場所
なし
処理ブロック @ExtendsBefore_ ButtonF12
- 実行リスト
「終了しますか?」YesNoDialogを表示。 - 使用場所
なし
注意すべき点として、処理ブロックとして定義されているのに、どれも「どこからも使用されていない」 という点です。通常ですと処理ブロックは「ExecuteAfter」等を使用して実行するはずです。
子フレームの実行↑top
- コンポーネント ButtonF3
Clickする事により、「@Override」というMessageDialogが表示されます。 - コンポーネント ButtonF4
Clickする事により、「F4が押されました。Noを押すとCancelします。」というYesNoDialogが表示されます。 ここで「No」を押すと何も起こりませんが、「Yes」を押すと「@Extends」MessageDialogが表示されます。 - コンポーネント ButtonF5
Clickする事により、「@BindTo」というMessageDialogが表示されます。 - コンポーネント ButtonF12
Clickする事により、「終了しますか?」YesNoDialogが表示され、「Yes」を選択したときのみ画面が終了します。 - コンポーネント ButtonCalc
Clickする事により、Text1とText2の加算結果がCommonMessageAreaに表示されます。 - コンポーネント CommonMessageArea
コンポーネントButtonCalcによる計算結果が表示されます。
実行時の動作の説明↑top
コンポーネント ButtonF3↑top
親フレームにて「F3が押されました。」MessageDialogの処理が設定されていたはずなのに、 子フレームの「@Override_ButtonF3」処理ブロックに設定されたロジッククラスが動作しています。
これは、子フレームの「@Override_ButtonF3」処理ブロックの 物理名のPrefix「@Override」をHookerがFrameLoad時に判断して、 親フレームの「ButtonF3」の実行リストを「上書き」したためです。
コンポーネント ButtonF4↑top
親フレームにて「F4が押されました。Noを押すとCancelされます。」YesNoDialogの処理がひとつだけ設定されていたはずなのに、 Yes押下後に子フレームの「@Extends_ButtonF4」処理ブロックに設定されたロジッククラスが動作しています。
これは、子フレームの「@Extends_ButtonF4」処理ブロックの 物理名のPrefix「@Extends」をHookerがFrameLoad時に判断して、 親フレームの「ButtonF4」の実行リストへ「追加拡張」したためです。
コンポーネント ButtonF12↑top
親フレームにて無条件に画面終了を行う処理が設定されていたはずなのに、 画面終了前に子フレームの「@ExtendsBefore_ButtonF12」処理ブロックに設定されたロジッククラスが動作しています。
これは、子フレームの「@ExtendsBefore_ButtonF12」処理ブロックの 物理名のPrefix「@ExtendsBefore」をHookerがFrameLoad時に判断して、 親フレームの「ButtonF12」の実行リストへ「挿入拡張」したためです。
コンポーネント ButtonF5↑top
親フレームでは処理は設定されていなかったはずなのに、 子フレームの「@BindTo_ButtonF5」処理ブロックに設定されたロジッククラスが動作しています。
これは、子フレームの「@BindTo_ButtonF5」処理ブロックの 物理名のPrefix「@BindTo」をHookerがFrameLoad時に判断して、 親フレームの「ButtonF5」の実行リストへ「バインド」したためです。
コンポーネント ButtonCalc↑top
子フレームではコンポーネントの設定がされていないアイテム「@BindTo_CommonMessageArea」 に計算結果を設定していたはずなのに、親フレームの「CommonMessageArea」に計算結果が表示されています。
これは、子フレームの「@BindTo_CommonMessageArea」アイテムの 物理名のPrefix「@BindTo」をHookerがFrameLoad時に判断して、 親フレームの「CommonMessageArea」コンポーネントへ「バインド」したためです。
Hookerの仕様↑top
ここで紹介するHookerはアイテムや処理ブロックの物理名の「@」で始まるPrefixを 判断することにより、以下の様に実行エンジンの動作を変更する仕様を持っています。
-
@Override_
物理名から「@Override_」を削除した名称を持つアイテムまたは処理ブロックを探し出し、 発見した要素の実行リストを全て削除し、自分自身の実行リストを登録します。 -
@Extends_
物理名から「@Extends_」を削除した名称を持つアイテムまたは処理ブロックを探し出し、 発見した要素の実行リストの後ろに、自分自身の実行リストを登録します。 -
@ExtendsBefore_
物理名から「@ExtendsBefore_」を削除した名称を持つアイテムまたは処理ブロックを探し出し、 発見した要素の実行リストの先頭に、自分自身の実行リストを挿入します。 -
@BindTo_
物理名から「@Override_」を削除した名称を持つコンポーネントを探し出し、 発見したコンポーネントを自分自身のコンポーネントとして設定します。
このHookerを使用することにより、アイテムや処理ブロックの物理名の先頭に 「@」又は「@」があるにも関わらず上記のどの修飾詞にも該当しないPrefixだった場合はWARNINGレベルのログを出力します。
また、正常に上記4種類の操作が完了した場合はINFOレベルでその旨ログ出力します。
@BindTo_の適用先コンポーネントとして、入力フィールド等を設定した場合などについての調査が十分に行われていません。 ですので@BindTo_の使用には十分に注意を払ってください(Button等のイベント系で使用するのみが理想的です)。
実際のHookerのクラスは
[サンプル提供]:
jp.ne.mki.wedge.education.hooker.AnnotatedExecutionListHooker
ですが、ソースの中身についての説明は行いません。