5.3.18 AxesTerminalServiceのスクリプト
AxesTerminalServiceにより、aXes経由で事実上クライアント・アプリケーションと5250アプリケーションのやりとりを可能にするサービス・コマンドが提供されます。
ただし、ほとんどのサービス・コマンドは、1画面のやりとりを完成するために必要となる多くの操作の中の1つの操作だけを実行します。例えば、SETBYNAMEやSETBYPOSのサービス・コマンドは、5250画面の入力フィールドに値を設定しますが、1度の実行につき1フィールドのみとなります。
このレベルのインターフェースにより、ユーザーのソリューションでは最大に柔軟性を発揮することができます。ユーザーのインターフェースれの操作をコントロールでき、画面ごとにその結果により異なった実行パスに分岐することが可能になります。
一方で、このような方法でそれぞれのaXesターミナル操作が実行されると、アプリケーションのコードが必要以上にサイズが大きく複雑になってしまい、導入も難しくなる可能性があります。さらに、アプリケーションが実行しないといけないJSMコマンドの数によっては、返ってソリューションのパフォーマンスに影響を与えてしまうことも考えられます。
AxesTerminalServiceは、柔軟性、複雑性とパフォーマンスという考慮事項において、適切なバランスをもって選択できるよう、aXesターミナル・オペーレーション・スクリプトをサポートします。このサポートは次の2つの特化したサービス・コマンドを通じて提供されます。
- 5.3.11 LOADSCRIPTコマンドはaXesターミナル・オペーレーション・スクリプトをサービスにロードして、後に続くEXECUTEコマンドが利用できるようにします。
- 5.3.6 EXECUTEコマンドはaXesターミナル・オペーレーション・スクリプトの指定のルーチンをします。
このサポートにより、例えばユーザーのアプリケーションでSETBYNAMEやSETBYPOSなどの1つの入力画面にデータを入力するコマンドが連続するところを、1つのEXECUTEコマンドで済ませることが可能です。アプリケーションに必要なコントロールもある程度保たれ、(任意で)別々に実行されるスクリプトを異なるルーチンに分割して、5250画面操作の結果により分岐させることも可能です。例えば、それぞれの重要な5250データ入力画面を完了するスクリプト・ルーチンを定義します。サブファイルを含むデータ入力画面の場合、それぞれのサブファイルのレコードまたは行を完成するルーチンを定義できます。
通常は1回の導入で1つのスクリプト(任意で複数のルーチンからなるスクリプト)を定義し、LOADSCRIPTを使ってこのスクリプトをロードして、必要に応じてEXECUTEでルーチンを実行します。ただし、EXECUTEコマンドを使ってスクリプトをロードして実行することも可能です。このアプローチとSETBYNAME、SETBYPOS、SENDなどのサービス・コマンドを直接利用する方法を併用することも可能です。
スクリプトはリスト(LANSA RDML/Xのクライアントには作業リスト)として提供され、LOADSCRIPTやEXECUTEコマンドと共にサービスに渡されます。このリストには最低8つ、最大12個までののフィールド/コラムが含まれている必要があります。以下は、aXesターミナル・オペレーション・スクリプトを作り上げる、リスト・フィールド/コラムの目的と意味を示しています。
t |
このaXesターミナル・オペレーション・スクリプト行が属するルーチンの名前を指定します。ルーチンの行はリスト内で間隔を空けずに指定されていなければなりません。スクリプト内およびEXECUTEコマンドのROUTINEキーワードのルーチン名は任意です。 |
2 ラベル名 |
このコラムは、(ルーチン内で)この行に付けられた一意のラベル名を指定します。このラベル名は、同じルーチン/スクリプト内の別の行で正常またはエラー終了時の次に起こすアクションとして参照される場合があります。 |
3 オペレーション |
このスクリプト行で実行されるaXesターミナル・オペレーションを指定します。以下のいずれかを使用できます。 |
4 フィールド名 |
(GET/SET) このコラムには、取得・設定する値のフィールド名を指定します。この名前には、ユーザー定義名(CONNECTコマンドでaXesプロジェクト名が指定された場合)またはaXesのフィールド識別子のいずれかを指定できます。GET やSETのオペレーションでこのフィールド名が指定されていない場合は、フィールドの行と列が指定されていなければなりません。 |
5 フィールド・インデックス |
(GET/SET) 前のコラムのフィールド名にサブファイルが含まれる場合、このコラムには取得・設定する値のフィルードの現在の画面上のインスタンスのインデックスを指定します。サブファイルのスクロール位置にかかわらず、現画面の最初のインスタンスはインデックス1になります。ユーザーのプログラムがサブファイルのフィールドを処理しないといけない場合は、1画面ごとに処理をしてSENDコマンドを利用してROLL_UP/ROLL_DOWNを送信します。(これは5250ターミナルのユーザーが行わなければならない動作と同じです) |
6 フィールド行 |
(GET/SET) このコラムには取得・設定する値の画面行番号を指定します。使用する場合、行と列は両方とも指定のフィールドの最初の位置を示していないといけません。フィールド名が指定されている場合、このコラムの値は無視されます。反対にフィールド名が指定されていない場合は、フィールドの行と列が指定されていなければなりません。 |
7 フィールド列 |
(GET/SET) このコラムには取得・設定する値の画面列番号を指定します。使用する場合、行と列は両方とも指定のフィールドの最初の位置を示していないといけません。フィールド名が指定されている場合、このコラムの値は無視されます。反対にフィールド名が指定されていない場合は、フィールドの行と列が指定されていなければなりません。 |
8 フィールド値 (リテラル) |
(SET) このコラムには指定されたフィールドに設定するリテラル値を指定できます。 |
9 フィールド値 (フィールド名) |
(GET/SET) このコラムには、指定の画面フィールドの値を取得(GET)または設定(SET)するユーザーのクライアント・プログラムとJSM間で交換されたフィールドの名前を指定します。クライアント・プログラムの変数に戻り値を受け取るには、通常はコマンド文字列でSERVICE_EXCHANGE(*FIELD)を指定する必要があります。 GETオペレーションの場合、交換フィールド名は必須です。 SETオペレーションの場合は、このコラムに交換フィールドの1つを指定するか、前のコラムにリテラル値を指定する必要があります。 |
10 ファンクション キー |
(SET/SEND) このコラムに値が指定された場合、オペレーションは(SETオペレーションの値が正常に設定された後に)ここに指定のファンクション・キーを使ってaXesターミナル・サーバーに現在のaXes画面データを送信します。SETBYNAME、SETBYPOS、SENDコマンドに示されているファンクション・キー値ならどれでも使用できます。 SETオペレーションの場合、この値が指定されていないと送信オペレーションは実行されません。 SENDオペレーションの場合、この値が指定されていない場合ENTERと見なされます。 |
11 正常終了時のアクション |
このコラムを利用して、このオペレーションが正常に終了した際の次のスクリプト・ルーチン・オペレーションの実行をコントロールします。以下のいずれかを使用できます。 |
12 エラー時のアクション |
この欄を利用して、このオペレーションがエラーで終了した際の次のスクリプト・ルーチン・オペレーションの実行をコントロールします。以下のいずれかを使用できます。 |