非 DPL 環境での TI
リンクされていない環境 (つまり、DPL ではない環境) とは、IBM 分散プログラム リンク (DPL) を使用しない環境です。 TI を使用して、EXEC CICS RECEIVE INTO および EXEC CICS SEND FROM COBOL コマンドを使用するメインフレーム トランザクション プログラム (TP) を呼び出すことができます。 この 2 つの COBOL コマンドは、SNA (APPC/LU 6.2) の会話を CICS TP に担当させ、そのため、ミラー TP を回避するときに役立ちます。 言い換えると、EXEC CICS RECEIVE INTO および EXEC CICS SEND FROM COBOL コマンドは、型 6.2 (APPC) の LU との間でデータを転送するために、リンクされていない環境で最も頻繁に使用されます。
TI では、リンクされている環境とリンクされていない環境の両方で、LU 6.2 モデルがサポートされています。 各モデルをサポートするために、次のリモート環境 (RE) 型を作成できます。
LU 6.2 を使用した CICS リンク
ミラー TP を使用する IBM DPL 環境でこれを使用します。
LU 6.2 を使用した CICS
ミラー TP を回避する非 DPL 環境でこれを使用します。
お客様の多くは非 DPL 環境で TI を使用します。 唯一の問題は、ターミナル ロジックがビジネス ロジックに埋め込まれているかどうかです。 COBOL TP で IBM DPL がサポートされるとき、プレゼンテーション ロジックは既にビジネス ロジックから分離されています。そのため、おそらくは COBOL を変更する必要がありません。 ただし、ターミナルと通信するように TP が記述された場合、おそらくは、プレゼンテーション ロジックからビジネス ロジックを分離するよう、COBOL コードを変更する必要があります。
たとえば、次のサンプル COBOL コードでは、EXEC CICS RECEIVE INTO および EXEC CICS SEND FROM COBOL コマンドを使用して、バインドされていないレコードセットを処理する方法を示しています。
*****************************************************
* Example showing how to send unbounded recordsets
* to a client application.
*****************************************************
IDENTIFICATION DIVISION.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
* INPUT AREA
01 CUSTOMER-INPUT-NUMBER PIC 9(9).
* OUTPUT AREA
01 CUSTOMER-DATA.
05 LAST-NAME PIC X(20).
05 FIRST-NAME PIC X(20).
* ONE ROW IN A DATABASE TABLE
01 INVOICES.
05 INVOICE-NUMBER PIC 9(10).
05 INVOICE-DATE PIC 9(7) COMP-3.
05 INVOICE-AMOUNT PIC S9(13)V9(2) COMP-3.
05 INVOICE-DESCRIPTION PIC X(40).
LINKAGE SECTION.
PROCEDURE DIVISION.
*
* Get the input customer account number from the
* client applicaton:
*
MOVE LENGTH OF CUSTOMER-INPUT-NUMBER TO RECEIVE-LENGTH
EXEC-CICS RECEIVE INTO(CUSTOMER-INPUT-NUMBER)
LENGTH(RECEIVE-LENGTH)
END-EXEC.
*
* Do some work; then send the first and last name back:
*
MOVE LENGTH OF CUSTOMER-DATA TO SEND-LENGTH
EXEC-CICS SEND FROM(CUSTOMER-DATA)
LENGTH(SEND-LENGTH)
END-EXEC.
*
* Follow regular data with unbounded table data that
* the client application sees as a recordset:
*
MOVE LENGTH OF INVOICES TO SEND-LENGTH
PERFORM UNTIL NO-MORE-INVOICES
*
* Do some work to get the next row:
*
MOVE DB-INVOICE-NUMBER TO INVOICE-NUMBER
MOVE DB-INVOICE-DATE TO INVOICE-DATE
MOVE DB-INVOICE-AMOUNT TO INVOICE-AMOUNT
MOVE DB-INVOICE-DESC TO INVOICE-DESCRIPTION
*
* Send the row:
*
EXEC-CICS SEND FROM(INVOICES)
LENGTH(SEND-LENGTH)
END-EXEC.
END-PERFORM.