Академический Документы
Профессиональный Документы
Культура Документы
control system
Sridhar Babu Purama
Topics to be covered
- Introduction to CICS
- Task & Transaction
- Batch Vs Online Processing
- Steps involved in developing a CICS program
- Ways to initiate a transaction
- CICS Control tables
- BMS Macros
- CICS Setup process
Introduction to CICS
CICS (Customer Information Control System)
CICS is used for developing Online applications on Mainframes.
CICS itself acts as an Operating System under z/OS.
z/OS
CICS
P1
P2
P3
P4
P5
Introduction to CICS
CICS supports both multitasking and multithreading.
Multitasking : Executing different programs simultaneously is
Multitasking.
Multithreading : Executing different programs simultaneously and copies
of the same program simultaneously is Multithreading.
z/OS
CICS
P1
P2
P3
P1
P1
ONLINE
1. No User Interaction.
2. No CICS is used.
3. Batch processing is fast as there is no
user interaction.
4. Batch programs are compiled using
JCL.
5. Batch programs are executed using
JCL.
6. Eg : Payroll, Business Analysis &
Reporting application.
PCT
TR01 PROG1
TR02 PROG2
TR03 PROG3
PPT
PROG1
PROG2
FSSADM.CICS.LOADLIB
FSSADM.CICS.LOADLIB
FSS142.ACCTS.FILE
FSS146.POL.FILE
USER ID :
PASSWORD :
ENTER:LOGIN
FCT
ACCTFL
POLFL
LIC
RCT
PROG1
PROG2
PROG3
PLN1
PLN1
PLN1
ICIMP1
DFHMDI
BMS Macros
TYPE : It specifies the type of map to be generated.
TYPE=MAP
Only Physical map is generated.
TYPE=DSECT Only Symbolic map is generated.
TYPE=&SYSPARM
Both Physical & Symbolic maps are generated.
BMS Macros
MODE : It specifies the type of usage of map.
MODE=INOUT
MODE=IN
MODE=OUT
STORAGE=AUTO
It will allocate separate memories for each map in the mapset. This will
avoid any overlapping of maps.
LANG
It specifies the programming language with which the map can be used.
BMS Macros
INITIAL
LENGTH
Symbolic Map
01 ICIMP1I.
02 FILLER
PIC X(12).
02 UIDL
PIC S9(4) COMP.
02 UIDF
PIC X.
02 FILLER
REDEFINES UIDF.
03 UIDA
PIC X.
02 UIDI
PIC X(10).
02 PWDL
PIC S9(4) COMP.
02 PWDF
PIC X.
02 FILLER
REDEFINES PWDF.
03 PWDA
PIC X.
02 PWDI
PIC X(10).
02 ERRMSGL
PIC S9(4) COMP.
02 ERRMSGF
PIC X.
02 FILLER
REDEFINES ERRMSGF.
03 ERRMSGA
PIC X.
02 ERRMSGI
PIC X(50).
01 ICIMP1O
REDEFINES ICIMP1I.
02 FILLER
PIC X(12).
02 FILLER
PIC X(3).
02 UIDO
PIC X(10).
02 FILLER
PIC X(3).
02 PWDO
PIC X(10).
02 FILLER
PIC X(3).
02 ERRMSGO
PIC X(50).
It is the length field which stores the count of characters entered by user in the field.
It is the flag field which is used to know whether user has entered data or not in the
It is the Attribute field which is used to dynamically change the attributes of a field.
It is the Input field which is used to receive the data from Map to program.
It is the Output field which is used to pass the data from program to map.
Topics to be covered
- SEND & RECEIVE commands
- DFHAID & EIBAID
- XCTL & LINK commands
- Accessing VSAM KSDS Files in CICS programs
- Cursor Positioning Techniques
- Exception Handling
- Queues TSQs & TDQs
- CICS Transactions
- CICS program compilation process
COMMAREA
It is the communication area between COBOL and CICS.
It is used to pass data between two CICS programs. We can pass a maximum of 32K
data.
While using pseudo-conversation, data keyed in by the user is initially held in
COMMAREA.
COMMAREA is used in the program as follows :
DATA DIVISION.
LINKAGE SECTION.
01 DFHCOMMAREA
PIC X(100).
EIBCALEN (Exec Interface Block Communication Area Length) : EIBCALEN is used to
know whether user has entered data on the map or not. It stores the count of characters.
If EIBCALEN = 0, it indicates user has NOT entered data on the map.
If EIBCALEN > 0, it indicates user has entered data on the map.
IDENTIFICATION DIVISION.
PROGRAM-ID. LOGPGM.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-COMMAREA PIC X(8) VALUE 'LOGIN1'.
COPY DFHAID.
COPY HDFCMST.
EXEC SQL
INCLUDE SQLCA
END-EXEC.
EXEC SQL
INCLUDE LTAB
END-EXEC.
LINKAGE SECTION.
01 DFHCOMMAREA
PIC X(100).
PROCEDURE DIVISION.
MAIN-PARA.
IF EIBCALEN = 0
MOVE LOW-VALUES TO HDFCMP1I,
HDFCMPIO
PERFORM 1500-SEND-HDFCMPI
ELSE
PERFORM 3000-PROCESS-PARA
END-IF.
EXEC CICS
RETURN
TRANSID('HD01')
COMMAREA(WS-COMMAREA)
END-EXEC.
1500-SEND-HDFCMPI.
EXEC CICS
SEND MAP('HDFCMPI')
MAPSET('HDFCMST')
END-EXEC.
2000-RECEIVE-PARA.
EXEC CICS
RECEIVE
MAP('HDFCMPI')
MAPSET('HDFCMST')
INTO(HDFCMP1I)
END-EXEC.
3000-PROCESS-PARA.
EVALUATE EIBAID
WHEN DFHENTER
PERFORM 2000-RECEIVE-PARA
PERFORM 3500-VALIDATE-PARA
WHEN DFHPF5
MOVE LOW-VALUES TO HDFCMPII
PERFORM 1500-SEND-HDFCMPI
WHEN OTHER
MOVE 'INVALID KEYPRESSED' TO ERRMSGO
PERFORM 1500-SEND-HDFCMPI
END-EVALUATE.
3500-VALIDATE-PARA.
MOVE
UIDI TO
HV-UID.
EXEC SQL
SELECT PASSWORD INTO :HV-PASSWORD
FROM LTAB
WHERE UID = :HV-UID
END-EXEC.
EVALUATE SQLCODE
WHEN 0
IF PWDI = HV-PASSWORD
MOVE LOW-VALUES TO ERRMSGO
PERFORM 1500-SEND-HDFCMPI
EXEC CICS
XCTL PROGRAM('HDFCP02')
END-EXEC
ELSE
MOVE 'INVLALID PASSWORD ENTERED'
TO ERRMSGO
PERFORM 1500-SEND-HDFCMPI
END-IF
WHEN 100
MOVE 'INVALID USER ID ENTERED' TO
ERRMSGO
PERFORM 1500-SEND-HDFCMPI
END-EVALUATE.
PIC
PIC
PIC
PIC
PIC
----------------
VALUE ?.
VALUE /.
VALUE ;.
VALUE ).
VALUE ,.
EIBAID holds the function key information which User has pressed.
Suppose, User presses ENTER key, then ? is stored in EIBAID.
EVALUATE EIBAID
WHEN ENTER
PERFORM - - - - WHEN DFHPF1
PERFORM - - - - -
SEND Command
EXEC CICS
SEND MAP(ICIMP1)
MAPSET(ICIMST1)
END-EXEC.
SEND Command
EXEC CICS
SEND MAP(ICIMP1)
MAPSET(ICIMST1)
ERASE/ERASEUP
ALARM
END-EXEC.
ERASE will clear the CICS screen before sending the map
ERASEAUP will clear the fields before sending the map
ALARM will give a beep sound once the map is displayed.
RECEIVE Command
RECEIVE command is used to receive the data from map into INPUT variables of the
map.
EXEC CICS
RECEIVE MAP(ICIMP1)
MAPSET(ICIMST1)
INTO(ICIMP1I)
END-EXEC.
RECEIVE command executes successfully when all the fields MDT value is turned to
ON or set to 1.
If any of the fields MDT is still OFF or 0, then it abends with MAPFAIL.
Cursor Positioning
Techniques
DFHMDF
Note 1 : Each time map is displayed cursor is always positioned at the same field
where IC is specified.
Note 2 : When IC is NOT specified, then cursor is positioned at the 1st byte in the
map.
Note 3 : When IC is specified for more than one field, then cursor is positioned at the
last UNPROT and IC specified field.
TO ERRMSGO
TO ERRMSGO
Reading records
sequentially
9100-ENDFILE-PARA.
MOVE Y TO WS-EOF.
Reading records
sequentially
9100-ENDFILE-PARA.
MOVE Y TO WS-EOF.
Updating a record
EXEC CICS
READ FILE(ACCTFL)
RIDFLD(ACCT-NUM)
INTO(ACCT-REC)
LENGTH(90)
UPDATE
END-EXEC.
Deleting a record
EXEC CICS
DELETE FILE(ACCTFL)
RIDFLD(ACCT-NUM)
END-EXEC.
ID DIVISION.
PROGRAM-ID. HDFCP03.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY DFHAID.
COPY HDFCMP3.
01 WS-COMMAREA.
03 FILLER
PIC X(50).
03 WS-COMM-PGM-ID PIC X(10).
03 WS-COMM-POL-NUM
PIC X(20).
03 WS-COMM-ERRMSG
PIC X(50).
LINKAGE SECTION.
01 DFHCOMMAREA
PIC X(130).
PROCEDURE DIVISION.
MAIN-PARA.
IF EIBCALEN = 0
PERFORM 1500-SEND-HDFCMP3
ELSE
MOVE DFHCOMMAREA TO WSCOMMAREA
IF WS-COMM-PGM-ID = HDFCP04'
ID DIVISION.
PROGRAM-ID. HDFCP04
DATA DIVISION.
WORKING-STORAGE SECTION.
01 POL-REC.
03 POL-NUM
WHEN DFHRESP(NOTFND)
PIC X(10).
03 POL-HLDR-NAME
PIC X(20).
03 POL-AMT
PIC 9(15).
COPY DFHAID.
COPY HDFCMP4.
01 WS-COMMAREA.
03 FILLER
PIC X(50).
EVALUATE EIBAID
03 WS-COMM-PGM-ID
PIC X(10).
03 WS-COMM-POL-NUM
PIC X(20).
03 WS-COMM-ERRMSG
PIC X(50).
WHEN DFHPF3
EXEC CICS
XCTL PROGRAM(HDFCP03')
LINKAGE SECTION.
END-EXEC
01 DFHCOMMAREA
PIC X(130).
WHEN DFHPF12
PROCEDURE DIVISION.
MAIN-PARA.
EXEC CICS
MOVE DFHCOMMAREA TO WSXCTL PROGRAM(HDFCP01')
ELSE
COMMAREA.
IF WS-COMM-PGM-ID = HDFCP03'
PERFORM 3000-PROCESS-PARA
END-EXEC
MOVE SPACES TO WS-COMM-PGM-ID WHEN OTHER
PERFORM 2500-RETRIEVE-POL-DET
END-IF
END-IF.
ELSE
MOVE 'INVALID KEY PRESSED' TO
EXEC CICS
PERFORM 3000-PROCESS-PARA
ERRMS3O
RETURN
END-IF.
PERFORM 1500-SEND-HDFCMP4
TRANSID(HDO3')
EXEC CICS
COMMAREA(WS-COMMAREA)
RETURN
END-EVALUATE.
END-EXEC.
TRANSID(HDO4')
3000-PROCESS-PARA.
COMMAREA(WS-COMMAREA)
EVALUATE EIBAID
END-EXEC.
2500-RETRIEVE-POL-DET.
WHEN DFHENTER
MOVE WS-COMM-POL-NUM TO POLPERFORM 2000-RECEIVE-HDFCMP3
NUM.
MOVE POLNUMI TO WS-COMMEXEC CICS
MOVE WS-COMM-ERRMSG TO
ERRMSGO
PERFORM 1500-SEND-HDFCMP3
Queues
Queue is a storage area similar to file in storing records.
A Queue is identified using a Queue ID, which can be of maximum 8 characters long.
Queues are of two types :
1. TSQ (Temporary Storage Queue)
2. TDQ (Transient Data Queue)
TSQ Vs TDQ
TSQ
1. Records are stored based on Item
number.
2. Records can be accessed
sequentially and randomly.
3. Records can be read multiple times.
4. TSQs are registered in TST
(Temporary Storage Table).
1.
2.
3.
4.
TDQ
Records are stored without Item
number.
Records can be accessed only
sequentially.
Records can be read only once as
the record gets deleted once it is
read.
TDQs are registered in DCT
(Destination Control Table).
TSQ Vs TDQ
Writing records into TSQ
MOVE 1 TO WS-ITEM-NUM.
EXEC CICS
WRITEQ TS
QUEUE(QID001)
ITEM(WS-ITEM-NUM)
FROM(WS-TSQ-REC)
END-EXEC.
Deleting TSQ :
EXEC CICS
DELETEQ TS
QUEUE(QID001)
END-EXEC.
Deleting TDQ :
EXEC CICS
DELETEQ TD
QUEUE(QID001)
END-EXEC.
TDQs
TDQs are of two types :
1. Intra Partitioned TDQ.
2. Extra Partitioned TDQ.
Intra : These TDQs can be used in only one and in the same CICS region.
Extra : These TDQs can be used in more than one CICS regions and outside CICS
also.
DCT Entry for a TDQ :
DFHDCT TYPE=INTRA / EXTRA
QUEUE=QID001
TRGLEV=30
TRANSID=TR03
ATI (Automatic Transaction Initiation) :
When the Trigger level specified is reached, then the Transaction ID specified is
automatically initiated.
Handling exceptions in
CICS
When CICS cannot successfully process
a statement, it throws an exception.
We can handle exceptions in two ways :
1. Using HANDLE CONDITION.
2. Using RESP
HANDLE CONDITION :
It is used to handle exceptions in CICS.
HANDLE CONDITION must be specified before the CICS command.
Eg :
EXEC CICS
HANDLE CONDITION
NOTFND(9100-NOTFND-PARA)
NOTAUTH(9200-NOTAUTH-PARA)
END-EXEC.
EXEC CICS
READ FILE(POL-FILE)
RIDFLD(POL-NUM)
INTO(POL-REC)
END-EXEC.
9100-NOTFND-PARA.
MOVE INVALID POLICY NUMBER TO ERRMSGO
PERFORM 1500-SEND-ICIMP1
9200-NOTAUTH-PARA.
MOVE YOU DO NOT HAVE AUTHORIZATION TO ERRMSGO
PERFORM 1500-SEND-ICIMP1
RESP :
It is used to handle exceptions in CICS.
RESP must be specified after the CICS command.
Eg :
EXEC CICS
READ FILE(POL-FILE)
RIDFLD(POL-NUM)
INTO(POL-REC)
LENGTH(90)
END-EXEC.
EVALUATE EIBRESP
WHEN DFHRESP(NORMAL)
EXEC CICS
XCTL PROGRAM(PROG4)
END-EXEC
WHEN DFHRESP(NOTFND)
MOVE INVALID POLICY NUMBER TO ERRMSGO
PERFORM 1500-SEND-ICIMP1
WHEN DFHRESP(NOTAUTH)
MOVE YOU DO NOT HAVE AUTHORIZATION TO ERRMSGO
PERFORM 1500-SEND-ICIMP1
END-EVALUATE.
RESP :
It is used to handle exceptions in CICS.
RESP must be specified after the CICS command.
Eg :
EXEC CICS
READ FILE(POL-FILE)
RIDFLD(POL-NUM)
INTO(POL-REC)
LENGTH(90)
RESP(WS-RESP)
END-EXEC.
EVALUATE WS-RESP
WHEN DFHRESP(NORMAL)
EXEC CICS
XCTL PROGRAM(PROG4)
END-EXEC
WHEN DFHRESP(NOTFND)
MOVE INVALID POLICY NUMBER TO ERRMSGO
PERFORM 1500-SEND-ICIMP1
WHEN DFHRESP(NOTAUTH)
MOVE YOU DO NOT HAVE AUTHORIZATION TO ERRMSGO
PERFORM 1500-SEND-ICIMP1
END-EVALUATE.
RESPONSE CODES
General Response Codes that can be generated :
NORMAL
- Successful execution and record found
NOTAUTH(AEY7) - User does not have authorization
NOTFND(AEIM)
- Record not found
ENDFILE(AEXK) - End of the file reached
PGMIDERR(AEI0) - Program/Map name is incorrect (Not found in PPT)
TRNIDERR(AEI1) - Transaction ID is incorrect (Not found in PCT)
MAPFAIL
- When any of the fields MDT is still zero, the RECEIVE
command fails with MAPFAIL abend
LENGERR(AEIV) - Record length of file and specified length do not match
DUPREC(AEIN)
- Duplicate record as key field already exists
INVREQ(AEIP)
- Trying to write a record without WRITE access
QIDERR(AEYH)
- Queue ID specified is incorrect
IC01
SEND MAP
-----------
EDF MODE ON
RETURN
TRANS(IC01)
-----------
ICICI
USER ID
:
PASSWORD :
ENTER: LOGIN