1

現在 HLASM で作成されているメインフレームの CICS アプリケーションを COBOL に変換するプロジェクトに取り組んでいます。引き続き使用されるユーティリティ プログラムがいくつかあります。そのうちの 1 つは、CICS LINK 経由でアクセスされる「ファイル アクセス」ユーティリティです。このユーティリティは、指定されたファイルからレコードを読み取るための CICS ファイル要求を生成するために必要な入力パラメーター (コンマエリアで渡される) を受け取り、同じコンマエリアでストレージ域のアドレスと取得されたレコードの長さを返します。USINGアセンブラーでは、そのアドレスをレジスターにロードし、ディレクティブを介してそのレジスターをレコード・マップ (DSECT) に関連付けるのは簡単でした。

しかし、これを COBOL で行うにはどうすればよいでしょうか。COBOL プログラムでレコード フィールドを直接参照できるように、commarea で返されたアドレスを使用して、何らかの方法で COBOL レコード レイアウトに関連付けますか? もしそうなら、どのように?

それとも、何らかの方法でデータをローカルの作業用ストレージ領域に移動する必要がありますか? そして、それを元に戻して、COBOL プログラムによって行われた可能性のある更新を反映しますか? もしそうなら、どのように?

4

1 に答える 1

3

CICS COMMAREA で、タイプ POINTER の変数を宣言して、ユーティリティ プログラムが返すレコード バッファのアドレスを保持します。例えば:

  01 COMM-CICS.
     02 COMM-SOME-STUFF PIC whatever...
     02 COMM-REC-BUFF-ADDRESS POINTER.
     02 COMM-REC-BUFF-LENGTH  PIC 9(9) BINARY.
     02....

COBOL プログラムで、レコード レイアウトを で宣言します。 LINKAGE SECTION次に例を示します。

  LINKAGE SECTION.
  01 LINK-REC.
     02 LINK-DATA1 PIC X(10).
     02 .....

これによりレイアウトが作成されますが、ストレージは割り当てられません。ユーティリティ プログラムから戻ったら、COBOLSET ADDRESS動詞を使用して、次のようにレコード バッファのアドレスをレコード レイアウトに割り当てます。

  SET ADDRESS OF LINK-REC TO COMM-REC-BUFF-ADDRESS

これで、COBOL プログラムは、ファイル レコード内の任意の項目を名前でアドレス指定できるようになります。次に例を示します。

  MOVE LINK-DATA1 TO some-other-variable

戻されたデータ域のチェックとして、COBOL 動詞を使用して、COBOL レコード・レイアウトの長さと比較してバッファーの長さをチェックできますLENGTH OF。例えば、次のようになります。

  IF LENGTH OF LINK-REC NOT = COMM-REC-BUFF-LENGTH
     raise an error - buffer length does not match record layout
  END-IF

ただし、警告... LINK がリモート マシンに対するものである場合、同じアドレス空間を共有しないため、これはおそらく機能しません。この種のことについては、CICS Channels と Contaners を使用して調査することをお勧めします。

于 2014-05-21T20:34:28.910 に答える