startTransaction()

vgLib.startTransaction() システム関数は、 メインプログラムを非同期に呼び出し、次のようにレコードを渡します。

transfer または call 文とは異なり (どちらもプログラムを同期して呼び出す)、vgLib.startTransaction() では、呼び出し側プログラムは引き続き、呼び出し先プログラムと同時に実行できます。

Java™ 用に生成する場合には、関数呼び出しのパラメーターとして開始するプログラムを指定することで、 このレコードのプログラム名をオーバーライドすることができます。

構文

  vgLib.startTransaction(
    request ANY in
    [, prID INT or CHAR inOut
    [, termID INT or CHAR(4) inOut ]])

  vgLib.startTransaction(
    request ANY in
    [, progName CHAR inOut ])
request
基本レコードの名前。以下の形式になっている必要があります。
  • 最初の 2 バイト (SMALLINT または小数部のない BIN) に、開始するトランザクションに渡されるデータの長さが格納され、その後にトランザクションには渡されない 2 つのフィールド (このフィールドを含む) 用の 10 バイトが続きます。
  • 次の 8 バイト (CHAR) も渡されません。 その内容はターゲット・システムによって異なります。このトピックの『互換性』のセクションを参照してください。
  • 要求レコードの残りの部分が渡されます。
prID
この引数は、CICS® および iSeries® COBOL の各プラットフォーム上でのみ使用されます。 このトピックの『互換性』のセクションを参照してください。
termID
この引数は、CICS プラットフォーム上でのみ使用されます。 このトピックの『互換性』のセクションを参照してください。
progName
非同期に開始されるプログラムの名前。このオプションは Java の場合のみです。 このトピックの『互換性』のセクションを参照してください。

以下の例は、vgLib.startTransaction() 関数を示しています。

myRequest RequestPart;
myRequest.prefix = "18";
myRequest.progName = "MyProgrm";
myRequest.reqrec = "MyData";
vgLib.startTransaction(myRequest);

このプログラム・コード例に付随するレコード宣言は、以下のとおりです。

Record RequestPart type BasicRecord
    10 prefix SMALLINT;
    10 progName CHAR(8);
    10 reqrec CHAR(8);
end

互換性

表 1. vgLib.startTransaction() の互換性に関する考慮事項
プラットフォーム 問題
Java 生成
  • Java プログラムは、同一マシン上の別の EGL 生成 Java プログラムのみを、別の Java 仮想マシン (JVM) で開始できます。 デフォルトの振る舞いは、同じ Java パッケージに常駐するプログラムを開始することです。 ただし、progName を完全修飾することによって、別のパッケージを指定することもできます。 (あるいは、呼び出し側プログラムの生成に使用されるリンケージ・オプション・パーツで、asynchLink 要素を変更することもできます。)
  • request レコードの 3 番目から 10 番目のバイトには、 開始されるデフォルト・プログラムの名前が含まれています。 progName を指定した場合、この引数は、request レコードのプログラム名をオーバーライドします。 渡されるレコードのサイズは 32767 バイトを超えてはなりません。 prID および termID パラメーターは無視されます。
  • V6 の例外互換性 (V6 の例外互換性の使用を参照) を使用している場合、以下の値が sysVar.errorCode で戻されます。
    00000000
    新規 JVM が作成されており、レコードは正常に渡されています。 呼び出されたプログラムが実行できなかった場合でも、その値は存在します。
    00000001
    新規の JVM を作成できないか、レコードの引き渡し中にエラーが発生したことを示しています。
CICS
  • vgLib.startTransaction() 関数は、ターゲット・トランザクションに対して CICS START コマンドを発行します。 デフォルトの振る舞いは、同じ CICS 領域に常駐するプログラムを開始することですが、 呼び出し側プログラムの生成時に使用するリンケージ・オプション・パーツの asynchLink 要素を定義することによって、別の領域を指定することができます。 ターゲット・トランザクションがリモート・システム上で開始された場合、prID および termID パラメーターは無視されます。
  • request レコードの 3 番目から 6 番目までのバイトにトランザクション ID が含まれ、次の 4 バイトはブランクになります。 渡されるレコードのサイズは 32767 バイトを超えてはなりません。
  • EGL は、termID パラメーターの値に応じて、関連する装置の有無に関係なく CICS START コマンドを発行します。
    • termID を指定しない場合、EGL は現行の端末とターゲット・トランザクションを関連付けます。 具体的には、EGL は現行の端末 ID を CICS START コマンドで TERMID オプションに割り当てます。
    • 値が 2 進ゼロではない termID を指定した場合、EGL は、指定した装置 (端末またはプリンター) とターゲット・トランザクションを関連付けます。 具体的には、EGL は termID の値を CICS START コマンドで TERMID オプションに割り当てますが、 RTERMID オプションには値を割り当てません。

      termID の値が、現行トランザクションに関連付けられた CICS 端末 ID である場合、その結果は予測できません。 現行トランザクションを終了して、現行端末で新規トランザクションを開始するには、vgLib.startTransaction システム関数ではなく、transfer to transaction または show 文を使用します。

    • termID パラメーターの値が 2 進ゼロである場合、 EGL は端末をターゲット・トランザクションに関連付けません。 具体的には、EGL は prID パラメーターの値を CICS START コマンドの RTERMID オプションに割り当てますが、 TERMID オプションには値を割り当てません。 また、prID パラメーターは、ターゲット・トランザクションにおいて converseVar.printerAssociation システム変数の初期化に使用するプリンター ID です。termID CHAR フィールドを 2 進ゼロに設定するには、次のような 4 バイトの 2 進ゼロの 16 進数リテラルが含まれた assignment 文を使用します。
        myCHAR = x"00000000";
  • prID および termID のパラメーターを使用してターゲット・プログラムで printerAssociation を初期化する方法について詳しくは、『printerAssociation』を参照してください。
  • ターゲット・トランザクションには、PCT および PPT エントリーが必要です。 そのトランザクション内の最初のプログラムが EGL または VisualAge Generator によって生成されていない場合、 そのプログラムは CICS RETRIEVE を発行して受け渡される作業域および端末の情報を取得する必要があります。
CICS (続き)
  • V6 の例外互換性 (V6 の例外互換性の使用を参照) を使用している場合、以下の値が sysVar.errorCode で戻される可能性があります。
    00000000
    正常終了
    00000203
    トランザクション ID が無効です
    00000205
    端末 ID が無効です
    00000206
    パラメーターが無効です
    00000207
    システム ID が無効です
    00000208
    リンクのサービスが休止しています
    ffrrrrrr
    その他の CICS エラー。 ff は EIBFN バイト 0 の 16 進法表記、rrrrrr は EIBRCODE バイト 0-2 の 16 進法表記です。
iSeries COBOL
  • この関数は、同一の iSeries マシン上でプログラムを開始します。 EGL ランタイムは次の 2 つのコマンド言語 (CL) プログラムによってこの関数のサポートを提供しています。
    CREATX
    このプログラムは、以下のアクションを実行します。
    • 現在のジョブ番号を取得する。
    • ユーザー・データをデータ・キュー VGCREATX に送信する。
    • 新しい CREATXJOB を開始する。これは、制御言語プログラム CREATXPP を開始します。
    CREATXPP
    このプログラムは、以下のアクションを実行します。
    • 前のジョブ番号をキーとして使用して、データ・キュー VGCREATX からデータを検索する。
    • request レコードの 3 番目のバイトから 11 番目のバイトに指定された 非同期制御言語プログラムを呼び出す。
  • request レコードの 3 番目から 10 番目のバイトには、開始されるプログラムの名前が含まれています。 渡されるレコードのサイズは 4095 バイトを超えてはなりません。
  • prID パラメーターは、非同期ジョブに使用される出力キューの値が入る、オプションの 4 バイトの CHAR フィールドです。 デフォルト値は VGEN です。 プログラムが converseVar.printerAssociation を実行する前に、出力キューを定義する必要があります。
  • termID パラメーターは無視されます。
IMS/VS または IMS™ BMP
  • vgLib.startTransaction() は、同一の IMS システム上でのみトランザクションを開始できます。 request レコードの 3 番目から 10 番目までのバイトには IMS トランザクション・コードが含まれます。 渡されるレコードのサイズは 32765 バイトを超えてはなりません。 prID および termID パラメーターは無視されます。
  • この関数は、変更可能代替 PCB への挿入を行います。 EGL は、長さに 2 を追加して、長さフィールドとトランザクション・フィールドとの間に 2 バイトを挿入することによって、request レコードを IMS メッセージが必要とするフォーマットに変換します。 トランザクションは、関連付けられた端末とは関係なく開始されます。
  • 開始されたトランザクションは、システム IMS のシステム定義に組み込まれ、非会話型トランザクションとして定義される必要があります。 そのターゲット・トランザクションが EGL プログラムではない場合、入出力 PCB に GU 呼び出しを発行してメッセージを取得しなければ なりません。
  • V6 の例外互換性 (V6 の例外互換性の使用を参照) を使用している場合、以下の値が sysVar.errorCode で戻される可能性があります。
    00000000
    呼び出しは、正常に実行されました。
    00000203
    おそらくトランザクション・コードが無効であったために呼び出しが失敗したことを示しています。
z/OS® バッチ この関数はサポートされていません。

フィードバック