グループ・ジョブ

以下のグループ・ジョブに関する情報は、以前の環境を保守する際の参照資料として組み込まれています。 今日のコンピューティング環境では、1 つのワークステーションが各機能ごとにそれぞれセッションを持つのが一般的です。

グループ・ジョブは、システム要求キーを押すことによって要求される 2 次対話式ジョブと似ています。ただし、ワークステーションにサインオンするたびに最大 16 個 (2 次対話式ジョブがある場合は合計 32 個) のグループ・ジョブを開始することができ、アプリケーション・プログラムは中断をより簡単に処理することができます。

グループ・ジョブの利点

グループ・ジョブの利点のいくつかを以下にリストします。
  • ワークステーション・ユーザーはアテンション・キーを押して、1 つの対話式グループ・ジョブの作業を中断し、他のいくつかの対話式グループ・ジョブのいずれかに切り替え、元のグループ・ジョブに戻るという作業を迅速に行うことができます。 アテンション・キーはアテンション・プログラムのセット (SETATNPGM) コマンドによって有効にされ、グループ・ジョブに依存せずに使用することができます。
  • グループ・ジョブをディスプレイ装置パススルーとともに使用することにより、ネットワーク内の多様なシステム上のさまざまな対話式ジョブでの切り替えを簡単かつ迅速に行うことができます。

グループ・ジョブの概念

  • グループ・ジョブは対話式ジョブにのみ適用されます。
  • 1 つのグループ内のグループ・ジョブの最大数は 16 個です (ユーザーが 2 次対話式ジョブに移動する場合はさらに 16 個使用できます)。
  • グループ・ジョブはユーザーに対して固有です (複数のユーザーによって共有されません)。
  • 一度に 1 つのグループ・ジョブだけがアクティブになります (それ以外は中断状態になります)。
  • グループ・ジョブは相互に依存せず、独自のジョブ・ログ、スプール・ファイル、ライブラリー QTEMP などを持ちます。
  • グループ・ジョブは、グループ・ジョブへの移行 (TFRGRPJOB) コマンドによって呼び出されます。 このコマンドは通常、ユーザー作成メニュー・プログラムから実行されます。 このプログラムはアテンション・キーを押すことによって呼び出されます (その前に SETATNPGM コマンドを実行しておく必要があります)。
  • 1 つのグループ・ジョブから別のグループ・ジョブにデータを渡すために、512 バイトのグループ・データ域を使用することができます。 このグループ・データ域はグループ属性変更 (CHGGRPA) コマンドによって暗黙的に作成されます。 グループ・データ域については「CL プログラミング」により詳しい情報が収められています。

グループ・ジョブの間の切り替え

非グループ・ジョブからグループ・ジョブに切り替えたり、グループ・ジョブから非グループ・ジョブ (それがグループ内で唯一のジョブである場合) に切り替えたりするには、グループ属性変更 (CHGGRPA) コマンドを使用します。

新規グループ・ジョブの作成

新規グループ・ジョブを作成するには、グループ・ジョブへの移行 (TFRGRPJOB) コマンドを使用します。
注: TFRGRPJOB コマンドを使用した後は毎回、SETATNPGM コマンドを使用してアテンション・キーをオンに設定する必要があります (必要な場合)。

1 つのグループ・ジョブから別のグループ・ジョブへの移動

同じグループ内の 1 つのグループ・ジョブから別のグループ・ジョブに移動するには、グループ・ジョブへの移行 (TFRGRPJOB) コマンドを使用します。
注:
  1. TFRGRPJOB コマンドを使用した後は毎回、SETATNPGM コマンドを使用してアテンション・キーをオンに設定する必要があります (必要な場合)。
  2. 更新操作を行っている場合は、別のグループ・ジョブに移動する前に、レコード・ロック検査 (CHKRCDLCK) コマンドを使用して、ジョブにレコード・ロックがないか検査します。

1 つのグループ・ジョブから別のグループ・ジョブへの制御の移動

アテンション・キー処理プログラムがある場合、1 つのグループ・ジョブから別のグループ・ジョブに制御を移動することができます。 アテンション・キーが押されると、アテンション・キー処理プログラムは、(ユーザーがグループ・ジョブを選択する) メニューを表示するか、またはユーザーを別のグループ・ジョブに即時に移動させることができます。 アテンション・キー処理サポートにより、1 つのジョブを終了して別のジョブに移動することなく、1 つのグループ・ジョブから別のグループ・ジョブに迅速かつ簡単に制御を移動することができます。

メニューを表示せずに別のグループ・ジョブに移動する

アテンション・キーを使用して、メニューを表示せずに直接別のジョブに移動することができます。 例えば、グループ・ジョブ A のアテンション・キー処理プログラムがグループ・ジョブ B に移動することができ、さらにグループ・ジョブ B のアテンション・キー処理プログラムもグループ・ジョブ A に戻ることができるとします。この場合、一度のキー・ストロークによって機能を切り替えることができます。

グループ・ジョブの終了

  • グループ内の 1 つのグループ・ジョブを終了するには、グループ・ジョブ終了 (ENDGRPJOB) コマンドを使用します。
  • グループ内のすべてのグループ・ジョブを終了するには、SIGNOFF コマンドを使用します。
    注: ENDJOB コマンドはパラメーター ADLINTJOBS をサポートします。 *GRPJOB が指定され、JOB パラメーターに指定されたジョブがグループ・ジョブである場合、グループに関連付けられているすべてのジョブが終了します。

    また、グループ・ジョブ終了 (ENDGRPJOB) コマンドはシグナル SIGTERM をサポートしていません。 しかし、ジョブ終了 (ENDJOB) コマンドはシグナル SIGTERM をサポートしています。

グループ・ジョブの正常終了

環境によっては、ENDGRPJOB コマンドを発行するのではなく、エンド・ユーザーに特定のグループ・ジョブを正確に終了させることを強制する方が望ましい場合があります。 例えば、複雑な更新が関係するグループ・ジョブをユーザーが持つ場合、ジョブを正常に終了させる必要があるかもしれません。 別の例として、SEU セッション中にユーザーが機能を正常に完了する必要が生じる場合もあります。

これは、システムによって提供されるサポートによって達成できます。 例えば、以下の指示に従うこともできます。
  1. 各グループ・ジョブによってテストされるグループ・データ域のスイッチを、シャットダウン・スイッチとして機能するように設定します。 つまり、スイッチをオンに設定すると、グループ・ジョブ機能は終了します。
  2. RTVGRPA コマンドおよび GRPJOBL 戻り変数を使用することにより、アクティブなグループ・ジョブ名にアクセスします。
  3. 正確に終了させる必要のあるグループ・ジョブ名の既定のリストに対して、アクセスされるそれぞれの名前 (2 番目のグループ・ジョブから始まる) を比較します。
  4. グループ・ジョブ名がリストにない場合、ENDGRPJOB コマンドによって即時に終了させることができます。
  5. ジョブを正確に終了させる必要がある場合は、TFRGRPJOB コマンドを使用してグループ・ジョブに移動します。
すべてのグループ・ジョブのアテンション・キー処理プログラムはシャットダウン・スイッチに敏感でなければならず、スイッチがオンに設定されている場合は別のグループ・ジョブに移動されません。

ユーザーがグループ・ジョブの機能 (例えば更新プログラム) を終了したときに発生することを制御する制御プログラムが各グループ・ジョブごとにある場合は、そのプログラムはシャットダウン・スイッチをテストし、戻りを実行することもできます。 これによりグループ・ジョブが終了され、前のアクティブ・グループ・ジョブに制御が戻されます。

アテンション・キー処理プログラムは CHKRCDLCK コマンドを使用して、更新のためにロックされたレコードをアプリケーションが持つときに、ワークステーション・ユーザーがアテンション・キーを押したかどうか判別することができます。 この場合、アテンション・プログラムはメッセージを送信し、アテンション・キーを使用する前に操作を完了するようユーザーに指示する場合があります。

グループ・ジョブの理論

CHGGRPA コマンドは現行ジョブをグループ・ジョブと見なし、グループ内で一意的に識別するためのグループ・ジョブ名を付けます (この時点でグループはグループ・ジョブを 1 つだけ持ちます)。 各グループ・ジョブはユーザーに対して固有です。 2 人の異なるユーザーが同じグループ・ジョブを共用することはありません。 ジョブがグループ・ジョブとして指定されると、新規グループ・ジョブを呼び出すことができるようになります。 グループ・ジョブには制約事項もあります (RRTJOB、TFRJOB を使用できないなど)。 グループ内に存在するアクティブ・ジョブが 1 つだけの場合、そのジョブは非グループ・ジョブになることができます。

グループ・ジョブの通信を可能にする

グループ・ジョブの相互通信を可能にするために、ジョブがグループ・ジョブとなるときに、グループ・データ域と呼ばれる 512 バイトの特別なデータ域が自動的に作成されます。 グループ・データ域にアクセスできるのはグループ内のジョブだけです。 データ域コマンドの DTAARA パラメーターに特殊値 *GDA を使用することによってアクセスします。

グループ・ジョブの呼び出し

グループ・ジョブを使用する際は、このセクションで説明されているようなアテンション・キー・メニューのアプローチは必要ありません。 グループ・ジョブは、アプリケーション・プログラムか、または TFRGRPJOB コマンドの GRPJOB(*SELECT) パラメーターによって呼び出すことができます。

グループ・ジョブとシステム要求機能

グループ・ジョブ機能は、一度に 1 つのジョブのみがアクティブになり、それ以外は中断状態になるという点で、システム要求機能と似ています。 グループ・ジョブは、次の点でシステム要求と異なります。
  • グループ・ジョブを開始するためにサインオンする必要はありません。 同じユーザー・プロファイルおよび環境が使用されます。
  • 一度に最大 16 個のグループ・ジョブが存在できます。 ユーザーが移動先のグループ・ジョブを選択する必要があるのに対し、システム要求ではユーザーは 2 つのジョブの間だけを移動します。 通常、グループ・ジョブでは、アテンション・キーを押して表示されるメニューを使用して、ユーザーが移動先のグループ・ジョブを選択することができます。 グループ・ジョブとシステム要求を併用して、1 人のユーザーが合計 32 個のグループ・ジョブを使用できるようにすることができます。 ただし、これら 32 個のジョブは 2 つのグループに分かれており、各グループは独自のグループ・データ域および他のグループ属性を持ちます。
  • システム要求機能では、キーボードがロックされ、アプリケーションの機能が進行している間に、ワークステーション・ユーザーがジョブを中断することができます。 これによってイベントの論理順序が中断される場合があります。 例えば、レコードがロックされたままになる可能性があります。 一方、アテンション・キーはキーボードが入力のためにアンロックされる場合にのみアクティブになります。 また、アプリケーションはアテンション・キーがアクティブになるタイミングを制御することができ、不適切なときにそれが使用されないようにすることができます。 システム要求機能は、ワークステーション・ユーザーに権限があればいつでも使用することができます。
    注: 事前システム要求プログラム出口プログラムは、ユーザーがシステム要求キーを押したときに呼び出されます。 ユーザーがシステム要求キーを押すと、オペレーティング・システムは登録機能を介してユーザー作成の出口プログラムを呼び出します。 入出力に 1 つのパラメーターが使用されます。 登録機能から出口プログラムが呼び出された後、「システム要求」メニューがその表示フラグで戻される値に基づいて呼び出されます。 追加情報については、「System API Reference」を参照してください。