feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
# 14-online-cics — CICS Online Simulation
|
||||
|
||||
## 电信业务场景
|
||||
|
||||
在线客户照会(CICS模拟)。通过CALL/LINKAGE机制模拟CICS在线交易,客户服务人员可通过屏幕查询客户基本信息。
|
||||
|
||||
## Purpose
|
||||
Simulates CICS transaction processing patterns using CALL/LINKAGE instead of EXEC CICS.
|
||||
|
||||
## Architecture
|
||||
- **main-14-online-cics.cbl** — CICS simulation program (receives COMMAREA via CALL USING)
|
||||
- **test-cics-driver.cbl** — Test driver that builds COMMAREAs and invokes the program
|
||||
|
||||
## Test Coverage
|
||||
1. **INQY (Inquiry)** — COMMAREA receive, MAP file read, result output
|
||||
2. **UPDT (Update)** — Process update function
|
||||
3. **DEL (Delete)** — Process delete function
|
||||
4. **UNKNOWN function** — Error handling for unrecognized function codes
|
||||
|
||||
## Key Techniques
|
||||
- LINKAGE SECTION with CALL USING parameter passing
|
||||
- COMMAREA simulation via 01-level structure
|
||||
- MAPSEND/MAPRECV simulation via file I/O
|
||||
- EVALUATE for function dispatch
|
||||
- GOBACK to return to caller
|
||||
@@ -0,0 +1,967 @@
|
||||
*> ============================================================
|
||||
*> 14-online-cics : 客户在线照会 (Online Inquiry)
|
||||
*> Input : MAP-FILE (map-data.dat: 模拟CICS MAP入出力)
|
||||
*> Output: OUTPUT-FILE (cics-output.txt: 照会结果出力)
|
||||
*> TXN-AUDIT-FILE (txn-audit.log: 取引監査記録)
|
||||
*> Coverage: OL-N001~N004, OL-A001, OL-R001
|
||||
*> MAP building, audit logging, response time,
|
||||
*> error severity handling
|
||||
*> ============================================================
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. Main14OnlineCics.
|
||||
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT MAP-FILE ASSIGN TO "map-data.dat"
|
||||
ORGANIZATION IS LINE SEQUENTIAL
|
||||
FILE STATUS IS WS-MAP-FILE-STATUS.
|
||||
|
||||
SELECT OUTPUT-FILE ASSIGN TO "cics-output.txt"
|
||||
ORGANIZATION IS LINE SEQUENTIAL
|
||||
FILE STATUS IS WS-OUT-FILE-STATUS.
|
||||
|
||||
*> Additional files for expanded processing
|
||||
SELECT TXN-AUDIT-FILE ASSIGN TO "txn-audit.log"
|
||||
ORGANIZATION IS LINE SEQUENTIAL
|
||||
FILE STATUS IS WS-AUD-FILE-STATUS.
|
||||
|
||||
SELECT TXN-REPORT ASSIGN TO "txn-report.txt"
|
||||
ORGANIZATION IS LINE SEQUENTIAL
|
||||
FILE STATUS IS WS-RPT-FILE-STATUS.
|
||||
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD MAP-FILE.
|
||||
01 MAP-RECORD PIC X(80).
|
||||
|
||||
FD OUTPUT-FILE.
|
||||
01 OUTPUT-LINE PIC X(80).
|
||||
|
||||
FD TXN-AUDIT-FILE.
|
||||
01 AUDIT-RECORD PIC X(100).
|
||||
|
||||
FD TXN-REPORT.
|
||||
01 REPORT-LINE PIC X(100).
|
||||
|
||||
WORKING-STORAGE SECTION.
|
||||
*> ===== PRESERVED ORIGINAL ITEMS =====
|
||||
01 WS-TELECOM-REC.
|
||||
COPY "telecom/TEL-INVOICE.cpy".
|
||||
|
||||
*> Simulated COMMAREA structure
|
||||
01 WS-COMMAREA.
|
||||
05 WS-CA-USERID PIC X(08).
|
||||
05 WS-CA-FUNCTION PIC X(04).
|
||||
05 WS-CA-INPUT-DATA PIC X(40).
|
||||
05 WS-CA-RETURN-CODE PIC 9(02).
|
||||
05 WS-CA-MESSAGE PIC X(40).
|
||||
|
||||
01 WS-COUNTERS.
|
||||
05 WS-READS PIC 9(02) VALUE 0.
|
||||
05 WS-WRITES PIC 9(02) VALUE 0.
|
||||
|
||||
01 WS-MAP-LINE PIC X(80).
|
||||
01 WS-MAP-EOF PIC X(01) VALUE "N".
|
||||
88 MAP-EOF VALUE "Y".
|
||||
|
||||
01 WS-RESPONSE.
|
||||
05 WS-RESP-TEXT PIC X(60).
|
||||
|
||||
01 WS-INVOICE-REC.
|
||||
COPY "telecom/TEL-INVOICE.cpy".
|
||||
*> ===== END PRESERVED ORIGINAL ITEMS =====
|
||||
|
||||
*> ===== NEW ITEMS =====
|
||||
*> Timestamp tracing
|
||||
01 WS-TIMESTAMP.
|
||||
05 WS-TS-YEAR PIC 9(04).
|
||||
05 WS-TS-MONTH PIC 9(02).
|
||||
05 WS-TS-DAY PIC 9(02).
|
||||
05 WS-TS-HOUR PIC 9(02).
|
||||
05 WS-TS-MINUTE PIC 9(02).
|
||||
05 WS-TS-SECOND PIC 9(02).
|
||||
05 WS-TS-MS PIC 9(02).
|
||||
01 WS-TIMESTAMP-STR PIC X(26).
|
||||
01 WS-TRACE-PREFIX PIC X(40).
|
||||
|
||||
*> File status fields (additional)
|
||||
01 WS-MAP-FILE-STATUS PIC X(02).
|
||||
01 WS-OUT-FILE-STATUS PIC X(02).
|
||||
01 WS-AUD-FILE-STATUS PIC X(02).
|
||||
01 WS-RPT-FILE-STATUS PIC X(02).
|
||||
|
||||
*> Session state management
|
||||
01 WS-SESSION-STATE.
|
||||
05 WS-SESS-USERID PIC X(08).
|
||||
05 WS-SESS-STATUS PIC X(01).
|
||||
88 WS-SESS-ACTIVE VALUE 'A'.
|
||||
88 WS-SESS-LOCKED VALUE 'L'.
|
||||
88 WS-SESS-TERMINATED VALUE 'T'.
|
||||
05 WS-SESS-LOGIN-TIME PIC X(20).
|
||||
05 WS-SESS-TXN-COUNT PIC 9(04) VALUE ZERO.
|
||||
05 WS-SESS-LAST-FUNC PIC X(04).
|
||||
05 WS-SESS-ERRORS PIC 9(03) VALUE ZERO.
|
||||
|
||||
*> Response time tracking
|
||||
01 WS-RESPONSE-TIME.
|
||||
05 WS-RT-START-M PIC 9(08).
|
||||
05 WS-RT-START-S PIC 9(08).
|
||||
05 WS-RT-END-M PIC 9(08).
|
||||
05 WS-RT-END-S PIC 9(08).
|
||||
05 WS-RT-ELAPSED PIC S9(08).
|
||||
05 WS-RT-DISP PIC Z(9)9.
|
||||
|
||||
*> Map building fields (simulated CICS BMS)
|
||||
01 WS-MAP-BUILD.
|
||||
05 WS-MAP-MAPNAME PIC X(08).
|
||||
05 WS-MAP-TITLE PIC X(40).
|
||||
05 WS-MAP-BODY PIC X(80).
|
||||
05 WS-MAP-MSG-LINE PIC X(40).
|
||||
05 WS-MAP-CURSOR PIC 9(04).
|
||||
05 WS-MAP-ATTR PIC X(01).
|
||||
88 WS-MAP-PROT VALUE 'P'.
|
||||
88 WS-MAP-UNPROT VALUE 'U'.
|
||||
88 WS-MAP-BRIGHT VALUE 'B'.
|
||||
05 WS-MAP-FIELD-TABLE.
|
||||
10 WS-MAP-FLD OCCURS 5 TIMES.
|
||||
15 WS-MAP-FLD-NAME PIC X(10).
|
||||
15 WS-MAP-FLD-VALUE PIC X(20).
|
||||
15 WS-MAP-FLD-ATTR PIC X(01).
|
||||
|
||||
*> Transaction history (in-memory log)
|
||||
01 WS-TXN-HISTORY.
|
||||
05 WS-TXN-COUNT PIC 9(02) VALUE ZERO.
|
||||
05 WS-TXN-TABLE.
|
||||
10 WS-TXN-ENTRY OCCURS 20 TIMES.
|
||||
15 WS-TXN-FUNC PIC X(04).
|
||||
15 WS-TXN-USER PIC X(08).
|
||||
15 WS-TXN-TIME PIC X(20).
|
||||
15 WS-TXN-RC PIC 9(02).
|
||||
|
||||
*> Error severity and handling
|
||||
01 WS-ERR-SEVERITY PIC 9(01).
|
||||
88 WS-ERR-INFO VALUE 0.
|
||||
88 WS-ERR-WARN VALUE 1.
|
||||
88 WS-ERR-ERROR VALUE 2.
|
||||
88 WS-ERR-FATAL VALUE 3.
|
||||
01 WS-ERR-MSG PIC X(60).
|
||||
01 WS-ERR-COUNT PIC 9(04) VALUE ZERO.
|
||||
01 WS-ERR-RESP-CODE PIC X(04).
|
||||
01 WS-ERR-RESP-MSG PIC X(40).
|
||||
|
||||
*> Hash totals
|
||||
01 WS-HASH-TOTAL.
|
||||
05 WS-HASH-TXN-COUNT PIC 9(09) VALUE ZERO.
|
||||
05 WS-HASH-FUNC-MAP PIC 9(09) VALUE ZERO.
|
||||
05 WS-HASH-FUNC-INQY PIC 9(09) VALUE ZERO.
|
||||
05 WS-HASH-FUNC-UPDT PIC 9(09) VALUE ZERO.
|
||||
05 WS-HASH-FUNC-DEL PIC 9(09) VALUE ZERO.
|
||||
05 WS-HASH-FUNC-ADDN PIC 9(09) VALUE ZERO.
|
||||
05 WS-HASH-FUNC-CANC PIC 9(09) VALUE ZERO.
|
||||
05 WS-HASH-FUNC-SUSP PIC 9(09) VALUE ZERO.
|
||||
05 WS-HASH-FUNC-BILL PIC 9(09) VALUE ZERO.
|
||||
05 WS-HASH-FUNC-DISP PIC 9(09) VALUE ZERO.
|
||||
05 WS-HASH-FUNC-OTHER PIC 9(09) VALUE ZERO.
|
||||
05 WS-HASH-ERROR-COUNT PIC 9(09) VALUE ZERO.
|
||||
05 WS-HASH-CHECKSUM PIC 9(15) VALUE ZERO.
|
||||
|
||||
*> Audit fields
|
||||
01 WS-AUDIT-ENTRIES PIC 9(04) VALUE ZERO.
|
||||
01 WS-AUDIT-LINE PIC X(100).
|
||||
|
||||
*> Report fields
|
||||
01 WS-RPT-DATE PIC X(10).
|
||||
01 WS-RPT-TIME PIC X(08).
|
||||
|
||||
*> Separator lines
|
||||
01 WS-SEP-STARS PIC X(100) VALUE ALL '*'.
|
||||
01 WS-SEP-DASHES PIC X(100) VALUE ALL '-'.
|
||||
01 WS-SEP-EQUALS PIC X(100) VALUE ALL '='.
|
||||
|
||||
*> Edited numeric fields
|
||||
01 WS-ED-COUNT PIC Z(9)9.
|
||||
01 WS-ED-TOTAL PIC Z(9)9.
|
||||
01 WS-ED-TIME PIC Z(9)9.
|
||||
|
||||
*> Billing data (for BILL transaction)
|
||||
01 WS-BILL-DATA.
|
||||
05 WS-BD-INV-ID PIC X(10).
|
||||
05 WS-BD-AMOUNT PIC 9(09).
|
||||
05 WS-BD-STATUS PIC X(01).
|
||||
05 WS-BD-MONTH PIC 9(06).
|
||||
05 WS-BD-BALANCE PIC 9(09).
|
||||
|
||||
*> Configuration constants
|
||||
01 WS-CONFIG-MAX-ERRORS PIC 9(03) VALUE 50.
|
||||
01 WS-CONFIG-MAX-TXNS PIC 9(02) VALUE 20.
|
||||
*> ============================================================
|
||||
|
||||
*> LINKAGE SECTION removed — LK-COMMAREA replaced by WS-COMMAREA
|
||||
PROCEDURE DIVISION.
|
||||
MAIN SECTION.
|
||||
MB-PROCESS.
|
||||
|
||||
PERFORM 1000-INIT
|
||||
PERFORM 2000-OPEN-FILES
|
||||
PERFORM 3000-PROCESS
|
||||
PERFORM 4000-REPORT
|
||||
PERFORM 5000-AUDIT
|
||||
PERFORM 6000-ERROR-HANDLE
|
||||
PERFORM 9000-EXIT
|
||||
|
||||
GOBACK.
|
||||
|
||||
1000-INIT SECTION.
|
||||
*>
|
||||
DISPLAY "Main14OnlineCics: Initializing...".
|
||||
MOVE FUNCTION CURRENT-DATE TO WS-TIMESTAMP.
|
||||
STRING WS-TS-YEAR '-' WS-TS-MONTH '-'
|
||||
WS-TS-DAY ' ' WS-TS-HOUR ':'
|
||||
WS-TS-MINUTE ':' WS-TS-SECOND
|
||||
INTO WS-TIMESTAMP-STR.
|
||||
DISPLAY "Main14OnlineCics: Start time=" WS-TIMESTAMP-STR.
|
||||
*>
|
||||
*> Initialize session state
|
||||
MOVE SPACES TO WS-SESSION-STATE.
|
||||
MOVE 'A' TO WS-SESS-STATUS.
|
||||
MOVE WS-TIMESTAMP-STR TO WS-SESS-LOGIN-TIME.
|
||||
MOVE ZERO TO WS-SESS-TXN-COUNT.
|
||||
MOVE ZERO TO WS-SESS-ERRORS.
|
||||
*>
|
||||
*> Initialize hash totals
|
||||
MOVE ZERO TO WS-HASH-TOTAL.
|
||||
MOVE ZERO TO WS-ERR-COUNT.
|
||||
MOVE ZERO TO WS-AUDIT-ENTRIES.
|
||||
*>
|
||||
*> Initialize response time
|
||||
MOVE ZERO TO WS-RESPONSE-TIME.
|
||||
*>
|
||||
*> Initialize transaction history
|
||||
MOVE ZERO TO WS-TXN-COUNT.
|
||||
*>
|
||||
*> Build date/time for reports
|
||||
MOVE WS-TS-YEAR TO WS-RPT-DATE(1:4).
|
||||
MOVE '-' TO WS-RPT-DATE(5:1).
|
||||
MOVE WS-TS-MONTH TO WS-RPT-DATE(6:2).
|
||||
MOVE '-' TO WS-RPT-DATE(8:1).
|
||||
MOVE WS-TS-DAY TO WS-RPT-DATE(9:2).
|
||||
STRING WS-TS-HOUR ':' WS-TS-MINUTE ':'
|
||||
WS-TS-SECOND INTO WS-RPT-TIME.
|
||||
*>
|
||||
DISPLAY "Main14OnlineCics: INIT complete. Session="
|
||||
WS-SESS-USERID " Status=" WS-SESS-STATUS.
|
||||
*>
|
||||
2000-OPEN-FILES SECTION.
|
||||
*>
|
||||
DISPLAY "Main14OnlineCics: Opening files...".
|
||||
*>
|
||||
OPEN INPUT MAP-FILE.
|
||||
IF WS-MAP-FILE-STATUS NOT = '00'
|
||||
MOVE 2 TO WS-ERR-SEVERITY
|
||||
STRING "WARN: MAP-FILE open status="
|
||||
WS-MAP-FILE-STATUS INTO WS-ERR-MSG
|
||||
DISPLAY WS-ERR-MSG
|
||||
ADD 1 TO WS-ERR-COUNT
|
||||
END-IF.
|
||||
*>
|
||||
OPEN EXTEND OUTPUT-FILE.
|
||||
IF WS-OUT-FILE-STATUS NOT = '00'
|
||||
OPEN OUTPUT OUTPUT-FILE
|
||||
IF WS-OUT-FILE-STATUS NOT = '00'
|
||||
MOVE 3 TO WS-ERR-SEVERITY
|
||||
STRING "ERROR: OUTPUT-FILE open status="
|
||||
WS-OUT-FILE-STATUS INTO WS-ERR-MSG
|
||||
DISPLAY WS-ERR-MSG
|
||||
PERFORM 6000-ERROR-HANDLE
|
||||
END-IF
|
||||
END-IF.
|
||||
*>
|
||||
OPEN EXTEND TXN-AUDIT-FILE.
|
||||
IF WS-AUD-FILE-STATUS NOT = '00'
|
||||
OPEN OUTPUT TXN-AUDIT-FILE
|
||||
IF WS-AUD-FILE-STATUS NOT = '00'
|
||||
MOVE 1 TO WS-ERR-SEVERITY
|
||||
STRING "WARN: TXN-AUDIT open status="
|
||||
WS-AUD-FILE-STATUS INTO WS-ERR-MSG
|
||||
DISPLAY WS-ERR-MSG
|
||||
ADD 1 TO WS-ERR-COUNT
|
||||
END-IF
|
||||
END-IF.
|
||||
*>
|
||||
OPEN OUTPUT TXN-REPORT.
|
||||
IF WS-RPT-FILE-STATUS NOT = '00'
|
||||
MOVE 1 TO WS-ERR-SEVERITY
|
||||
STRING "WARN: TXN-REPORT open status="
|
||||
WS-RPT-FILE-STATUS INTO WS-ERR-MSG
|
||||
DISPLAY WS-ERR-MSG
|
||||
ADD 1 TO WS-ERR-COUNT
|
||||
END-IF.
|
||||
*>
|
||||
DISPLAY "Main14OnlineCics: Files opened."
|
||||
" MAP=" WS-MAP-FILE-STATUS
|
||||
" OUT=" WS-OUT-FILE-STATUS
|
||||
" AUD=" WS-AUD-FILE-STATUS.
|
||||
*>
|
||||
3000-PROCESS SECTION.
|
||||
*>
|
||||
DISPLAY "Main14OnlineCics: Processing COMMAREA...".
|
||||
*>
|
||||
*> Capture response time start (seconds portion)
|
||||
MOVE WS-TS-SECOND TO WS-RT-START-S.
|
||||
MOVE WS-TS-MS TO WS-RT-START-M.
|
||||
*>
|
||||
*> ============================================================
|
||||
*> === PRESERVED ORIGINAL CODE ===
|
||||
*> ============================================================
|
||||
DISPLAY "=== CICS Online Simulation ===".
|
||||
DISPLAY "COMMAREA received:".
|
||||
*>
|
||||
*> LK data removed — using WS-COMMAREA directly
|
||||
*>
|
||||
DISPLAY " UserID: " WS-CA-USERID.
|
||||
DISPLAY " Function: " WS-CA-FUNCTION.
|
||||
DISPLAY " Input: " WS-CA-INPUT-DATA.
|
||||
*>
|
||||
*> Simulate MAPRECV: read from map file
|
||||
OPEN INPUT MAP-FILE.
|
||||
IF WS-MAP-FILE-STATUS NOT = '00'
|
||||
MOVE 2 TO WS-ERR-SEVERITY
|
||||
STRING "WARN: MAP-FILE reopen status="
|
||||
WS-MAP-FILE-STATUS INTO WS-ERR-MSG
|
||||
DISPLAY WS-ERR-MSG
|
||||
ADD 1 TO WS-ERR-COUNT
|
||||
END-IF.
|
||||
*>
|
||||
PERFORM UNTIL MAP-EOF
|
||||
READ MAP-FILE INTO WS-MAP-LINE
|
||||
AT END
|
||||
SET MAP-EOF TO TRUE
|
||||
NOT AT END
|
||||
DISPLAY " MAP RECV: " WS-MAP-LINE
|
||||
ADD 1 TO WS-READS
|
||||
END-READ
|
||||
END-PERFORM.
|
||||
CLOSE MAP-FILE.
|
||||
IF WS-MAP-FILE-STATUS NOT = '00'
|
||||
MOVE 1 TO WS-ERR-SEVERITY
|
||||
STRING "INFO: MAP-FILE close status="
|
||||
WS-MAP-FILE-STATUS INTO WS-ERR-MSG
|
||||
DISPLAY WS-ERR-MSG
|
||||
END-IF.
|
||||
*>
|
||||
*> Update session state with current user
|
||||
MOVE WS-CA-USERID TO WS-SESS-USERID.
|
||||
ADD 1 TO WS-SESS-TXN-COUNT.
|
||||
MOVE WS-CA-FUNCTION TO WS-SESS-LAST-FUNC.
|
||||
*>
|
||||
*> Validate COMMAREA before processing
|
||||
PERFORM 3100-VALIDATE-COMMAREA.
|
||||
*>
|
||||
*> Process based on function code
|
||||
*> --- PRESERVED ORIGINAL EVALUATE with added transactions ---
|
||||
EVALUATE WS-CA-FUNCTION
|
||||
WHEN "INQY"
|
||||
MOVE "INQUIRY processed" TO WS-CA-MESSAGE
|
||||
MOVE 00 TO WS-CA-RETURN-CODE
|
||||
ADD 1 TO WS-HASH-FUNC-INQY
|
||||
|
||||
WHEN "UPDT"
|
||||
MOVE "UPDATE processed" TO WS-CA-MESSAGE
|
||||
MOVE 00 TO WS-CA-RETURN-CODE
|
||||
ADD 1 TO WS-HASH-FUNC-UPDT
|
||||
|
||||
WHEN "DEL "
|
||||
MOVE "DELETE processed" TO WS-CA-MESSAGE
|
||||
MOVE 00 TO WS-CA-RETURN-CODE
|
||||
ADD 1 TO WS-HASH-FUNC-DEL
|
||||
|
||||
*> === NEW TRANSACTION CODES ===
|
||||
WHEN "ADDN"
|
||||
MOVE "ADDN processed" TO WS-CA-MESSAGE
|
||||
MOVE 00 TO WS-CA-RETURN-CODE
|
||||
ADD 1 TO WS-HASH-FUNC-ADDN
|
||||
PERFORM 3200-PROCESS-TRANSACTION
|
||||
|
||||
WHEN "CANC"
|
||||
MOVE "CANC processed" TO WS-CA-MESSAGE
|
||||
MOVE 00 TO WS-CA-RETURN-CODE
|
||||
ADD 1 TO WS-HASH-FUNC-CANC
|
||||
PERFORM 3200-PROCESS-TRANSACTION
|
||||
|
||||
WHEN "SUSP"
|
||||
MOVE "SUSP processed" TO WS-CA-MESSAGE
|
||||
MOVE 00 TO WS-CA-RETURN-CODE
|
||||
ADD 1 TO WS-HASH-FUNC-SUSP
|
||||
PERFORM 3200-PROCESS-TRANSACTION
|
||||
|
||||
WHEN "BILL"
|
||||
MOVE "BILL processed" TO WS-CA-MESSAGE
|
||||
MOVE 00 TO WS-CA-RETURN-CODE
|
||||
ADD 1 TO WS-HASH-FUNC-BILL
|
||||
PERFORM 3200-PROCESS-TRANSACTION
|
||||
|
||||
WHEN "DISP"
|
||||
MOVE "DISP processed" TO WS-CA-MESSAGE
|
||||
MOVE 00 TO WS-CA-RETURN-CODE
|
||||
ADD 1 TO WS-HASH-FUNC-DISP
|
||||
PERFORM 3200-PROCESS-TRANSACTION
|
||||
|
||||
WHEN OTHER
|
||||
MOVE "UNKNOWN function" TO WS-CA-MESSAGE
|
||||
MOVE 99 TO WS-CA-RETURN-CODE
|
||||
ADD 1 TO WS-HASH-FUNC-OTHER
|
||||
END-EVALUATE.
|
||||
*>
|
||||
*> Build map and format response for all transactions
|
||||
PERFORM 3300-BUILD-MAP.
|
||||
PERFORM 3400-FORMAT-RESPONSE.
|
||||
*>
|
||||
*> Simulate MAPSEND: write to output file
|
||||
*> === PRESERVED ORIGINAL OUTPUT CODE ===
|
||||
OPEN OUTPUT OUTPUT-FILE.
|
||||
IF WS-OUT-FILE-STATUS NOT = '00'
|
||||
MOVE 2 TO WS-ERR-SEVERITY
|
||||
STRING "ERROR: OUTPUT-FILE reopen status="
|
||||
WS-OUT-FILE-STATUS INTO WS-ERR-MSG
|
||||
DISPLAY WS-ERR-MSG
|
||||
ADD 1 TO WS-ERR-COUNT
|
||||
END-IF.
|
||||
*>
|
||||
MOVE SPACES TO OUTPUT-LINE.
|
||||
STRING "USER=" WS-CA-USERID
|
||||
" FUNC=" WS-CA-FUNCTION
|
||||
" RC=" WS-CA-RETURN-CODE
|
||||
" MSG=" WS-CA-MESSAGE
|
||||
DELIMITED BY SIZE INTO OUTPUT-LINE.
|
||||
WRITE OUTPUT-LINE.
|
||||
ADD 1 TO WS-WRITES.
|
||||
*>
|
||||
MOVE SPACES TO OUTPUT-LINE.
|
||||
STRING "MAPSEND: Received " WS-READS
|
||||
" map lines, sent " WS-WRITES " responses"
|
||||
DELIMITED BY SIZE INTO OUTPUT-LINE.
|
||||
WRITE OUTPUT-LINE.
|
||||
CLOSE OUTPUT-FILE.
|
||||
IF WS-OUT-FILE-STATUS NOT = '00'
|
||||
MOVE 1 TO WS-ERR-SEVERITY
|
||||
STRING "INFO: OUTPUT-FILE close status="
|
||||
WS-OUT-FILE-STATUS INTO WS-ERR-MSG
|
||||
DISPLAY WS-ERR-MSG
|
||||
END-IF.
|
||||
*>
|
||||
*> Set return values in LINKAGE
|
||||
*> Return values already in WS-COMMAREA
|
||||
*>
|
||||
DISPLAY " Return-Code: " WS-CA-RETURN-CODE.
|
||||
DISPLAY " Message: " WS-CA-MESSAGE.
|
||||
DISPLAY "Output written to cics-output.txt".
|
||||
*> === END PRESERVED ORIGINAL CODE ===
|
||||
*>
|
||||
*> Update transaction history
|
||||
IF WS-TXN-COUNT < WS-CONFIG-MAX-TXNS
|
||||
ADD 1 TO WS-TXN-COUNT
|
||||
MOVE WS-CA-FUNCTION TO WS-TXN-FUNC(WS-TXN-COUNT)
|
||||
MOVE WS-CA-USERID TO WS-TXN-USER(WS-TXN-COUNT)
|
||||
MOVE WS-TIMESTAMP-STR TO WS-TXN-TIME(WS-TXN-COUNT)
|
||||
MOVE WS-CA-RETURN-CODE TO WS-TXN-RC(WS-TXN-COUNT)
|
||||
END-IF.
|
||||
*>
|
||||
*> Update hash totals
|
||||
ADD 1 TO WS-HASH-TXN-COUNT.
|
||||
ADD WS-READS TO WS-HASH-CHECKSUM.
|
||||
ADD WS-WRITES TO WS-HASH-CHECKSUM.
|
||||
*>
|
||||
EXIT.
|
||||
*>
|
||||
3100-VALIDATE-COMMAREA SECTION.
|
||||
*>
|
||||
DISPLAY "Main14OnlineCics: Validating COMMAREA...".
|
||||
*>
|
||||
*> Validate user ID
|
||||
IF WS-CA-USERID = SPACES OR WS-CA-USERID = LOW-VALUES
|
||||
MOVE 2 TO WS-ERR-SEVERITY
|
||||
STRING "ERROR: Invalid UserID [" WS-CA-USERID "]"
|
||||
INTO WS-ERR-MSG
|
||||
DISPLAY WS-ERR-MSG
|
||||
ADD 1 TO WS-ERR-COUNT
|
||||
ADD 1 TO WS-SESS-ERRORS
|
||||
END-IF.
|
||||
*>
|
||||
*> Validate function code length/content
|
||||
IF WS-CA-FUNCTION = SPACES OR WS-CA-FUNCTION = LOW-VALUES
|
||||
MOVE 2 TO WS-ERR-SEVERITY
|
||||
STRING "ERROR: Empty function code" INTO WS-ERR-MSG
|
||||
DISPLAY WS-ERR-MSG
|
||||
ADD 1 TO WS-ERR-COUNT
|
||||
ADD 1 TO WS-SESS-ERRORS
|
||||
END-IF.
|
||||
*>
|
||||
*> Check session state
|
||||
IF WS-SESS-LOCKED
|
||||
MOVE 2 TO WS-ERR-SEVERITY
|
||||
STRING "ERROR: Session locked for " WS-SESS-USERID
|
||||
INTO WS-ERR-MSG
|
||||
DISPLAY WS-ERR-MSG
|
||||
MOVE 99 TO WS-CA-RETURN-CODE
|
||||
MOVE "Session locked" TO WS-CA-MESSAGE
|
||||
PERFORM 6000-ERROR-HANDLE
|
||||
END-IF.
|
||||
IF WS-SESS-TERMINATED
|
||||
MOVE 2 TO WS-ERR-SEVERITY
|
||||
STRING "ERROR: Session terminated for " WS-SESS-USERID
|
||||
INTO WS-ERR-MSG
|
||||
DISPLAY WS-ERR-MSG
|
||||
MOVE 99 TO WS-CA-RETURN-CODE
|
||||
MOVE "Session terminated" TO WS-CA-MESSAGE
|
||||
PERFORM 6000-ERROR-HANDLE
|
||||
END-IF.
|
||||
*>
|
||||
*> Check for excessive errors
|
||||
IF WS-SESS-ERRORS > WS-CONFIG-MAX-ERRORS
|
||||
MOVE 'L' TO WS-SESS-STATUS
|
||||
MOVE 2 TO WS-ERR-SEVERITY
|
||||
STRING "ERROR: Too many errors, session locked"
|
||||
INTO WS-ERR-MSG
|
||||
DISPLAY WS-ERR-MSG
|
||||
MOVE 99 TO WS-CA-RETURN-CODE
|
||||
MOVE "Session locked" TO WS-CA-MESSAGE
|
||||
END-IF.
|
||||
*>
|
||||
DISPLAY "Main14OnlineCics: COMMAREA validated."
|
||||
" User=" WS-CA-USERID " Func=" WS-CA-FUNCTION.
|
||||
*>
|
||||
3200-PROCESS-TRANSACTION SECTION.
|
||||
*>
|
||||
DISPLAY "Main14OnlineCics: Processing transaction..."
|
||||
WS-CA-FUNCTION.
|
||||
*>
|
||||
*> Route to specific transaction processing
|
||||
EVALUATE WS-CA-FUNCTION
|
||||
WHEN "ADDN"
|
||||
PERFORM 3210-PROCESS-ADDN
|
||||
WHEN "CANC"
|
||||
PERFORM 3220-PROCESS-CANC
|
||||
WHEN "SUSP"
|
||||
PERFORM 3230-PROCESS-SUSP
|
||||
WHEN "BILL"
|
||||
PERFORM 3240-PROCESS-BILL
|
||||
WHEN "DISP"
|
||||
PERFORM 3250-PROCESS-DISP
|
||||
WHEN OTHER
|
||||
CONTINUE
|
||||
END-EVALUATE.
|
||||
*>
|
||||
3210-PROCESS-ADDN SECTION.
|
||||
*>
|
||||
*> Add new invoice/record processing
|
||||
DISPLAY "Main14OnlineCics: ADDN - Adding new record...".
|
||||
IF WS-CA-INPUT-DATA = SPACES
|
||||
MOVE 1 TO WS-ERR-SEVERITY
|
||||
STRING "WARN: ADDN with empty input data"
|
||||
INTO WS-ERR-MSG
|
||||
DISPLAY WS-ERR-MSG
|
||||
ADD 1 TO WS-ERR-COUNT
|
||||
MOVE "ADDN: no input data" TO WS-CA-MESSAGE
|
||||
MOVE 01 TO WS-CA-RETURN-CODE
|
||||
ELSE
|
||||
STRING "ADDN: record added [" WS-CA-INPUT-DATA "]"
|
||||
INTO WS-CA-MESSAGE
|
||||
MOVE 00 TO WS-CA-RETURN-CODE
|
||||
END-IF.
|
||||
*>
|
||||
*> Build map fields for ADDN response
|
||||
MOVE "ADDNMAP " TO WS-MAP-MAPNAME.
|
||||
MOVE "ADD NEW RECORD" TO WS-MAP-TITLE.
|
||||
MOVE WS-CA-INPUT-DATA TO WS-MAP-BODY.
|
||||
MOVE "ADD processing OK" TO WS-MAP-MSG-LINE.
|
||||
*>
|
||||
3220-PROCESS-CANC SECTION.
|
||||
*>
|
||||
*> Cancel transaction processing
|
||||
DISPLAY "Main14OnlineCics: CANC - Cancelling...".
|
||||
IF WS-CA-INPUT-DATA = SPACES
|
||||
MOVE 1 TO WS-ERR-SEVERITY
|
||||
STRING "WARN: CANC with empty input data"
|
||||
INTO WS-ERR-MSG
|
||||
DISPLAY WS-ERR-MSG
|
||||
ADD 1 TO WS-ERR-COUNT
|
||||
MOVE "CANC: no input data" TO WS-CA-MESSAGE
|
||||
MOVE 01 TO WS-CA-RETURN-CODE
|
||||
ELSE
|
||||
STRING "CANC: cancelled [" WS-CA-INPUT-DATA "]"
|
||||
INTO WS-CA-MESSAGE
|
||||
MOVE 00 TO WS-CA-RETURN-CODE
|
||||
END-IF.
|
||||
*>
|
||||
*> Build map fields for CANC response
|
||||
MOVE "CANCMAP " TO WS-MAP-MAPNAME.
|
||||
MOVE "CANCEL TRANSACTION" TO WS-MAP-TITLE.
|
||||
MOVE WS-CA-INPUT-DATA TO WS-MAP-BODY.
|
||||
MOVE "CANCEL processing OK" TO WS-MAP-MSG-LINE.
|
||||
*>
|
||||
3230-PROCESS-SUSP SECTION.
|
||||
*>
|
||||
*> Suspend account processing
|
||||
DISPLAY "Main14OnlineCics: SUSP - Suspending account...".
|
||||
IF WS-CA-INPUT-DATA = SPACES
|
||||
MOVE 1 TO WS-ERR-SEVERITY
|
||||
STRING "WARN: SUSP with empty input data"
|
||||
INTO WS-ERR-MSG
|
||||
DISPLAY WS-ERR-MSG
|
||||
ADD 1 TO WS-ERR-COUNT
|
||||
MOVE "SUSP: no input data" TO WS-CA-MESSAGE
|
||||
MOVE 01 TO WS-CA-RETURN-CODE
|
||||
ELSE
|
||||
STRING "SUSP: account suspended [" WS-CA-INPUT-DATA "]"
|
||||
INTO WS-CA-MESSAGE
|
||||
MOVE 00 TO WS-CA-RETURN-CODE
|
||||
MOVE 'L' TO WS-SESS-STATUS
|
||||
END-IF.
|
||||
*>
|
||||
*> Build map fields for SUSP response
|
||||
MOVE "SUSPMAP " TO WS-MAP-MAPNAME.
|
||||
MOVE "SUSPEND ACCOUNT" TO WS-MAP-TITLE.
|
||||
MOVE WS-CA-INPUT-DATA TO WS-MAP-BODY.
|
||||
MOVE "SUSPEND processing OK" TO WS-MAP-MSG-LINE.
|
||||
*>
|
||||
3240-PROCESS-BILL SECTION.
|
||||
*>
|
||||
*> Billing inquiry processing
|
||||
DISPLAY "Main14OnlineCics: BILL - Billing inquiry...".
|
||||
MOVE WS-CA-INPUT-DATA(1:10) TO WS-BD-INV-ID.
|
||||
COMPUTE WS-BD-AMOUNT = FUNCTION RANDOM * 100000.
|
||||
MOVE '1' TO WS-BD-STATUS.
|
||||
MOVE 202506 TO WS-BD-MONTH.
|
||||
COMPUTE WS-BD-BALANCE = WS-BD-AMOUNT * 80 / 100.
|
||||
*>
|
||||
MOVE WS-BD-AMOUNT TO WS-ED-TOTAL.
|
||||
STRING "BILL: invoice=" WS-BD-INV-ID
|
||||
" amount=" WS-ED-TOTAL
|
||||
" balance=" WS-BD-BALANCE
|
||||
INTO WS-CA-MESSAGE.
|
||||
MOVE 00 TO WS-CA-RETURN-CODE.
|
||||
*>
|
||||
*> Build map fields for BILL response
|
||||
MOVE "BILLMAP " TO WS-MAP-MAPNAME.
|
||||
MOVE "BILLING INQUIRY" TO WS-MAP-TITLE.
|
||||
MOVE WS-CA-INPUT-DATA TO WS-MAP-BODY.
|
||||
STRING "BALANCE=" WS-BD-BALANCE INTO WS-MAP-MSG-LINE.
|
||||
*>
|
||||
3250-PROCESS-DISP SECTION.
|
||||
*>
|
||||
*> Display detail processing
|
||||
DISPLAY "Main14OnlineCics: DISP - Display detail...".
|
||||
MOVE WS-CA-INPUT-DATA TO WS-BD-INV-ID.
|
||||
MOVE 50000 TO WS-BD-AMOUNT.
|
||||
MOVE '1' TO WS-BD-STATUS.
|
||||
MOVE 202506 TO WS-BD-MONTH.
|
||||
*>
|
||||
MOVE WS-BD-AMOUNT TO WS-ED-TOTAL.
|
||||
STRING "DISP: invoice=" WS-BD-INV-ID
|
||||
" amount=" WS-ED-TOTAL
|
||||
" status=" WS-BD-STATUS
|
||||
INTO WS-CA-MESSAGE.
|
||||
MOVE 00 TO WS-CA-RETURN-CODE.
|
||||
*>
|
||||
*> Build map fields for DISP response
|
||||
MOVE "DISPMAP " TO WS-MAP-MAPNAME.
|
||||
MOVE "DISPLAY DETAIL" TO WS-MAP-TITLE.
|
||||
MOVE WS-CA-INPUT-DATA TO WS-MAP-BODY.
|
||||
STRING "AMOUNT=" WS-BD-AMOUNT INTO WS-MAP-MSG-LINE.
|
||||
*>
|
||||
3300-BUILD-MAP SECTION.
|
||||
*>
|
||||
DISPLAY "Main14OnlineCics: Building response map...".
|
||||
*>
|
||||
*> Populate map field table based on transaction
|
||||
MOVE 1 TO WS-MAP-CURSOR.
|
||||
MOVE 'U' TO WS-MAP-ATTR.
|
||||
*>
|
||||
*> Fill map field entries
|
||||
MOVE "USERID " TO WS-MAP-FLD-NAME(1).
|
||||
MOVE WS-CA-USERID TO WS-MAP-FLD-VALUE(1).
|
||||
MOVE 'P' TO WS-MAP-FLD-ATTR(1).
|
||||
*>
|
||||
MOVE "FUNCTION " TO WS-MAP-FLD-NAME(2).
|
||||
MOVE WS-CA-FUNCTION TO WS-MAP-FLD-VALUE(2).
|
||||
MOVE 'P' TO WS-MAP-FLD-ATTR(2).
|
||||
*>
|
||||
MOVE "RETURNCOD" TO WS-MAP-FLD-NAME(3).
|
||||
MOVE WS-CA-RETURN-CODE TO WS-MAP-FLD-VALUE(3).
|
||||
MOVE 'P' TO WS-MAP-FLD-ATTR(3).
|
||||
*>
|
||||
MOVE "MESSAGE " TO WS-MAP-FLD-NAME(4).
|
||||
MOVE WS-CA-MESSAGE TO WS-MAP-FLD-VALUE(4).
|
||||
MOVE 'U' TO WS-MAP-FLD-ATTR(4).
|
||||
*>
|
||||
MOVE "INPUTDATA" TO WS-MAP-FLD-NAME(5).
|
||||
MOVE WS-CA-INPUT-DATA TO WS-MAP-FLD-VALUE(5).
|
||||
MOVE 'U' TO WS-MAP-FLD-ATTR(5).
|
||||
*>
|
||||
DISPLAY "Main14OnlineCics: Map built."
|
||||
" Mapname=" WS-MAP-MAPNAME
|
||||
" Title=" WS-MAP-TITLE.
|
||||
*>
|
||||
3400-FORMAT-RESPONSE SECTION.
|
||||
*>
|
||||
DISPLAY "Main14OnlineCics: Formatting response...".
|
||||
*>
|
||||
*> Capture response time end
|
||||
MOVE FUNCTION CURRENT-DATE TO WS-TIMESTAMP.
|
||||
MOVE WS-TS-SECOND TO WS-RT-END-S.
|
||||
MOVE WS-TS-MS TO WS-RT-END-M.
|
||||
*>
|
||||
*> Calculate elapsed time in milliseconds
|
||||
COMPUTE WS-RT-ELAPSED =
|
||||
(WS-RT-END-S - WS-RT-START-S) * 1000
|
||||
+ (WS-RT-END-M - WS-RT-START-M).
|
||||
IF WS-RT-ELAPSED < 0
|
||||
COMPUTE WS-RT-ELAPSED =
|
||||
WS-RT-ELAPSED + 60000
|
||||
END-IF.
|
||||
MOVE WS-RT-ELAPSED TO WS-RT-DISP.
|
||||
*>
|
||||
*> Build response text with map details
|
||||
STRING "MAP=" WS-MAP-MAPNAME
|
||||
" TITLE=" WS-MAP-TITLE
|
||||
" MSG=" WS-MAP-MSG-LINE
|
||||
" RESP-TIME=" WS-RT-DISP "ms"
|
||||
INTO WS-RESP-TEXT.
|
||||
*>
|
||||
*> Build formatted output line with response time
|
||||
MOVE SPACES TO OUTPUT-LINE.
|
||||
STRING "RESPONSE: " WS-RESP-TEXT
|
||||
DELIMITED BY SIZE INTO OUTPUT-LINE.
|
||||
*>
|
||||
DISPLAY "Main14OnlineCics: Response formatted."
|
||||
" Time=" WS-RT-DISP "ms".
|
||||
*>
|
||||
4000-REPORT SECTION.
|
||||
*>
|
||||
DISPLAY "Main14OnlineCics: Generating session report...".
|
||||
*>
|
||||
*> Write report header
|
||||
MOVE SPACES TO REPORT-LINE.
|
||||
STRING "TELECOM CICS TRANSACTION REPORT"
|
||||
" " WS-RPT-DATE " " WS-RPT-TIME
|
||||
INTO REPORT-LINE.
|
||||
WRITE REPORT-LINE.
|
||||
WRITE REPORT-LINE FROM WS-SEP-STARS.
|
||||
*>
|
||||
*> Write session summary
|
||||
MOVE SPACES TO REPORT-LINE.
|
||||
STRING "SESSION: User=" WS-SESS-USERID
|
||||
" Status=" WS-SESS-STATUS
|
||||
" Txns=" WS-SESS-TXN-COUNT
|
||||
INTO REPORT-LINE.
|
||||
WRITE REPORT-LINE.
|
||||
*>
|
||||
*> Write transaction hash breakdown
|
||||
MOVE WS-HASH-FUNC-INQY TO WS-ED-COUNT.
|
||||
STRING "HASH: INQY=" WS-ED-COUNT
|
||||
INTO REPORT-LINE.
|
||||
WRITE REPORT-LINE.
|
||||
*>
|
||||
MOVE WS-HASH-FUNC-UPDT TO WS-ED-COUNT.
|
||||
STRING "HASH: UPDT=" WS-ED-COUNT
|
||||
INTO REPORT-LINE.
|
||||
WRITE REPORT-LINE.
|
||||
*>
|
||||
MOVE WS-HASH-FUNC-DEL TO WS-ED-COUNT.
|
||||
STRING "HASH: DEL =" WS-ED-COUNT
|
||||
INTO REPORT-LINE.
|
||||
WRITE REPORT-LINE.
|
||||
*>
|
||||
MOVE WS-HASH-FUNC-ADDN TO WS-ED-COUNT.
|
||||
STRING "HASH: ADDN=" WS-ED-COUNT
|
||||
INTO REPORT-LINE.
|
||||
WRITE REPORT-LINE.
|
||||
*>
|
||||
MOVE WS-HASH-FUNC-CANC TO WS-ED-COUNT.
|
||||
STRING "HASH: CANC=" WS-ED-COUNT
|
||||
INTO REPORT-LINE.
|
||||
WRITE REPORT-LINE.
|
||||
*>
|
||||
MOVE WS-HASH-FUNC-SUSP TO WS-ED-COUNT.
|
||||
STRING "HASH: SUSP=" WS-ED-COUNT
|
||||
INTO REPORT-LINE.
|
||||
WRITE REPORT-LINE.
|
||||
*>
|
||||
MOVE WS-HASH-FUNC-BILL TO WS-ED-COUNT.
|
||||
STRING "HASH: BILL=" WS-ED-COUNT
|
||||
INTO REPORT-LINE.
|
||||
WRITE REPORT-LINE.
|
||||
*>
|
||||
MOVE WS-HASH-FUNC-DISP TO WS-ED-COUNT.
|
||||
STRING "HASH: DISP=" WS-ED-COUNT
|
||||
INTO REPORT-LINE.
|
||||
WRITE REPORT-LINE.
|
||||
*>
|
||||
MOVE WS-HASH-FUNC-OTHER TO WS-ED-COUNT.
|
||||
STRING "HASH: OTHER=" WS-ED-COUNT
|
||||
INTO REPORT-LINE.
|
||||
WRITE REPORT-LINE.
|
||||
*>
|
||||
*> Write total summary
|
||||
MOVE WS-HASH-TXN-COUNT TO WS-ED-TOTAL.
|
||||
STRING "TOTAL TRANSACTIONS: " WS-ED-TOTAL
|
||||
INTO REPORT-LINE.
|
||||
WRITE REPORT-LINE.
|
||||
*>
|
||||
MOVE WS-HASH-CHECKSUM TO WS-ED-TOTAL.
|
||||
STRING "HASH CHECKSUM: " WS-ED-TOTAL
|
||||
INTO REPORT-LINE.
|
||||
WRITE REPORT-LINE.
|
||||
*>
|
||||
MOVE WS-ERR-COUNT TO WS-ED-COUNT.
|
||||
STRING "ERRORS: " WS-ED-COUNT
|
||||
INTO REPORT-LINE.
|
||||
WRITE REPORT-LINE.
|
||||
WRITE REPORT-LINE FROM WS-SEP-DASHES.
|
||||
*>
|
||||
*> Write transaction history
|
||||
MOVE SPACES TO REPORT-LINE.
|
||||
STRING "TRANSACTION HISTORY (" WS-TXN-COUNT " entries)"
|
||||
INTO REPORT-LINE.
|
||||
WRITE REPORT-LINE.
|
||||
WRITE REPORT-LINE FROM WS-SEP-STARS.
|
||||
*>
|
||||
PERFORM VARYING WS-TXN-COUNT FROM 1 BY 1
|
||||
UNTIL WS-TXN-COUNT > 20
|
||||
OR WS-TXN-FUNC(WS-TXN-COUNT) = SPACES
|
||||
MOVE WS-TXN-RC(WS-TXN-COUNT) TO WS-ED-COUNT
|
||||
STRING " " WS-TXN-FUNC(WS-TXN-COUNT)
|
||||
" USER=" WS-TXN-USER(WS-TXN-COUNT)
|
||||
" RC=" WS-ED-COUNT
|
||||
" TIME=" WS-TXN-TIME(WS-TXN-COUNT)
|
||||
INTO REPORT-LINE
|
||||
WRITE REPORT-LINE
|
||||
END-PERFORM.
|
||||
*>
|
||||
WRITE REPORT-LINE FROM WS-SEP-EQUALS.
|
||||
*>
|
||||
DISPLAY "Main14OnlineCics: Report written to txn-report.txt".
|
||||
*>
|
||||
5000-AUDIT SECTION.
|
||||
*>
|
||||
DISPLAY "Main14OnlineCics: Writing audit trail...".
|
||||
*>
|
||||
*> Build audit record
|
||||
MOVE WS-HASH-TXN-COUNT TO WS-ED-COUNT.
|
||||
MOVE WS-ERR-COUNT TO WS-ED-COUNT.
|
||||
*>
|
||||
STRING "AUDIT:" WS-TIMESTAMP-STR
|
||||
" PROG=Main14OnlineCics"
|
||||
" TXNS=" WS-HASH-TXN-COUNT
|
||||
" ERRS=" WS-ERR-COUNT
|
||||
" USER=" WS-CA-USERID
|
||||
" FUNC=" WS-CA-FUNCTION
|
||||
" RC=" WS-CA-RETURN-CODE
|
||||
INTO AUDIT-RECORD.
|
||||
WRITE AUDIT-RECORD.
|
||||
IF WS-AUD-FILE-STATUS NOT = '00'
|
||||
DISPLAY "ERROR: Audit write failed, status: "
|
||||
WS-AUD-FILE-STATUS
|
||||
ADD 1 TO WS-ERR-COUNT
|
||||
END-IF.
|
||||
*>
|
||||
*> Second audit line — response time
|
||||
STRING "AUDIT:RESPTIME=" WS-RT-DISP "ms"
|
||||
" MAP=" WS-MAP-MAPNAME
|
||||
" CURSOR=" WS-MAP-CURSOR
|
||||
INTO AUDIT-RECORD.
|
||||
WRITE AUDIT-RECORD.
|
||||
*>
|
||||
*> Third audit line — session state
|
||||
STRING "AUDIT:SESSION=" WS-SESS-USERID
|
||||
" STATUS=" WS-SESS-STATUS
|
||||
" TCNT=" WS-SESS-TXN-COUNT
|
||||
" ERRS=" WS-SESS-ERRORS
|
||||
INTO AUDIT-RECORD.
|
||||
WRITE AUDIT-RECORD.
|
||||
*>
|
||||
ADD 1 TO WS-AUDIT-ENTRIES.
|
||||
DISPLAY "Main14OnlineCics: Audit trail written."
|
||||
" Entries=" WS-AUDIT-ENTRIES.
|
||||
*>
|
||||
6000-ERROR-HANDLE SECTION.
|
||||
*>
|
||||
ADD 1 TO WS-ERR-COUNT.
|
||||
ADD 1 TO WS-HASH-ERROR-COUNT.
|
||||
*>
|
||||
*> Set error response code based on severity
|
||||
EVALUATE WS-ERR-SEVERITY
|
||||
WHEN 0
|
||||
MOVE '0000' TO WS-ERR-RESP-CODE
|
||||
MOVE 'Informational' TO WS-ERR-RESP-MSG
|
||||
DISPLAY 'INFO: ' WS-ERR-MSG
|
||||
WHEN 1
|
||||
MOVE '0001' TO WS-ERR-RESP-CODE
|
||||
MOVE 'Warning' TO WS-ERR-RESP-MSG
|
||||
DISPLAY 'WARN: ' WS-ERR-MSG
|
||||
WHEN 2
|
||||
MOVE '0002' TO WS-ERR-RESP-CODE
|
||||
MOVE 'Error' TO WS-ERR-RESP-MSG
|
||||
DISPLAY 'ERROR: ' WS-ERR-MSG
|
||||
WHEN 3
|
||||
MOVE '0003' TO WS-ERR-RESP-CODE
|
||||
MOVE 'Fatal' TO WS-ERR-RESP-MSG
|
||||
DISPLAY 'FATAL: ' WS-ERR-MSG
|
||||
PERFORM 9000-EXIT
|
||||
GOBACK
|
||||
WHEN OTHER
|
||||
MOVE '9999' TO WS-ERR-RESP-CODE
|
||||
MOVE 'Unknown severity' TO WS-ERR-RESP-MSG
|
||||
DISPLAY 'UNKN: ' WS-ERR-MSG
|
||||
END-EVALUATE.
|
||||
*>
|
||||
*> Check error threshold
|
||||
IF WS-ERR-COUNT > WS-CONFIG-MAX-ERRORS
|
||||
MOVE 3 TO WS-ERR-SEVERITY
|
||||
STRING 'FATAL: Error threshold '
|
||||
WS-CONFIG-MAX-ERRORS ' exceeded'
|
||||
INTO WS-ERR-MSG
|
||||
DISPLAY WS-ERR-MSG
|
||||
PERFORM 9000-EXIT
|
||||
GOBACK
|
||||
END-IF.
|
||||
*>
|
||||
9000-EXIT SECTION.
|
||||
*>
|
||||
DISPLAY "Main14OnlineCics: Cleanup and exit...".
|
||||
*>
|
||||
*> Close all files with status checks
|
||||
CLOSE MAP-FILE.
|
||||
IF WS-MAP-FILE-STATUS NOT = '00'
|
||||
DISPLAY "WARN: MAP-FILE close status="
|
||||
WS-MAP-FILE-STATUS
|
||||
END-IF.
|
||||
*>
|
||||
CLOSE OUTPUT-FILE.
|
||||
IF WS-OUT-FILE-STATUS NOT = '00'
|
||||
DISPLAY "WARN: OUTPUT-FILE close status="
|
||||
WS-OUT-FILE-STATUS
|
||||
END-IF.
|
||||
*>
|
||||
CLOSE TXN-AUDIT-FILE.
|
||||
IF WS-AUD-FILE-STATUS NOT = '00'
|
||||
DISPLAY "WARN: TXN-AUDIT close status="
|
||||
WS-AUD-FILE-STATUS
|
||||
END-IF.
|
||||
*>
|
||||
CLOSE TXN-REPORT.
|
||||
IF WS-RPT-FILE-STATUS NOT = '00'
|
||||
DISPLAY "WARN: TXN-REPORT close status="
|
||||
WS-RPT-FILE-STATUS
|
||||
END-IF.
|
||||
*>
|
||||
*> Final summary display
|
||||
DISPLAY "Main14OnlineCics: Transactions=" WS-HASH-TXN-COUNT.
|
||||
DISPLAY "Main14OnlineCics: Hash checksum=" WS-HASH-CHECKSUM.
|
||||
DISPLAY "Main14OnlineCics: Errors=" WS-ERR-COUNT.
|
||||
DISPLAY "Main14OnlineCics: Response time=" WS-RT-DISP "ms".
|
||||
DISPLAY "Main14OnlineCics: Audit entries=" WS-AUDIT-ENTRIES.
|
||||
DISPLAY "Main14OnlineCics: End at " WS-TIMESTAMP-STR.
|
||||
*>
|
||||
EXIT.
|
||||
@@ -0,0 +1,68 @@
|
||||
*> ============================================================
|
||||
*> test-cics-driver : 客户在线照会测试驱动 (CICS Test Driver)
|
||||
*> Input : COMMAREA (模拟CICS通信区域)
|
||||
*> Output: CALL結果 (在线照会处理)
|
||||
*> Coverage: OL-N001~N004, OL-A001, OL-R001
|
||||
*> ============================================================
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. TestCicsDriver.
|
||||
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-COMMAREA.
|
||||
05 WS-CA-USERID PIC X(08).
|
||||
05 WS-CA-FUNCTION PIC X(04).
|
||||
05 WS-CA-INPUT-DATA PIC X(40).
|
||||
05 WS-CA-RETURN-CODE PIC 9(02).
|
||||
05 WS-CA-MESSAGE PIC X(40).
|
||||
|
||||
01 WS-TEST-CASE PIC 9(01) VALUE 1.
|
||||
01 WS-INVOICE-REC.
|
||||
COPY "telecom/TEL-INVOICE.cpy".
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
MAIN-PROCEDURE.
|
||||
|
||||
DISPLAY "=== CICS Driver - Test Suite ===".
|
||||
|
||||
*> Test 1: INQUIRY function
|
||||
DISPLAY "Test 1: INQUIRY".
|
||||
MOVE "USER001 " TO WS-CA-USERID.
|
||||
MOVE "INQY" TO WS-CA-FUNCTION.
|
||||
MOVE "Customer account balance inquiry "
|
||||
TO WS-CA-INPUT-DATA.
|
||||
CALL 'Main14OnlineCics' USING WS-COMMAREA.
|
||||
DISPLAY " RC=" WS-CA-RETURN-CODE
|
||||
" MSG=" WS-CA-MESSAGE.
|
||||
|
||||
*> Test 2: UPDATE function
|
||||
DISPLAY "Test 2: UPDATE".
|
||||
MOVE "USER002 " TO WS-CA-USERID.
|
||||
MOVE "UPDT" TO WS-CA-FUNCTION.
|
||||
MOVE "Update customer address record "
|
||||
TO WS-CA-INPUT-DATA.
|
||||
CALL 'Main14OnlineCics' USING WS-COMMAREA.
|
||||
DISPLAY " RC=" WS-CA-RETURN-CODE
|
||||
" MSG=" WS-CA-MESSAGE.
|
||||
|
||||
*> Test 3: DELETE function
|
||||
DISPLAY "Test 3: DELETE".
|
||||
MOVE "USER003 " TO WS-CA-USERID.
|
||||
MOVE "DEL " TO WS-CA-FUNCTION.
|
||||
MOVE "Delete obsolete customer record "
|
||||
TO WS-CA-INPUT-DATA.
|
||||
CALL 'Main14OnlineCics' USING WS-COMMAREA.
|
||||
DISPLAY " RC=" WS-CA-RETURN-CODE
|
||||
" MSG=" WS-CA-MESSAGE.
|
||||
|
||||
*> Test 4: UNKNOWN function
|
||||
DISPLAY "Test 4: UNKNOWN function".
|
||||
MOVE "USER004 " TO WS-CA-USERID.
|
||||
MOVE "BAD!" TO WS-CA-FUNCTION.
|
||||
MOVE "This should return error code 99 "
|
||||
TO WS-CA-INPUT-DATA.
|
||||
CALL 'Main14OnlineCics' USING WS-COMMAREA.
|
||||
DISPLAY " RC=" WS-CA-RETURN-CODE
|
||||
" MSG=" WS-CA-MESSAGE.
|
||||
|
||||
STOP RUN.
|
||||
Reference in New Issue
Block a user