ユーザーがデータベーステーブルで更新される2つの値を入力するマップがあります。両方のプログラムを作成しましたが、マップに入力された2つのフィールド値を別のプログラムに渡す方法がわかりません。リンケージセクションが使えることを知りました。しかし、構文やその詳細はわかりません。誰かが構文を手伝ってくれますか?ありがとうございました
2 に答える
WORKING-STORAGE
プログラムには、CICSマップから取得された値が保持されるものが含まれている必要があります。例えば:
01 SCREEN-DATA.
05 SOME-FIELD PIC X(10).
05 SOME-OTHER-FIELD PIC 9(4).
77 PROGRAM-NAME PIC X(8) VALUE 'PROG2'.
このプログラムが呼び出されPROG1
、これらの値をと呼ばれる2番目のCOBOLプログラムに渡したいとしますPROG2
。通常、これは動的サブルーチン呼び出しを使用してCOBOLで実行されます。動的呼び出しを実行する一般的な方法は、呼び出されたプログラムの名前をWORKING-STORAGE変数に入れることです。PROGRAM-NAME
私はこの目的のために宣言しました。データは、個別のアイテムとして呼び出されたプログラムに渡される場合があります。
CALL PROGRAM-NAME USING SOME-FIELD, SOME-OTHER-FIELD
PROG2
上記は、通過する動的呼び出しでSOME-FILED
ありSOME-OTHER-FIELD
、参照によるものです。
PROG2
次のように、リンケージセクションを介してこれらのデータを受け取ります。
LINKAGE SECTION.
01 LINKAGE-DATA.
05 FIELD1 PIC X(10).
05 FILED2 PIC 9(4).
のPROCEDUREDIVISIONは、次のPROG2
ようになります。
PROCEDURE DIVISION USING FIELD1, FIELD2.
または、レコード全体を1つのパラメーターとして次の場所から渡すこともできますPROG1
。
CALL PROGRAM-NAME USING SCREEN-DATA
とでPROG2
PROCEDURE DIVISION USING LINKAGE-DATA.
最後に、PROG2
作業が完了すると、GOBACK
またはで終了する必要がありますEXIT PROGRAM
。STOP RUN
メインプログラム()も終了しますので使用しないでくださいPROG1
。
COBOLの呼び出し規約は、他のほとんどの手続き型言語と似ています。パラメータは、参照(デフォルト)、値、またはコンテンツによって渡すことができます。ほとんどのCOBOLベンダーは、これらのパラメーター受け渡しメカニズムをすべてサポートしていますが、実装にわずかな違いがある場合があります。上記の例は、IBMEnterpriseCOBOL用です。異なるバージョンのCOBOLを使用している場合は、「COBOLリファレンスガイド」および「COBOLプログラミングガイド」を確認することをお勧めします。
IBMEnterpriseCOBOLガイドはオンラインで入手できます。言語リファレンスガイド およびプログラミングリファレンスガイド
2つのバッチCOBOLプログラム間で行うのと同じように、引数を渡すことができます。ただし、DFHEIBLKとDFHCOMMAREAの2つの必須引数も渡す必要があることに注意する必要があります。
実際、呼び出されたプログラムでは、これら2つの引数がPROCEDURE DIVISIONで追加されているため、呼び出し側プログラムでそれらが必要であることがコンパイラーのリストに表示される場合があります。読みやすくするために、ソースコードに明示的に記述することをお勧めします。
結局、それはこのようになります:
呼び出されたプログラム:
PROCEDURE DIVISION USING DFHEIBLK DFHCOMMAREA PARM1 PARM2 ... PARMXX.
呼び出しプログラム:
WORKING-STORAGE SECTION.
01 PGM-NAME PIC X(8).
PROCEDURE DIVISION.
CALL PGM-NAME USING DFHEIBLK DFHCOMMAREA PARM1 PARM2 ... PARMXX
END-CALL.