PEXA Clientについて

チュートリアル

定義パターン

定義ファイル

リファレンス

目次

  1. はじめに
  2. Area定義の内容
  3. identityセクション
  4. descriptionセクション
  5. reference-listセクション
  6. layoutセクション
  7. component-mappingセクション
  8. statechartセクション
  9. command-listセクション
  10. key-bindingセクション
  11. focus-traversal-policyセクション
  12. timer-scheduleセクション
  13. error-handlingセクション
  14. transition-listセクション
  15. statusセクション
  16. Area定義全体のサンプル


はじめに

このドキュメントは、PEXAクライアントフレームワークで使用するArea定義ファイルについて解説するものです。

Area定義ファイルは、画面内に配置される"領域"の単位で作成されるXML形式の定義ファイルです。
この定義ファイルには、Areaに含まれるContent、コンポーネントの制御情報、画面で行われるView寄りの実行処理などが含まれます。 位置づけとしては、MVCモデルにおけるV(View)にあたります。

Area定義ファイルの内部は、いくつかのセクションに分かれています。 以下でArea定義ファイルの内容の概説およびそれぞれのセクションの詳細を解説していきます。

なお、文中にでてくる Page定義についてはこちらを、 Content定義についてはこちらを、 Commandについてはこちら参照記法についてはこちらを 参照してください。


Area定義の内容

Area定義に含まれる情報には、主に以下の物があります。

Areaの識別情報

Areaはシステム内でユニークに特定できる必要があります。
そのために、Areaを識別するためのIDや名称を必ず定義する必要があります。

詳細はidentityセクションを参照してください。


Areaから参照する要素の宣言

Areaは、単独で構成される場合もありますが、サービスや業務項目を取り扱う場合はContentとリンクします。 このようなAreaとリンクする要素を宣言するセクションが用意されているので、必要な分だけ列挙してあらかじめ 宣言しておく必要があります。

詳しくはreference-listセクションを参照してください。


Areaのレイアウト制御情報

Areaは自身のみで画面の一領域を構成する場合もあれば、自身は親Areaとなって共通の Areaを取り込んだり、複数の子エリアを束ねて一領域を構成する場合もあります。 このような、Area自身のレイアウト制御情報を記述するセクションが用意されています。

ここでは、エリアの構成レイアウト、子エリアの取り込み、割り当て情報、実際に画面上で表示される GUIの実装オブジェクトの指定などをすることになります。

GUIの実装オブジェクトは、"パネルエリア"レイアウトを使用するエリアで指定します。
フレームワークと組み合わせるViewの実装方式によって指定する対象が違ってきますが、 現在標準で対応しているSwingを使用したリッチクライアント方式をとる場合は、 javax.swing.JPanelを拡張して作成した画面パネルのクラス名を指定します。

詳しくはlayoutセクションを参照してください。


コンポーネント情報

画面上に配置される最小単位のGUIコンポーネント(ボタンやテキストフィールドなど)をフレームワークから 制御するために、Area定義で細かいパラメータを記述します。

基本的な形式としては、GUIコンポーネント一つ一つに対してXMLをタグを記述し、それぞれ毎に決められた 属性値や子タグで制御パラメータを指定する形となります。

詳しくはcomponent-mappingセクションを参照してください。


状態遷移表

画面の処理状態に応じて、実行できる処理や有効になるコンポーネントを制御したい場合に、この状態遷移表をArea定義に記述します。
状態遷移表を定義すると、現在の処理状態において受信できるイベントを制限することが出来るので、より細かい制御が出来るようになります。
また、コンポーネントと処理状態をリンクさせることが出来るので、特定の処理状態の時にのみコンポーネントを有効にすると言った制御も可能になります。

詳しくはstatechartセクションを参照してください。


実行コマンド情報

画面が起動したとき、画面上でボタン押下されたとき等のイベントに対応して実行したい処理を、コマンドとしてArea定義に記述します。
コマンドはIDをつけて複数個定義することができ、内部は簡易スクリプト的に実行命令と簡単な判定、分岐を組み合わせて記述することが出来ます。
具体的には、画面遷移、ContentのAction実行、ダイアログ表示、状態遷移、画面のcloseといったことが可能です。

また、JavaクラスとしてカスタムのCommandクラスを作成してそれを呼び出すことも可能です。

詳しくはcommand-listセクションを参照してください。


キーバインディング設定

画面上のフォーカスがどのコンポーネントにあたっているかとは関係なく、例えばファンクションキー押下で特定の処理を 実行させたいような場合のキーと実行処理のバインディング設定を記述することが出来ます。
ファンクションキー、Ctrlキー、Shiftキーなどのキーストロークを単数もしくは複数個組み合わせて、それらのキーストロークが 発生した際に特定のイベントを発行できます。また、このキーバインドは有効範囲をArea内とPage全体から選べます。

状態遷移表が定義されていれば、そこで定義されているイベント名とキーストロークをリンクさせることできます。
また、"COMMAND[{コマンド名}]"という形式のイベント名を指定すると実行コマンド情報 に定義されているコマンドを直接実行できます。

詳しくはkey-bindingセクションを参照してください。


フォーカス移動順設定

画面上でTabキーを押した際の、フォーカス移動順を設定することが出来ます。
ここで設定するフォーカス移動順は、GUIコンポーネントの単位で設定されます。指定はGUIコンポーネントのname属性値とリンクさせて行います。

詳しくはfocus-traversal-policyセクションを参照してください。


タイマータスク設定

タイマーをかけて、定期的にイベントを自動で発行するための設定です。
一定間隔でフレームワーク側が自動でボタンが押しているような動作をさせることができます。
例えば、画面のリフレッシュをユーザーが自分で検索ボタンを行わなくても勝手に行われるようにしたい場合などに使用します。

詳しくはtimer-scheduleセクションを参照してください。


エラーハンドリング情報

業務を行っていく中で発生しうる、回復可能なエラーなどのハンドリング情報を定義することができます。
この情報を記述しない場合は、フレームワークのデフォルトエラーハンドラがエラー処理を行います。

エラーハンドリング情報は、どのエラーハンドラを使用するか記述することで定義します。 フレームワークで用意する標準のdispatchエラーハンドラにより、Commandにエラー処理を委譲することができます。
また、JavaクラスとしてカスタムのErrorHandlerクラスを作成してそれを呼び出すことも可能です。

詳しくはerror-handlingセクションを参照してください。


子エリアの切替情報

親Areaとなって複数の子Areaを束ねるような場合は、そのArea内だけで閉じた画面遷移(Area切替)が発生する場合があります。
そのような場合に、Page定義の画面遷移情報と同じ形式で親Area側に切替情報を定義します。
この場合、Area切替のトリガーとなるのは子Areaで実行されるCommandになります。

詳しくはtransition-listセクションを参照してください。



identityセクション

記述例 :

<identity id="CA_WKFL_001_Login"
          name="ワークフローログインエリア"/>

説明 :
identityセクションは、Areaの識別情報を記述するセクションです。
IDや名称を定義します。


属性値 :
identityタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
id システム内でユニークになるAreaの識別ID 文字列 必須 不可
name Areaの名称 文字列 非必須 不可


descriptionセクション

記述例 :

<description>
    ワークフローにログインする画面に配置されるエリアです。
</description>

説明 :
descriptionセクションは、Areaの詳細説明を記述するセクションです。
フリーフォーマットで文章で記入してください。


reference-listセクション

記述例 :

<reference-list>
    <content ref="CC_WKFL_001_Edit"/>
    <content ref="CC_WKFL_002_Edit"/>
    <content ref="CC_WKFL_003_EditList"/>
</reference-list>

説明 :
reference-listセクションは、Areaが参照する要素(Content)を宣言するセクションです。
このセクションに宣言されていない要素が他のセクション内に現れるとエラーになります。

セクション内の子要素 :
reference-listセクションの子要素として、以下のタグがあります。

contentタグ

Areaが参照するContentを宣言するタグです。必要な分を複数個列挙してください。
contentタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
ref Areaが参照するContentのIDをここで指定します。 文字列 必須 不可


layoutセクション

記述例 : 末端のパネルエリア

<layout ref="PanelLayout">
    <gui implement="aaa.client.view.rich.area.XXXPanel"/>
    <area-mapping>
        <area location="SUB_PANEL[申請情報共通パネル]" ref="CA_COMM_001_01_ApplicantInfoInput"/>
    </area-mapping>
</layout>
記述例 : タブで複数エリアをまとめる親エリア
<layout ref="TabbedPaneLayout">
    <area-mapping>
        <area location="TAB[ユーザー情報]" ref="CA_COMM_001_01_Info"/>
        <area location="TAB[グループ情報]" ref="CA_COMM_001_02_Info"/>
        <area location="TAB[チーム情報]" ref="CA_COMM_001_03_Info"/>
    </area-mapping>
</layout>
記述例 : BorderLayoutで複数エリアをまとめる親エリア
<layout ref="BorderLayout">
    <gui>
        <location ref="NORTH" preferredSize="500,100"/>
        <location ref="CENTER" preferredSize="500,350"/>
        <location ref="SOUTH" preferredSize="500,50"/>
    </gui>
    <area-mapping>
        <area location="NORTH" ref="CA_COMM_001_01_Info"/>
        <area location="CENTER" ref="CA_COMM_001_02_Info"/>
        <area location="SOUTH" ref="CA_COMM_001_03_Info"/>
    </area-mapping>
</layout>

説明 :
layoutセクションは、GUI実装オブジェクトの指定や、子エリアの配置情報を定義するセクションです。
ref属性でAreaLayout定義のIDを指定すると、そのIDにひも尽く画面レイアウト制御機能が実行されます。
AreaLayoutはフレームワークが提供しているものを使用します。詳細は別途リファレンスが用意されているので、そちらを参照してください。

属性値 :
layoutタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
ref AreaLayout定義のIDを指定します。
このIDにひも尽くレイアウト制御機能がAreaを組み立てて画面内の一領域を生成します。
implmemnt属性と排他になります。
文字列 非必須 不可
implement レイアウト制御機能の実装クラス指定。
標準で用意されていないカスタムのレイアウト制御機能を自分で実装して使用したい場合に指定します。
name属性と排他になります。
文字列 非必須 不可

セクション内の子要素 :
layoutセクションの子要素として、以下の物があります。

guiタグ

Areaを表す、GUIの実装オブジェクトに関する設定を行うタグです。
クライアントの形式に沿った画面の実装オブジェクトを指定します。

また、レイアウトの種類によっては子エリアをはめ込む位置毎に子タグ(locationタグ)で細かいパラメータを指定できます。

guiタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
implement GUIの実装オブジェクトの指定です。
基本的に"PanelLayout"を使用時に指定します。
Swingを使用したリッチクライアントなら画面パネルクラス名を指定します。
文字列 PanelLayout時に必須 不可
opaque Areaに対応するGUI実装(画面パネル、タブ領域など)の透過、不透過の指定です。
主にTabbedPaneLayoutを使用した場合等の、エンジンが生成するGUI実装に対して設定したい場合などに使用して下さい。
true,
false
非必須
background Areaに対応するGUI実装(画面パネル、タブ領域など)のベース背景色の指定です。
主にTabbedPaneLayoutを使用した場合等の、エンジンが生成するGUI実装に対して設定したい場合などに使用して下さい。
color参照などでjava.awt.Colorを与える 非必須
closer 閉じるボタン付与の指定です。
基本的に"TabbedPaneLayout"を使用時に指定します。
省略時は"off"が指定されたと見なします。
on,
off
非必須(省略時はoff扱い) 不可

locationタグ
guiタグの子タグとして、locationタグを指定できます。このタグは省略可能です。
このタグにより、エリアをはめ込む位置毎に最大サイズ、最小サイズ、推奨サイズなどの細かいパラメータを指定出来ます。

locationタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
ref 設定対象のlocation名を指定します。 文字列 必須 不可
preferredSize 対象のlocationの推奨サイズを指定します。
カンマ区切りでwidthとheightの数値を指定します。

例 : preferredSize="500,100"
数値 非必須 不可
minSize 対象のlocationの最小サイズを指定します。
カンマ区切りでwidthとheightの数値を指定します。

例 : minSize="500,50"
数値 非必須 不可
maxSize 対象のlocationの最大サイズを指定します。
カンマ区切りでwidthとheightの数値を指定します。

例 : maxSize="500,400"
数値 非必須 不可

area-mappingセクション

Area内での子Areaの配置情報を記述するセクションです。

子タグとしてareaタグがあり、このタグで親Areaと子Areaをマッピングします。

areaタグの属性値は以下の通りです。

属性値名 説明 形式 必須/非必須 参照記法可/不可
location 子エリアを割り当てる要素を特定する名称を指定します。
エリアレイアウトのタイプ毎にここで指定する書式は決まります。
例えば、"パネルエリア"の場合には"サブパネル領域[パネルクラスに設定したname属性値]"のようになります。
文字列 必須 不可
ref name属性で指定された要素にマッピングするAreaのIDを指定します。 文字列 必須 不可


component-mappingセクション

記述例 :

<component-mapping>
    <TextField id="ユーザ名テキストフィールド"
        text="content:CC_WKFL_01_Login/利用者コード"/>
    <TextField id="パスワードテキストフィールド"
        text="content:CC_WKFL_01_Login/利用者認証情報"/>
    <ComboBox id="会社コンボボックス"
        selectedItem="content:CC_WKFL_01_Login/原籍会社No">
        <ComboBoxModel>
            <ObservableComboValue
                items="content:CC_WKFL_01_Login/会社マスタ一覧"
                value="会社No" text="会社名"/>
        </ComboBoxModel>
    </ComboBox>
    <Button id="ログインボタン" text="OK" onClick="COMMAND[ログイン]"/>
    <Button id="閉じるボタン" text="キャンセル" onClick="終了"/>
</component-mapping>

説明 :
個々のGUIコンポーネントの制御情報を記述するセクションです。
GUIコンポーネント一つ一つに対してコンポーネントの種類毎に用意されたコンポーネントタグを記述して、 属性値や子タグでパラメータを設定することによりフレームワークから制御されるようになります。
コンポーネントタグによる設定が記述されていないGUIコンポーネントは、フレームワークの管理外となります。

セクション内の子要素 :
component-mappingの子要素として、GUIコンポーネントの種類毎に対応するコンポーネントタグが用意されます。
このコンポーネントタグについては別途リファレンス が用意されていますので、詳細はそちらを参照してください。


statechartセクション

記述例 :

<statechart>
    <state name="NORMAL">
        <event name="交通費精算書保存" command="保存"/>
        <event name="明細行選択" command="明細行選択"/>
        <event name="行追加" command="行追加"/>
    </state>
    <state name="明細行選択状態">
        <event name="交通費精算書保存" command="保存"/>
        <event name="明細行選択" command="明細行選択"/>
        <event name="行追加" command="行追加"/>
        <event name="行複写" command="行複写"/>
        <event name="行編集" command="行編集"/>
        <event name="行削除" command="行削除"/>
    </state>
    <state name="明細行編集状態">
        <event name="明細行選択" command="明細行選択"/>
        <event name="明細保存" command="明細保存"/>
        <event name="明細編集キャンセル" command="明細編集キャンセル"/>
    </state>
</statechart>

説明 :
Areaの状態遷移表を定義するセクションです。
処理状態を持たせる必要のないAreaであれば、このセクションは省略してください。

状態遷移表を定義することで、画面に処理状態を持たせることが出来ます。これにより、状態に応じて 受信イベントやコンポーネントの有効、無効を制御することが出来ます。

状態遷移表は、Areaが取りうる処理状態のリストと、それぞれの状態で受信することが出来るイベントの組み合わせから構成されます。

受信イベントは任意の文字列で定義できますが、以下のイベントはフレームワークの内部から 発行される物として予約されています。それぞれ以下のような意味となります。

イベント名 送信元 説明
INIT フレームワーク内部 Areaおよびコンポーネントの初期化処理をトリガーするための内部イベントです。
DISPLAY_UPDATE フレームワーク内部 Contentの更新などに伴う、画面表示の更新処理をトリガーするための内部イベントです。
COMMAND コンポーネント(任意指定) 状態遷移表を定義しない場合に、コンポーネントから直接コマンド実行を行うためのイベントです。
任意のコンポーネント(ボタンやメニューなど)から送信することが出来ます。
DIALOG コンポーネント(任意指定) DialogタグでAreaに配置されたDialog画面を表示するイベントです。
INPUT_FIXED コンポーネント(自動発行) 入力を受け付けるGUIコンポーネントがフレームワークに対して入力処理をトリガーするイベントです。
コンポーネントタグにより、フレームワークの制御下にあるGUIコンポーネントが自動で送信します。
CLOSE コンポーネント
フレームワーク内部
Areaが配置されている画面の終了処理のトリガーとなる内部イベントです。
任意のコンポーネント(ボタン、メニュー等)から送信することも出来ます。
CHILD_CLOSED フレームワーク内部(子画面) 子画面が終了した際にポップアップ元の親画面Areaに自動的に送信されるイベントです。
子画面終了時の発行イベントは、closeContext命令のevent属性で任意に指定することも可能です。その場合はこのイベントではなく指定されたイベントが送信されます。

処理状態は任意の文字列で定義できますが、以下の処理状態はフレームワーク側で 固定で用意されていて、それぞれ以下のような意味となります。

処理状態名 受信できるイベント 説明
INITIAL INIT
CLOSE
Areaの初期化処理がまだ実行されていない状態です。
Areaは必ずこの処理状態からスタートします。
この状態は、内部的な処理状態なので状態遷移表では使用できません。
NORMAL COMMAND
DIALOG
INPUT_FIXED
DISPLAY_UPDATE
CLOSE

状態遷移表で定義された任意のイベント
Areaの初期化処理が実行された後は、特に指定がなければこの処理状態に遷移します。
この状態は、状態遷移表で使用することが出来ます。その場合は任意のイベントを受信イベントにすることが出来ます。
状態遷移表を定義しない場合でも、内部的な処理状態として使用されます。
CLOSED 受信できません Areaの終了処理が実行された後は、必ずこの処理状態に遷移します。
この状態に遷移すると、Areaはイベントを一切受信できなくなります。 この状態は、内部的な処理状態なので状態遷移表では使用できません。

セクション内の子要素 : statechartの子要素として、以下があります。

stateタグ

Areaが取りうる処理状態を表すタグです。
statechartタグの内部に複数個記述できます。
以下の属性値があります。

属性値名 説明 形式 必須/非必須 参照記法可/不可
name Areaが取りうる処理状態名を定義します。 文字列 必須 不可

eventタグ

stateタグで定義された処理状態で受信できるイベントを表すタグです。
stateタグの内部に複数個記述できます。
このイベント名と、後述のCommandがこのタグでマッピングされます。
以下の属性値があります。

属性値名 説明 形式 必須/非必須 参照記法可/不可
name 受信できるイベント名を定義します。 文字列 必須 不可
command name属性で指定されたイベントの受信時に実行するCommandのIDを指定します。
後述のcommand-listセクションで定義されたCommandとリンクします。
文字列 必須 不可


command-listセクション

記述例 :

<command-list>
    <command id="ヘルプ画面起動">
        <doTransition transit="ヘルプ画面起動"/>
    </command>
    <command id="ログアウト">
        <doAction content="CC_WKFL_02_Logout" action="ログアウト"/>
        <doTransition transit="ログイン画面に戻る"/>
    </command>
</command-list>

説明 :
画面の実行処理を表すCommandを定義するセクションです。
このセクションの子タグとして、Commandタグを複数個記述することが出来ます。
このセクションで定義されたCommandは、状態遷移表で定義されたイベントか、 イベントを発行するコンポーネントにリンクして実行されます。

予約済Command:
以下のCommand名は、フレームワーク側で予約されています。
予約済みのCommandには、ユーザーが利用可の物と利用不可の物があります。
利用可能なCommandは、特定のタイミングでの処理を定義することが出来ます。

予約済Command名 実行タイミング 利用可/不可 説明
INIT 画面起動時 利用可 画面の初期処理を定義するためのコマンドです。
起動時に処理状態の分岐や個別の初期処理を行うような場合に使用します。
CLOSE CLOSEイベント受信時 利用可 画面の終了イベント(CLOSE)を受信した際の動作を定義するためのコマンドです。
終了前に確認ダイアログを出す必要がある場合などに使用します。
CHILD_CLOSED CHILD_CLOSEDイベント受信時 利用可 子画面の終了イベント(CHILD_CLOSED)を受信した際の動作を定義するためのコマンドです。
子画面終了を契機に何か固定的な処理を行う場合に使用します。
FIX_INPUT INPUT_FIXEDイベント受信時 利用不可 入力確定処理コマンドです。
フレームワークの内部処理用コマンドで、ユーザーによる利用は不可です。
DISPLAY_UPDATE DISPLAY_UPDATEイベント受信時 利用不可 表示更新処理コマンドです。
フレームワークの内部処理用コマンドで、ユーザーによる利用は不可です。

セクション内の子要素 :
command-listの子要素として、以下があります。

commandタグ

画面の初期化、ボタンの押下等のイベント受信時に起動される実行命令を定義するタグです。 このタグの内部に、簡易スクリプト的に処理命令、分岐命令等を記述して処理内容を定義します。
使用できる実行命令については、別途リファレンス が用意されていますので、詳細はそちらを参照してください。

タグとして処理命令を書く代わりに、CommandをJavaクラスとして作成して実行することも出来ます。 その場合はcommandタグのimplement属性でカスタムCommandクラスのクラス名を指定します。

状態遷移表を定義している場合、return命令のnextstate命令、もしくはカスタムCommandの実装メソッドの返値が 遷移先状態の指定になります。これがnullの場合は状態遷移は発生しません。

このタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
id コマンドを識別するIDを指定します
Area内でユニークになる必要があります。
文字列 必須 不可
implement カスタムCommandクラスのクラス名を指定します。
Javaクラスとして作成したCommandクラスをここで指定することで使用することが出来ます。
この属性を指定した場合、commandタグの内部は無視されます。
文字列 非必須 不可


key-bindingセクション

記述例 :

<key-binding>
    <keybind stroke="F1" event="申請書保存"/>
    <keybind stroke="F2" event="申請書明細保存"/>
    <keybind stroke="F3" event="申請書明細追加"/>
    <keybind stroke="F4" event="申請書明細編集"/>
    <keybind stroke="F5" event="申請書明細削除"/>
    <keybind stroke="ESCAPE" event="終了" scope="page"/>
</key-binding>

説明 :
画面上でのキーストロークと発行イベントを結びつけて定義するセクションです。
ここで定義することにより、キーボード上のキーを押下することで特定のイベントを発行することが出来ます。 これにより、マウスで実行ボタン等をクリックしなくても処理を実行させることが出来るようになります。

特に指定がない場合、このキーバインドの有効範囲はAreaに該当する画面パネル上のどこかにフォーカスが当たっている場合のみ有効になります。 もし、どこにフォーカスが当たっていても有効にしたい場合はkeybindタグのscope属性で"page"と指定して下さい。
例えば、ページがメニューバーとタブで構成されていて、メニューバー側のキーバインドでEscキーで画面が終了するようにしたい場合などがこれに該当します。

注意 :
フォーカスがあたっているコンポーネントによっては、特定のキーイベントを内部で消費してしまい、フレームワーク側まで届かない場合があります。 例えば、TextArea上にフォーカスがあたっている場合にはEnterキーの入力イベントは改行入力としてコンポーネントで消費されてしまいます。
このような場合は、以下の2つの方法がありますのでトライしてみてください。

  1. 1つのキー押下だけの場合は、keybindタグのforce属性で"true"を指定してみてください。これにより、強制的に認識させることができる場合があります。
  2. 複数キーの組み合わせの場合は、keybindタグのstroke属性の指定でイベント消費されているキーの前に"released"をつけてみてください。たとえば"ctrl released ENTER"と記述してみて下さい。これにより認識してくれる場合があります。
ただし、どちらの場合も対象のコンポーネントそのものの動作がおかしくなる可能性もあるので、他のキーを割り当てることをおすすめします。

セクション内の子要素 :
key-bindingの子要素として、以下があります。

keybindタグ

特定のキーストロークとそれに対応する発行イベントを結びつけるタグです。
stroke属性には処理実行に割り当てたいキーストロークを指定し、event属性で発行イベントを指定します。

stroke属性に記述できる内容は、javax.swing.KeyStroke#getKeyStroke(String s)で指定できる物と同一です。 単一キー押下でも、複数キーの組み合わせでも指定できます。組み合わせる場合は、スペース区切りでstroke属性に複数個列挙します。

記述例 : F1キーの単一キー押下の場合

<keybind stroke="F1" event="申請書保存"/>
記述例 : Control + 小文字Cキーの複数キー押下の場合
<keybind stroke="control c" event="申請書保存"/>
記述例 : TextAreaがあってもENTERキーのバインディングを有効にしたい場合(ただし副作用あり)
<keybind stroke="released ENTER" event="申請書保存"/>
キーの種類とstroke属性での指定方法は以下の通りです。

キー stroke属性の記述
文字、数字キー "c","1","A"など
ファンクションキー "F1","F2","F3"など
Esc "ESCAPE"
Insert "INSERT"
Delete "DELETE"
Enter "ENTER"
Space "SPACE"
Backspace "BACK_SPACE"
Ctrlキー "control"
Shiftキー "shift"
Altキー "alt"

このタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
stroke 処理を割り当てるキーストロークを指定します。 文字列 必須 不可
event stroke属性で指定されたキーストローク発生時に発行するイベント名を指定します。 文字列 必須 不可
scope キーバインドの有効範囲指定。以下が指定できます。
  • area : エリアの画面パネルにフォーカスが当たっている時のみ有効
  • page : フォーカスの位置に関係なく有効
省略時はデフォルトで"area"となります。
page,
area
非必須 不可
enabled このキーストロークの有効/無効指定です。
基本的には参照記法で有効となる条件を指定します。
省略時はデフォルトでtrueが指定されます。
true,
false
非必須
force stroke属性で指定されたキーストロークのイベントが、あるコンポーネントで消費されてフレームワークまで届かないような場合には、 この属性値をtrueと指定すると、強制的にフレームワークに認識させることができる可能性があります。
ただし、副作用としてそのコンポーネントの動作に問題が生じる場合がありますし、必ずしも強制認識できるとは限りません。
省略時はデフォルトで"false"になります。
true,
false
非必須 不可


focus-traversal-policyセクション

記述例 : 全コンポーネントを直列的に指定

<focus-traversal-policy>
    <traversal component="ユーザーIDテキストフィールド"/>
    <traversal component="パスワードテキストフィールド"/>
    <traversal component="会社コンボボックス"/>
    <traversal component="OKボタン"/>
    <traversal component="キャンセルボタン"/>
</focus-traversal-policy>
記述例 : ボタン群を下位のフォーカスサイクルに指定
<focus-traversal-policy>
    <traversal component="ユーザーIDテキストフィールド"/>
    <traversal component="パスワードテキストフィールド"/>
    <traversal component="会社コンボボックス"/>
    <traversal>
        <traversal component="OKボタン"/>
        <traversal component="キャンセルボタン"/>
    </traversal>
</focus-traversal-policy>
記述例 : 入力フィールドとボタン群を別々のフォーカスサイクルに指定
<focus-traversal-policy>
    <traversal>
        <traversal component="ユーザーIDテキストフィールド"/>
        <traversal component="パスワードテキストフィールド"/>
        <traversal component="会社コンボボックス"/>
    </traversal>
    <traversal>
        <traversal component="OKボタン"/>
        <traversal component="キャンセルボタン"/>
    </traversal>
</focus-traversal-policy>

説明 :
Area上でのフォーカス移動順序を定義するセクションです。
このセクションをArea定義に記述することで、画面パネル側で決められているデフォルトのフォーカス移動順序ではなく、 ここで定義したとおりの順序でフォーカスが移動するようになります。

フォーカス移動順は、GUIコンポーネントの単位で定義します。component-mappingセクションのタグの単位ではないので 注意して下さい。例えば、ラジオボタンであればRadioButtonGroupタグのid属性ではなく、画面パネル上の個々の ラジオボタンGUIコンポーネントのname属性値で指定することになります。

このセクションが定義されていると、この中に含まれていないGUIコンポーネントはフォーカス移動サイクルから除外されます。そのため、Tabキーによるフォーカス移動の対象から外されます。 フォーカス移動サイクルから除外されたコンポーネントは、マウスクリックもしくはCommandのrequestFocus命令によってのみフォーカスが当たるようになります。

ここで指定されたコンポーネントがもしDisable状態だったりInvisible状態だった場合は、そのコンポーネントはスキップされてその次のコンポーネントに フォーカスが移動します。これは、フォーカスを取得できる状態のコンポーネントが見つかるまで続きますので、もしフォーカスの移動元コンポーネントしか有効な コンポーネントが存在しない場合は、最終的にそこに戻ってくるので見かけ上は動いていないように見えます。

フォーカス移動サイクルは、一つのArea内で直列的に設定することもできますし、下位の移動サイクルを指定してサブグループを構成することもできます。
これは、例えば明細情報の編集部分の中に一旦フォーカスが入ったら、その中だけでフォーカス移動が行われて欲しい場合などに使用できます。 下位のフォーカス移動サイクルを定義する場合は、traversalタグをネストさせて記述して下さい。
なお、focus-traversal-policyセクションの内部では、あるコンポーネントを複数個指定することはできません。 上位のフォーカスサイクルと下位のフォーカスサイクル全てを含めて一度しか指定できません。

なお、ここで定義したフォーカス移動順とは別に、コマンド内から特定のコンポーネントに対してフォーカスを当てることができます。 詳細はCommand命令のreqestFocus命令を参照して下さい。

セクション内の子要素 :
focus-traversal-policyの子要素として、以下があります。

traversalタグ

フォーカス移動順とGUIコンポーネントをマッピングするためのタグです。
focus-traversal-policyセクション内でのtraversalタグの順番がそのままフォーカス移動順を表します。

このタグをネストさせることで、下位のフォーカスサイクルを指定することが可能です。その場合は、このタグをネストさせてその内部に下位サイクルに含めたいコンポーネントを指定します。
なお、focus-traversal-policyセクション内では同じコンポーネントを複数回指定することは出来ません。各コンポーネントはこのエリア内のフォーカス移動サイクル全体の中で一度しか出現しないことになります。
このタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
component フォーカス移動サイクルに含めたいGUIコンポーネントのname属性値を指定する。
下位のフォーカスサイクルを定義したい場合は、name属性値を記述しない。
文字列 非必須 不可


timer-scheduleセクション

記述例 :

<timer-schedule>
    <TimerTask id="エラー情報更新" period="5" unit="minute" run="COMMAND[エラー情報検索]"/>
    <TimerTask id="検索結果更新" period="150" unit="second" run="COMMAND[検索]"/>
</timer-schedule>

説明 :
タイマー実行するタスクを定義するセクションです。
ここで定義された実行間隔で、フレームワークが自動でイベントを発行します。
画面のリフレッシュを定期的に自動で行いたい場合などに使用することが出来ます。

指定できる実行間隔は、時、分、秒、ミリ秒のいづれかとなります。

セクション内の子要素 :
timer-scheduleの子要素として、以下があります。

TimerTaskタグ

タイマー実行するタスクを定義するタグです。
任意の数をtimer-scheduleセクションに記述できます。

このタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
id 実行タスク名を定義します。
Area内でユニークとなる名称を付けてください。
文字列 必須 不可
period 実行間隔の数値指定です。
この数値とunit属性の組み合わせで実際の実行間隔が決まります。
数値 必須
unit 実行間隔の単位指定です。
period属性の数値とこの単位の組み合わせで実際の実行間隔が決まります。
指定できるのは以下の4種類です。省略時はデフォルトでsecondになります。
  • hour : 時
  • minute : 分
  • second : 秒
  • millisecond : ミリ秒
hour,
minute,
second,
millisecond
非必須
(省略時はsecond)
不可
run 定期的に発行するイベント名を指定します。
ButtonコンポーネントのonClick属性などと同じ意味です。
文字列 必須 不可


error-handlingセクション

記述例 :

<error-handling>
    <errorhandler implement="xxx.client.plugins.errorhandler.YYYErrorHandler"/>
    <errorhandler name="dispatch">
        <error exception="imeg.share.error.ZZZException"
               event="COMMAND[エラー処理1]"/>
        <error errorcode="11111"
               event="COMMAND[エラー処理2]"/>
    </errorhandler>
</error-handling>

説明 :
実行時に発生するエラーのハンドリング情報を定義するセクションです。
フレームワークでは、エラー発生時の基本的な動作として以下の処理を行います。

  • ログに例外のスタックトレースを出力
  • 例外の形式に応じたエラーダイアログを表示
上記以外の処理をエラー発生時に行いたい場合に、このerror-handlingセクションをArea定義に記述します。 もしエラーハンドリング処理の必要がない場合は、このセクションを記述する必要はありません。

エラーハンドリングの記述は、エラーハンドラをセクション内に定義することで行います。
エラーハンドラは複数個列挙して定義することができます。その場合、上から順にエラーハンドラが実行されていきます。 そしてエラーがハンドリングされた時点で処理を終了しますので、優先順位の高いハンドラから先に記述してください

フレームワークでは、以下の二つのエラーハンドラが標準で提供されています。 標準のエラーハンドラを使用する場合は、後述するerrorhandlerタグのname属性でエラーハンドラ名を指定します。

標準エラーハンドラ名 説明
default デフォルトのエラーハンドラです。
上記の説明にあった、フレームワークによる基本的なエラーハンドリング処理はこのハンドラで実装されています。
defaultエラーハンドラはフレームワークにより必ず組み込まれますので、Area定義で記述する必要はありません。
どのハンドラでもハンドリングされなかったエラーがあればこのハンドラによって強制的に処理されます。
dispatch 指定されたエラーに対応するイベント送信を行うエラーハンドラです。
発生した例外のクラス名もしくはエラーコード(FatalReasonのCode)でハンドリングしたいエラーを指定し、そのエラーに対応して 送信したいイベント名を指定します。これにより、エラーの発生を契機として特定のCommandを実行することができます。

上記の標準エラーハンドラでは対応できない場合、カスタムのエラーハンドラを作成して使用することができます。 その場合は、errorhandlerタグのimplement属性でカスタムエラーハンドラのクラス名を指定します。

セクション内の子要素 :
error-handlingの子要素として、以下のものがあります。

errorhandlerタグ

エラーハンドラを表すタグです。
このタグはerror-handlingセクション内に複数個列挙することができます。

標準のエラーハンドラを使用する場合はname属性で、カスタムのエラーハンドラを使用する場合はimplement属性で指定します。
属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
name 標準で用意されるエラーハンドラ名を指定します。 文字列 implement属性と排他で必須 不可
implement カスタムのエラーハンドラを使用する場合に、ハンドラクラス名を指定します。 文字列 name属性と排他で必須 不可

dispatchハンドラを使用する場合、以下の子タグを記述します。

errorタグ
ハンドリングしたいエラーをこのタグで指定します。
例外のクラス名もしくはエラーコードで指定することができます。該当するエラーを検出した場合、event属性で 指定されたイベントを送信することができますので、エラー処理を特定のCommandに委譲することができます。
属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
exception ハンドリングするエラーを例外クラス名で指定したい場合に記述します。 文字列 errorcode属性と排他で必須 不可
errorcode ハンドリングするエラーをPEXAの例外クラスに含まれるエラーコードで指定したい場合に記述します。 数値 exception属性と排他 不可
event exception属性もしくはerrorcode属性で指定されたエラーが検出された場合に送信するイベント名を記述します。 文字列 必須 不可


transition-listセクション

記述例 :

<transition-list>
    <transition id="子エリアを切替">
        <change-are location="ポータル領域" next="CA_XXX_002"/>
    </transition>
</transition-list>

説明 :
エリア切替の情報を記述するセクションです。子エリアの切替がなければ、このセクションは省略できます。
親エリアとなって子エリアを束ねているような場合に、子エリアの切替が発生する場合にここで定義できます。

セクション内の子要素
transition-listの子要素として、以下のものがあります。

transitionタグ

Areaで発生しうる、子Areaの切替を表すタグです。transition-listの子要素として 複数個列挙できますので、Areaで発生しうる子Area切替の数だけ定義してください。
以下の画面遷移の種別を表すタグを、transitionタグの子タグとして記述します。

change-area
Area内の一部のエリアのみ切替を行う画面遷移です。
属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
location 切替を行う領域名を指定します。
このエリアのレイアウトで用意されている領域名を指定します。
文字列 必須 不可
next 切替先のAreaのIDを指定します。 文字列 必須 不可

add-area
Area内の特定領域にサブエリアを追加します。
属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
location エリア追加を行う領域名を指定します。
このエリアのレイアウトで用意されている領域名を指定します。
文字列 必須 不可
add 追加するAreaのIDを指定します。 文字列 必須 不可


statusセクション

記述例 :

<status>
    <author>$Author: morishita $</author>
    <datetime>$Date:: 2010-03-17 11:56:56 #$</datetime>
    <version>$Revision: 4882 $</version>
</status>

説明 :
Area定義ファイルの編集情報を記述するセクションです。
バージョン管理システムの置換キーワードなどと連携して使用してください。

セクション内の子要素 : 以下の子要素があります。

authorタグ

タグの間にはさんで、ファイルの編集者を記述します。


datetimeタグ

タグの間にはさんで、ファイルの編集日時を記述します。


versionタグ

タグの間にはさんで、ファイルのバージョンを記述します。



Area定義全体のサンプル

<?xml version="1.0" encoding="Windows-31J"?>
<!--
 - Copyright
 -->
<!DOCTYPE client-area SYSTEM "../doctype/client-area.dtd">
<!--==============================================================
 == Current-Module:
 == Release-Date:
 == Release-Version:
 == First-Created-On:
 == First-Created-By:
 == Copy-Right-Owner:
 ==============================================================-->
<client-area>
<!--==============================================================
==  エリアの識別情報
==============================================================-->
    <identity id="CA_WKFL_004_01"
              name="交通費清算書"/>
<!--==============================================================
==  詳細説明
==============================================================-->
    <description>
        SVOステートメント:ACPY_331,ACPY_334,ACPY_335,ACPY_337,ACPY_339
        交通費清算書の新規作成、参照、修正、再作成を行います。
    </description>
<!--==============================================================
==  参照するコンテンツの宣言
==============================================================-->
    <reference-list>
        <content ref="CC_WKFL_331_01_Edit"/>
        <content ref="CC_WKFL_331_02_EditList"/>
        <content ref="CC_WKFL_331_03_Edit"/>
    </reference-list>
<!--==============================================================
==  表示レイアウト情報
==============================================================-->
    <layout ref="PanelLayout">
        <gui implement="aaa.client.view.rich.area.wkfl.XXXPanel"/>
        <area-mapping>
            <area location="SUB_PANEL[申請情報共有パネル]"
                    ref="CA_COMM_001_01_ApplicantInfoInput"/>
        </area-mapping>
   </layout>
<!--==============================================================
==  コンポーネントマッピング
==============================================================-->
    <component-mapping>
        <!-- ================================================= -->
        <!-- 画面上部のタイトル、ボタン                        -->
        <!-- ================================================= -->
        <Label id="タイトルラベル" text="交通費清算書"/>
        <Button id="保存ボタン" text="保存" onClick="交通費精算書保存"/>
        <Button id="閉じるボタン" text="閉じる" onClick="終了"/>
        <!-- ================================================= -->
        <!-- 共通 Edit                                         -->
        <!-- ================================================= -->
        <!-- ================================================= -->
        <!-- 明細 Edit                                         -->
        <!-- ================================================= -->
        <TextField id="使用日テキストフィールド"
            text="content:CC_WKFL_331_03_Edit/使用日"
            available="明細行編集状態"/>
        <TextField id="行先テキストフィールド"
            text="content:CC_WKFL_331_03_Edit/行き先"
            available="明細行編集状態"/>
        <ComboBox id="乗物コンボボックス"
            selectedItem="content:CC_WKFL_331_03_Edit/乗り物種別"
            available="明細行編集状態">
            <ComboBoxModel>
                <PhenomenonComboValue items="ptype:乗り物種別/definedValues"/>
            </ComboBoxModel>
        </ComboBox>
        <TextField id="移動時刻発テキストフィールド "
            text="content:CC_WKFL_331_03_Edit/出発地"
            available="明細行編集状態"/>
        <TextField id="移動時刻着テキストフィールド  "
            text="content:CC_WKFL_331_03_Edit/到着地"
            available="明細行編集状態"/>
        <RadioButtonGroup id="往復種別ラジオボタングループ"
            selectedItem="content:CC_WKFL_331_03_Edit/往復種別"
            available="明細行編集状態">
            <RadioButton id="往復ラジオボタン" on="ptype:往復種別/往復"/>
            <RadioButton id="片道ラジオボタン" on="ptype:往復種別/片道"/>
        </RadioButtonGroup>
        <TextField id="申請額テキストフィールド "
            text="content:CC_WKFL_331_03_Edit/申請額"
            available="明細行編集状態"/>
        <TextField id="領収書Noテキストフィールド "
            text="content:CC_WKFL_331_03_Edit/領収書番号"
            available="明細行編集状態"/>
        <TextArea id="備考テキストエリア "
            text="content:CC_WKFL_331_03_Edit/備考"
            available="明細行編集状態"/>
        <Button id="OKボタン" text="OK" onClick="明細保存"/>
        <Button id="キャンセルボタン" text="キャンセル" onClick="明細編集キャンセル"/>
        <!-- ================================================= -->
        <!-- 明細 EditList                                     -->
        <!-- ================================================= -->
        <Table id="明細テーブル" selectMode="single" onClick="明細行選択"
            selectedRow="content:CC_WKFL_331_02_EditList/選択明細">
            <TableModel rows="content:CC_WKFL_331_02_EditList/明細一覧">
                <TableColumn header="使用日" ptype="使用日"/>
                <TableColumn header="行先" ptype="行き先"/>
                <TableColumn header="乗物" ptype="乗り物種別"/>
                <TableColumn header="発" ptype="出発地"/>
                <TableColumn header="着" ptype="到着地"/>
                <TableColumn header="往復/片道" ptype="往復種別"/>
                <TableColumn header="金額" ptype="申請額"/>
                <TableColumn header="備考" ptype="備考"/>
                <TableColumn header="領収書No" ptype="領収書番号"/>
            </TableModel>
        </Table>
        <Button id="行追加ボタン" text="行追加" onClick="行追加"/>
        <Button id="行複写ボタン" text="行複写" onClick="行複写"/>
        <Button id="行編集ボタン" text="行編集" onClick="行編集"/>
        <Button id="行削除ボタン" text="行削除" onClick="行削除"/>
    </component-mapping>
<!--==============================================================
==  状態遷移表
==============================================================-->
    <statechart>
        <state name="NORMAL">
            <event name="交通費精算書保存" command="保存"/>
            <event name="明細行選択" command="明細行選択"/>
            <event name="行追加" command="行追加"/>
        </state>
        <state name="明細行選択状態">
            <event name="交通費精算書保存" command="保存"/>
            <event name="明細行選択" command="明細行選択"/>
            <event name="行追加" command="行追加"/>
            <event name="行複写" command="行複写"/>
            <event name="行編集" command="行編集"/>
            <event name="行削除" command="行削除"/>
        </state>
        <state name="明細行編集状態">
            <event name="明細行選択" command="明細行選択"/>
            <event name="明細保存" command="明細保存"/>
            <event name="明細編集キャンセル" command="明細編集キャンセル"/>
        </state>
    </statechart>
<!--==============================================================
==  コマンド定義
==============================================================-->
    <command-list>
        <!--======================================================
        == 画面起動時の実行処理コマンド
        =======================================================-->
        <command id="INIT">
            <if condition="filter:[page:context = 新規作成]">
                <true>
                    <doAction content="CC_WKFL_331_01_Edit"
                            action="新規作成"/>
                </true>
                <false>
                    <doAction content="CC_WKFL_331_01_Edit"
                            action="引継"/>
                </false>
            </if>
        </command>
        <!--======================================================
        == 保存ボタン押下時の実行処理コマンド
        =======================================================-->
        <command id="明細行選択">
            <doAction content="CC_WKFL_331_03_Edit" action="クリア"/>
            <doAction content="CC_WKFL_331_02_EditList" action="選択"/>
            <return nextstate="明細行選択状態"/>
        </command>
        <!--======================================================
        == 保存ボタン押下時の実行処理コマンド
        =======================================================-->
        <command id="保存">
            <doAction content="CC_WKFL_331_01_Edit" action="保存"/>
            <showMessageDialog message="保存しました"/>
            <closeContext />
        </command>
        <!--======================================================
        == 行追加ボタン押下時の実行処理コマンド
        =======================================================-->
        <command id="行追加">
            <doAction content="CC_WKFL_331_02_EditList" action="追加"/>
            <return nextstate="明細行編集状態"/>
        </command>
        <!--======================================================
        == 行複写ボタン押下時の実行処理コマンド
        =======================================================-->
        <command id="行複写">
            <doAction content="CC_WKFL_331_02_EditList" action="複写"/>
            <return nextstate="明細行編集状態"/>
        </command>
        <!--======================================================
        == 行編集ボタン押下時の実行処理コマンド
        =======================================================-->
        <command id="行編集">
            <doAction content="CC_WKFL_331_02_EditList" action="編集"/>
            <return nextstate="明細行編集状態"/>
        </command>
        <!--======================================================
        == 行削除ボタン押下時の実行処理コマンド
        =======================================================-->
        <command id="行削除">
            <doAction content="CC_WKFL_331_02_EditList" action="削除"/>
        </command>
        <!--======================================================
        == OKボタン押下時の実行処理コマンド
        =======================================================-->
        <command id="明細保存">
            <doAction content="CC_WKFL_331_03_Edit" action="保存"/>
            <doAction content="CC_WKFL_331_03_Edit" action="クリア"/>
            <doAction content="CC_WKFL_331_02_EditList" action="選択"/>
            <return nextstate="明細行選択状態"/>
        </command>
        <!--======================================================
        == キャンセルボタン押下時の実行処理コマンド
        =======================================================-->
        <command id="明細編集キャンセル">
            <showConfirmDialog message="編集内容を破棄します。よろしいですか?">
                <ok>
                    <doAction content="CC_WKFL_331_03_Edit" action="クリア"/>
                    <doAction content="CC_WKFL_331_02_EditList" action="選択"/>
                    <return nextstate="明細行選択状態"/>
                </ok>
            </showConfirmDialog>
        </command>
    </command-list>
<!--==============================================================
==  ファイル編集情報
==============================================================-->
    <status>
        <author>$Author: morishita $</author>
        <datetime>$Date:: 2010-03-17 11:56:56 #$</datetime>
        <version>$Revision: 4882 $</version>
    </status>
</client-area>


更新情報

  • 最終更新者 : $Author: morishita $
  • 最終更新日時 : $Date:: 2010-03-17 11:56:56 #$
  • バージョン : $Revision: 4882 $



Copyright © 2006, Atrris Corporation