Você está na página 1de 54

COBOL Considerations

Identification Division.
No differences

Environment Division
MUST be EMPTY in CICS Program! No SELECT statements allowed!

Data Division
No FILE SECTION (No SELECTS)

CICS-Prg

COBOL Considerations (More)


Data Division
WORKING-STORAGE SECTION.
Switches, Flags, Variables, Records, etc. You get fresh copy each time program loaded!

LINKAGE SECTION (New Item!!)


DFHCOMMAREA defined or CICS will! Used to receive data from CICS. CICS also inserts EIB Block definition

CICS-Prg

COBOL Considerations (More)


Procedure Division
Uses most COBOL statements Also uses CICS Commands like:
RETURN XCTL SEND MAP RECEIVE MAP READ DATASET

CICS-Prg

Where are WE?


Program must be able to determine! Always starts at beginning of Program Starts with initialized Working-Storage Can use several methods:
EIBCALEN (First time program loaded) COMMAREA (Tran-ID, EIBAID) Hidden Data on Screen
CICS-Prg 4

Where are We? (More)


Beginning of Program must determine! Can use series of IF statements
Can be nested (or not if careful!) Usually each path ends with RETURN

Can use EVALUATE statement


EVALUATE TRUE most common (New Dev) General WHEN OTHER for errors

CICS-Prg

Sample CICS COBOL Program


WORKING-STORAGE SECTION.
Switches, Flags, and Misc Variables COMMUNICATION-AREA (Your copy!) RESPONSE-CODE PIC S9(08) COMP. RECORD Descriptions COPY Library for MAP Other COPY Members as needed
CICS-Prg 6

Sample CICS COBOL Program


LINKAGE SECTION.
DFHCOMMAREA PIC X(nnn).

If you dont code it, CICS Will! The commarea (if any) placed here! EIBCALEN gives length of commarea 0 (ZERO) means there is NO commarea

CICS-Prg

Sample CICS COBOL Program


PROCEDURE DIVISION (Where are we?)
IF first-time SEND Initial-Map ELSE IF <ENTER> Process Screen ELSE Process Function-Key END-IF END-IF SEND MAP
CICS-Prg 8

Sample CICS COBOL Program


PROCEDURE DIVISION
EVALUATE TRUE WHEN EIBCALEN = 0 First time in Program WHEN EIBAID = DFHENTER Process Screen WHEN EIBAID = DFHPF3 or DFHPF12 Exit Program WHEN OTHER Invalid key END-EVALUATE
CICS-Prg 9

Basic CICS Commands


General Structure:
EXEC CICS CICS COMMAND OPTION(value) (Parameters as needed) END-EXEC

CICS-Prg

10

Basic CICS Commands


EXEC CICS RETURN [ TRANSID(name) ] [ COMMAREA(data-area) ] [ LENGTH(data-value) ] END-EXEC Length PIC S9(4) COMP or Literal

CICS-Prg

11

Basic CICS Commands


EXEC CICS XCTL PROGRAM(name) [ COMMAREA(data-area) ] [ LENGTH(data-value) ]

END-EXEC

CICS-Prg

12

Basic CICS Commands


EXEC CICS SEND MAP(name) [ MAPSET(name) ] [ FROM(data-area) ] [ MAPONLY | DATAONLY ] [ ERASE | ERASEUP ] [ CURSOR [ (value) ] ]

END-EXEC
CICS-Prg 13

Basic CICS Commands


EXEC CICS RECEIVE MAP(map-name) [ MAPSET(mapset-name) ] INTO(data-area)

END-EXEC

CICS-Prg

14

Basic CICS Commands


EXEC CICS READ DATASET(filename) INTO(data-area) RIDFLD(data-area) [ RRN | RBA ] [ UPDATE ]

END-EXEC
CICS-Prg 15

Basic CICS Commands


EXEC CICS ABEND [ ABCODE(name) ] END-EXEC (ABCODE used to identify storage dump Usually omitted!)

CICS-Prg

16

CICS Program Design


Event-driven design Structure Chart - Consider All Functions Identify Events and Context
Any action that starts program List All (Valid) Possible User Actions

Design Appropriate Response


Processing required for an event Managing user interaction
CICS-Prg 17

CICS Program Design


COMMAREA usually stores context
Get Key Add Customer Change Customer Delete Customer

Response to same key can be different depending on context (ENTER key)

CICS-Prg

18

CICS Program Design


Event/Response Chart
Helps with design or Program Serves as Documentation of Program Sometimes replaced with Structure Chart

Structure Chart Evolves into Design


Start with Major Functions Add Detail as Needed Assign Paragraph Numbering (If Used)
CICS-Prg 19

More CICS Commands


EXEC CICS WRITE DATASET(filename) FROM(data-area) RIDFLD(data-area) [ RRN | RBA ]

END-EXEC

CICS-Prg

20

More CICS Commands


EXEC CICS REWRITE DATASET(filename) FROM(data-area)

END-EXEC NOTES: Record MUST be READ with UPDATE! data-area - NOT have to match Read
CICS-Prg 21

More CICS Commands


EXEC CICS DELETE DATASET(filename) [ RIDFLD(data-area) ] [ RRN | RBA ]

END-EXEC NOTE: If no RIDFLD last READ is Deleted

CICS-Prg

22

More CICS Commands


EXEC CICS UNLOCK DATASET(filename) END-EXEC NOTE: If READ/UPDATE command is used and you determine that record does not need to be updated. Usually not needed as record is unlocked when the task is terminated.

CICS-Prg

23

Exception Conditions
Most Common Exceptions:
DISABLED DUPREC FILENOTFND INVREQ IOERR NOTAUTH NOTFND Dataset disabled Record already exists Dataset not in FCT Invalid request File I/O error User not authorized Record not in file

CICS-Prg

24

Checking for Exceptions


ALL CICS Commands allow RESP Parm 01 RESP-CODE PIC S9(8) COMP.
IF RESP-CODE = DFHRESP(NORMAL) MOVE Y TO OK-COMMAND ELSE IF RESP-CODE = DFHRESP(NOTFND) MOVE N TO REC-NOT-FOUND ELSE PERFORM DISPLAY-MISC-ERROR END-IF END-IF
CICS-Prg 25

Preventing File Corruption


PREVENT
Add busy flag in record (Special Maint) All programs MUST follow procedure Extra I/O required (to Set/Reset flag)

DETECT
Save copy and compare before updating OR Add Maint-Timestamp and check it Notify User to get latest version of data

CICS-Prg

26

Avoiding Deadlock
Sometimes called Deadly Embrace Happens when records from multiple files must be updated as a unit
Withdraw from Savings Deposit to Check Crash after withdraw? Wheres money?

Must both be done or neither! (Atomic)

CICS-Prg

27

Program Control Commands


EXEC CICS RETURN [ TRANSID(name) ] [ COMMAREA(data-area) ] [ LENGTH(data-value) ] END-EXEC

CICS-Prg

28

Program Control Commands


EXEC CICS LINK PROGRAM(name) [ COMMAREA(data-area) ] [ LENGTH(data-value) ]

END-EXEC NOTE: Program name must be in PPT. Works like COBOL PERFORM statement.
CICS-Prg 29

Program Control Commands


EXEC CICS XCTL PROGRAM(name) [ COMMAREA(data-area) ] [ LENGTH(data-value) ]

END-EXEC NOTE: Program name must be in PPT.

CICS-Prg

30

Terminal Handling
CURSOR Positioning (in SEND MAP)
IC option in DFHMDF Macro (ATTRB Parm)
If more than one LAST position is used.

DIRECT Cursor Positioning


CURSOR(nnn) where nnn is position on screen Displacement from start of the screen ( Row 1 ) * 80 + ( Column 1 ) 0 is Row 1, Column 1 1919 is Row 24, Column 80 (24 by 80 Screen) Changes in screen require changes to program

(Not used much - too complex!)

CICS-Prg

31

Terminal Handling (More)


CURSOR Positioning (in SEND MAP)
Symbolic Cursor Positioning (Preferred!)
CURSOR with no position parameter! Specify the FIELD where the CURSOR goes Place 1 in the LENGTH Attribute of the field where the cursor is to be placed FIELD NAME with L appended is LENGTH If more than one FIRST position is used. BINARY HALFWORD - PIC S9(04) COMP.

CICS-Prg

32

Terminal Handling (More yet)


Determining the position of CURSOR when the user types an AID key.
EIBCPOSN in EIB Block (binary halfword) READ only-Available before RECEIVE MAP Can be used to determine user selection instead of requiring user to enter character

CICS-Prg

33

Attribute Modification
Symbolic Map includes Attribute byte Field Name with A appended Cryptic bit codes and names used Copy library supplied by IBM (Horrible) Most shops have their own copy book We dont have extended attributes!

CICS-Prg

34

Editing Input Data


All data entered should be validated Required data must be present Numeric data needs to be normalized Alpha data should not be spaces Meaningful error messages displayed Very tedious coding required! Do checking from bottom to top!
CICS-Prg 35

Misc CICS Commands


EXEC CICS SEND TEXT FROM(data-area) [ LENGTH(data-value) ] [ ERASE ] [ FREEKB] END-EXEC NOTE: No FREEKB user must hit RESET!
CICS-Prg 36

Misc CICS Commands


EXEC CICS HANDLE AID option(procedure name) END-EXEC

CICS-Prg

37

Misc CICS Commands


HANDLE AID Options:
PA1-PA3 PF1-PF24 ENTER CLEAR ANYKEY Program Attention Keys Program Function Keys The ENTER Key The CLEAR Key Any key not Specified (Except the ENTER key)

CICS-Prg

38

Handle AID Example (Old)


EXEC CICS HANDLE AID PF3(900-MENU) CLEAR(850-CLEAR) ENTER(700-ENTER) ANYKEY(750-ERROR)

END-EXEC NOTE: HANDLE AID sets up RECEIVE MAP! Not executed when encountered! In OLD Progs.
CICS-Prg 39

Error Processing
There are over 70 CICS error Conditions Mercifully only a few are handled TWO Methods of handling exceptions:
HANDLE CONDITION (Old Method)
Similar in function to HANDLE AID

RESPONSE Code checking


Allows cleaner program structure

CICS-Prg

40

Strange Exception - MAPFAIL


MAPFAIL Condition
Raised by RECEIVE MAP with no data
User entered no data but pressed AID key User pressed CLEAR key or PA key

Simplest to PREVENT it from occurring


Check EIBAID to see what key was pressed Dont issue RECEIVE MAP if PA or CLEAR hit Include DUMMY field with MDT set ON

CICS-Prg

41

HANDLE CONDITION (Old!)


EXEC CICS HANDLE CONDITION condition(procedure-name) condition(procedure-name) up to 16 per statement END-EXEC

CICS-Prg

42

HANDLE CONDITION
Common CONDITIONS
DUPREC Record already exists MAPFAIL No data sent by user NOSPACE No space left in file NOTOPEN Data set not OPEN NOTFND Record not in file PGMIDERR Program not in PPT ERROR ALL conditions not coded

CICS-Prg

43

HANDLE CONDITION Example


EXEC CICS HANDLE CONDITION MAPFAIL(500-NO-DATA) DUPREC(600-DUPLICATE) NOTOPEN END-EXEC NOTE: Condition by itself will nullify it!
CICS-Prg 44

HANDLE CONDITION (Notes)


Not an executable command Establishes paragraph to correct error Can issue multiple times Last one executed is in effect Causes GO TO to paragraph named Done BEFORE CICS Command executed OLD method of coding AVOID!
CICS-Prg 45

RESPONSE CHECKING (NEW!)


ADD RESP option to CICS Command Define binary fullword PIC S9(8) COMP Name that field in each RESP option COPY of EIBRESP from EIB EIBRESP2 (RESP2) also available
Not many CICS Commands use it Seldom needed as RESP is usually enough

CICS-Prg

46

USE General ERROR Handling


Most shops have a standard error handling method If not, use sample linkage on Page 255 Sample program is on Page 257 Called whenever a condition is not handled in the program Displays error to user and terminates

CICS-Prg

47

LINKAGE SECTION
Used to access data left by previous execution of a program Data should be moved to your W/S! Each execution starts with initial W/S Define COMMAREA in Working-Storage DEFINE DFHCOMMAREA in Linkage RETURN references Working-Storage
CICS-Prg 48

Executive Interface Block


EIB definition added by CICS Compiler In Linkage Section after DFHCOMMAREA Contains several useful fields
EIBCALEN, EIBAID, EIBCPOSN, EIBDATE, EIBTIME, EIBTRNID, EIBTRMID, EIBRSRCE

Most kept current by CICS (Page 212) You can update a few of them-EIBTRNID
CICS-Prg

49

EIB Useful Fields


EIBCALEN EIBAID EIBCPOSN EIBDATE EIBTIME EIBTRNID EIBTRMID EIBRSRCE EIBDS Length of COMMAREA Current AID Key pressed Position of CURSOR Task DATE (00YYDDD) Task Time (0HHMMSS) Transaction of Task Terminal ID of Task Recently used Resource Name Recently accessed Data Set
CICS-Prg 50

DEBUGGING EIB FIELDS


EIBFN EIBRESP EIBRESP2 EIBRCODE EIBRSRCE
MAP PRG CTL FILE CTL

Last CICS Command Completion Status More Completion Status Response Code (OLD) Recent Resource Name
Map Name Program Name Data Set Name
CICS-Prg 51

Access to Heavy Stuff


CWA CSA TWA TCTUA Common Work Area
Installation defined (Sometimes handy)

Common System Area Transaction Work Area Terminal Control Table User Area Must establish Addressability if needed
CICS-Prg 52

Infrequently Needed Stuff


EXEC CICS ADDRESS CWA(pointer) [ CSA(pointer) ] [ TWA(pointer) ] [ TCTUA(pointer) ] END-EXEC

CICS-Prg

53

Infrequently Needed Stuff


EXEC CICS ADDRESS CWA(ADDRESS OF CWA) END-EXEC NOTE: Holdovers from MACRO-Level CICS Seldom needed any more!

CICS-Prg

54

Você também pode gostar