5.36.3 aXesTerminalServiceのスクリプト
aXesTerminalServiceは、クライアント・アプリケーションと5250アプリケーションのやりとりを、aXes経由で事実上可能にするサービス・コマンドを提供します。
ただし、ほとんどのサービス・コマンドは、1画面のやりとりを完成するために必要となる多くの操作の中の1つの操作だけを実行します。 例えば、SETBYNAMEやSETBYPOSのサービス・コマンドは、5250画面の入力フィールドに値を設定しますが、1度の実行につき1フィールドのみとなります。
このレベルのインターフェイスにより、ユーザーのソリューションでは最大に柔軟性を発揮することができます。 ユーザーのプログラムがそれぞれの操作をコントロールでき、各画面ごとにその結果により異なった実行パスに分岐することが可能になります。
一方で、このような方法でそれぞれのaXesターミナル操作が実行されると、アプリケーションのコードが必要以上にサイズが大きく複雑になってしまい、導入も難しくなる可能性があります。 さらに、アプリケーションが実行しないといけないJSMコマンドの数によっては、返ってソリューションのパフォーマンスに影響を与えてしまうことも考えられます。
柔軟性、複雑性とパフォーマンスという考慮事項の適切なバランスが選択できるよう、aXesTerminalServiceではaXesターミナル・オペーレーション・スクリプトをサポートしています。 このサポートは次の2つの特化したサービス・コマンドを通じて提供されます。
- LOADSCRIPTコマンドはaXesターミナル・オペーレーション・スクリプトをサービスにロードして、後に続くEXECUTEコマンドが利用できるようにします。
- 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ターミナル・オペレーション・スクリプトを作り上げる、リスト・フィールド/コラムの目的・意味は以下の通りです。
1. ルーチン名 |
このaXesターミナル・オペレーション・スクリプト行が属するルーチンの名前を指定します。 ルーチンの行はリスト内で間隔を空けずに指定されていなければなりません。 スクリプト内およびEXECUTEコマンドのROUTINEキーワードのルーチン名は任意です。 |
2. ラベル名 |
このコラムは、(ルーチン内で)この行に付けられた一意のラベル名を指定します。 このラベル名は、同じルーチン/スクリプト内の別の行で正常またはエラー終了時の次に起こすアクションとして参照される場合があります。 |
3. オペレーション |
このスクリプト行で実行されるaXesターミナル・オペレーションを指定します。 以下のいずれかを使用できます。 GET (フィールド値を取得) SET (フィールド値を設定) SEND (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)を指定する必要があります。 |
10. ファンクション・キー |
(SET/SEND)このコラムに値が指定された場合、オペレーションは(SETオペレーションの値が正常に設定された後に)ここに指定のファンクション・キーを使ってaXesターミナル・サーバーに現在のaXes画面データを送信します。
SETBYNAME、SETBYPOS、SENDコマンドに示されているファンクション・キー値ならどれでも使用できます。 |
11. 正常終了時のアクション |
このコラムを利用して、このオペレーションが正常に終了した際の次のスクリプト・ルーチン・オペレーションの実行をコントロールします。 以下のいずれかを使用できます。 *NEXT (スクリプトは同じルーチン内の次の行に進みます。) *ERROR (スクリプトの実行はエラーの状態で終了します。) これ以外のブランク以外の値は別のスクリプト行のラベル名と理解され、スクリプトは指定のラベルに一致するスクリプト・ルーチン内の最初の行を続けて実行します。 値を指定しない場合は、*NEXTが使用されます。 |
12. エラー時のアクション |
この欄を利用して、このオペレーションがエラーで終了した際の次のスクリプト・ルーチン・オペレーションの実行をコントロールします。 以下のいずれかを使用できます。 *NEXT (スクリプトは同じルーチン内の次の行に進みます。) *ERROR (スクリプトの実行はエラーの状態で終了します。) これ以外のブランク以外の値は別のスクリプト行のラベル名と理解され、スクリプトは指定のラベルに一致するスクリプト・ルーチン内の最初の行を続けて実行します。 値を指定しない場合は、*ERRORが使用されます。 |