This exit DATEFBE processes a date field defined as PIC S9(9) COMP-3. There are 6 significant digits in the date, which has a picture string of YYMMDD.
Without the exit, CICS® VT would assume that the first byte of the field contains a valid value. For example, a field value of X'000081231C' would be converted incorrectly to a DB2® date value of 2000-08-12.
To build a DB2 value, this exit strips off the first byte, and then calls the CICS VT built-in conversion routine PACKDATE to convert to a DB2 date value. To build a VSAM field value, the exits calls the DATEPACK built-in conversion routine.
The parameter list that the exit passes to the built-in conversion routine includes the picture field Y5MMDD to exploit date windowing. This means that YY values greater than or equal to 50 become 19nn-MM-DD in DB2. Year values less than 50 become 20nn-MM-DD.
CBL LIB
IDENTIFICATION DIVISION.
PROGRAM-ID. DATEFBE.
*
* THIS EXIT PROCESSES A PIC S9(9) COMP-3 DATE FIELD THAT HAS
* 6 SIGNIFICANT DIGITS (YYMMDD). VT WILL PROCESS THIS FIELD
* FROM LEFT TO RIGHT, SO A FIELD VALUE OF X'000081231C' WOULD BE
* ERRONEOUSLY CONVERTED TO 2000-08-12 IN DB2.
*
* THE EXIT STRIPS THE FIRST BYTE AND THEN CALLS VIDCONV TO
* CONVERT THE PACKED DECIMAL VALUE TO A DB2 DATA VALUE. IT ALSO
* PERFORMS THE CONVERSION IN REVERSE.
*
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION .
01 VIDCONV PIC X(8) VALUE 'VIDCONV ' .
01 DB2-TO-VSAM-PARMLIST .
02 DB2-ROUTINE-NO PIC S9(8) COMP VALUE 49 .
02 DB2-SOURCE-FIELD PIC X(10) .
02 DB2-SOURCE-FIELD-LEN PIC S9(8) COMP VALUE 10.
02 DB2-SPICTURE-FIELD PIC S9(8) COMP VALUE 0.
02 DB2-DEST-FIELD PIC S9(9) COMP-3 .
02 DB2-DEST-FIELD-LEN PIC S9(8) COMP VALUE 5.
02 DB2-DPICTURE-FIELD-LEN PIC S9(8) COMP VALUE 6.
02 DB2-DPICTURE-FIELD PIC X(6) VALUE 'Y5MMDD'.
01 VSAM-TO-DB2-PARMLIST .
02 VS-ROUTINE-NO PIC S9(8) COMP VALUE 19.
02 VS-SOURCE-FIELD PIC S9(7) COMP-3 .
02 VS-SOURCE-FIELD-LEN PIC S9(8) COMP VALUE 4.
02 VS-SPICTURE-FIELD PIC X(6) VALUE 'Y5MMDD'.
02 VS-DEST-FIELD PIC X(10) .
02 VS-DEST-FIELD-LEN PIC S9(8) COMP VALUE 10.
02 VS-DPICTURE-FIELD PIC S9(8) COMP VALUE 0.
LINKAGE SECTION .
01 VSAM-FIELD PIC S9(9) COMP-3.
01 DB2-FIELD PIC X(10) .
COPY VIDFBEC .
PROCEDURE DIVISION USING VSAM-FIELD, DB2-FIELD, EXITPARMS .
MAIN-SECTION.
SET ADDRESS OF VSAM-FIELD TO EXVSAFLD.
SET ADDRESS OF DB2-FIELD TO EXDB2FLD.
EVALUATE EXFUNCT
WHEN 'D' PERFORM BUILD-DB2-FIELD
WHEN 'V' PERFORM BUILD-VSAM-FIELD
END-EVALUATE .
MAIN-SECTION-END.
GOBACK.
EXIT.
BUILD-VSAM-FIELD SECTION.
10-BUILD-VSAM-FIELD.
MOVE DB2-FIELD TO DB2-SOURCE-FIELD.
CALL VIDCONV USING DB2-ROUTINE-NO
DB2-SOURCE-FIELD
DB2-SOURCE-FIELD-LEN
DB2-SPICTURE-FIELD
DB2-DEST-FIELD
DB2-DEST-FIELD-LEN
DB2-DPICTURE-FIELD.
MOVE DB2-DEST-FIELD TO VSAM-FIELD.
10-BUILD-VSAM-FIELD-END.
EXIT.
BUILD-DB2-FIELD SECTION.
10-BUILD-DB2-FIELD.
MOVE VSAM-FIELD TO VS-SOURCE-FIELD.
CALL VIDCONV USING VS-ROUTINE-NO
VS-SOURCE-FIELD
VS-SOURCE-FIELD-LEN
VS-SPICTURE-FIELD
VS-DEST-FIELD
VS-DEST-FIELD-LEN
VS-DPICTURE-FIELD.
MOVE VS-DEST-FIELD TO DB2-FIELD.
10-BUILD-DB2-FIELD-END.
EXIT.
The exit illustrates how to call the VIDCONV utility, which is the CICS VT module that includes all of the built-in conversion routines shown in Built-in conversion routines. This is the standard parameter list to call VIDCONV in COBOL.
Not all parameters are used each time you call VIDCONV. For example, the 4th parameter specifies the picture for the source field. There must be a valid value for this parameter when the source field is VSAM. A value is not required if the source field is DB2.
The first byte of the VSAM field is stripped off by moving the PIC S9(9) COMP-3 field VSAM-FIELD in the linkage section to the working storage field VS-SOURCE-FIELD, which is defined as PIC S9(7) COMP-3. There are other techniques to do this in COBOL.
VIDCONV should always be invoked dynamically and must not be statically linked. You must include the CICS VT module VIDHIPLI in the linkage edit when an FBE calls VIDCONV.