コマンドマップの定義
コマンドスクリプティングは、XMLファイルで記述します。コマンドマップでは、コマンドスクリプティングのXMLファイルをインクルードするように記述します。以下はコマンドマップから、コマンドスクリプティングのXMLファイル"comscript.xml"を取り込む場合の記述例です。
#commandMap +comscript.xml
コマンドスクリプティングのXMLファイル
コマンドスクリプティングのXMLファイルは拡張子".xml"で作成する必要があります。エンコーディングには"UTF-8"、"Shift_JIS"等、Javaでサポートされている各種のエンコーディングが利用できます。
コマンドスクリプティング記述の概要
コマンドスクリプティング記述は、以下の構成となります。
XMLヘッダ <commandMap> <config>要素 <entry>要素 ...<entry>要素の繰り返し <procedure>要素 ...<procedure>要素の繰り返し </commandMap>
config要素
コマンドスクリプティングの情報を指定します。
entry要素
bean属性で入力データBeanのクラス名を、verb属性でコマンドを指定し、入力のデータと呼ばれるコマンドスクリプティングを対応付けます。
コマンドマップとコマンドスクリプティングを通して、Beanのクラス名とコマンドで一意になる必要があります。
procedure要素
コマンドスクリプティングのサブルーチンを表します。
サブルーチンは、ファイル内で有効になります。
entry要素、procedure要素の内側には、処理のタグを記述することができます。処理のタグを以下に示します。詳細は“定義ファイルリファレンス”を参照してください。
タグ名 | 機能 |
---|---|
validate | 最大値や型のチェックをします。 |
specSection | XMLデータ仕様記述をインラインで記述します。 |
specValidate | 外部ファイルのXMLデータ仕様記述に従って、処理を行います。 |
invoke | サブルーチン、ビジネスクラス、Apcoordinator利用のEJBを呼び出します。 |
invokeEJB | 一般のEJBを呼び出します。 |
invokeObject | 一般のクラスオブジェクトを呼び出します。 |
setResponseBean | 表示領域と対応付けてデータBeanを設定します。 |
newBean | データBeanオブジェクトを生成します。 |
copyValue | 値をコピーします。 |
copyResource | リソースファイルで定義した文字列をコピーします。 |
printLog | ログを出力します。 |
catch | 例外時の動作を記述します。内側に処理のタグを記述します。 |
コマンドスクリプティングの実行中の例外は、com.fujitsu.uji.xscript.ScriptingExceptionとして通知されます。例外時の処理は、セションクラスのhandleExceptionメソッドや、コマンドスクリプティングのcatchタグによって記述することができます。
コマンドスクリプティングでは、処理途中や結果のオブジェクトをスクリプトデータとしてDispatchContextに保存します。スクリプトデータはJavaの記述から、DispatchContextクラスのgetScriptDataおよびsetScriptDataメソッドで参照、設定が可能です。
スクリプトデータの名前として、以下は既定として使用されています。
スクリプトデータ名 | 意味 |
---|---|
uji.current | 現在処理中のオブジェクト、初期値はuji.requestと同じ |
uji.request | 入力のデータBean |
uji.verb | コマンド名 |
uji.session | セションクラス |
uji.application | アプリケーションクラス |
uji.exception | 発生した例外のオブジェクト |
この他、"uji."で始まる名前は予約されています。
コマンドスクリプティング実行終了時にuji.currentに設定されているデータが復帰値となります。復帰値はビジネスクラスで復帰値を返す形態のアプリケーションで有効になります。
動作の概要
以下の記述に従ってコマンドスクリプティングの動作を説明します。
<entry bean="somepackage.EntryBean" verb="ok"> <validate property="value" type="int" minValue="0" maxValue="10" statusText="valueError" /> <invoke name="someEjb" verb="#doOk"/> <setResponseBean pane="body" verb="resmode"/> <catch status="valueError"> <copyValue bean="#値は0以上10以下で入力してください" targetProperty="message" /> <setResponseBean pane="body" verb="retry"/> </catch> </entry>
入力のデータBeanがsomepackage.EntryBeanで、コマンド名がokの場合、このentry要素が実行されます。
validateタグはuji.currentに保存されている入力データBeanに対して、プロパティvalueのint型チェックと最大最小の判定を行います。
正常の場合はinvokeタグが実行されます。この場合は名前がsomeEjb、コマンド名doOkを指定し、パラメタの省略値としてuji.currentに設定されている入力のデータBeanが使われます。
invokeの結果はuji.currentに格納され、それをsetResponseBeanタグで画面body、画面モードresmodeで設定します。
validateタグでエラーになった場合、valueErrorというステータス情報を持つ例外が発生します。catch要素はこの例外を受けて実行され、メッセージ領域に文字列を入れて、画面モードretryで画面を再設定します。