The END Statement

END closes a “block”, i.e. a group of logically-related statements. 

Format:

END statement-keyword [File-Name] {[UPDATE] | [ADD] | [REWRITE]} [RESETFUNCTION]

      [UNTIL (condition)];

 

For example: -

PROCESS File1 WHERE (File1.Balance > 1000);

    PRINT (File1.Name, File1.Balance);

END PROCESS File1;

 

Jazz checks that the END is correctly matched: for example END IF must follow an unclosed IF statement. Code like this is incorrect and will produce error messages: -

PROCESS File1 WHERE (File1.Balance > 1000);

    PRINT (File1.Name, File1.Balance);

    IF File1.Previous-Balance > File1.Balance THEN;

        PRINT (‘Customer is loosing money’);

END PROCESS File1;

 

The File-Name is not given if the END closes IF, CASE, or FOR, i.e. a statement that is not associated with a particular file. It is required when END closes a PROCESS or GET block.

 

UNTIL is only valid with END FOR and END PROCESS statements. Refer to the FOR Statement to find out about this option.

 

UPDATE, ADD, or REWRITE may be given when the END statement closes a GET block, and the GET statement has an UPDATE option. Refer to the GET statement for a description of how these options work.

 

UPDATE is also valid with an END PROCESS statement, but only when the input file has type VSAM or SQL.

RESETFUNCTION

Following the GET for enquiry a program typically sets the next function to U/Update if the record was found, A/Add if not, and sets the message field to tell the user what do to.  There is similar code setting the next function and a message for the Update, Add, and Delete cases.   This requires a few lines of Jazz logic after the END GET statement for each case.  With RESETFUNCTION Jazz will write standard logic for you: -

*# Last Updated by JAZZUSER at 30/04/2018 4:01:35 p.m.

PROGRAM CICS2 CICS INSCREEN(CICS2S) TRANSID(TRN2) COMMAREA(CICS2C) EXIT(menu1);

ACCEPT (CICS2S.Function);

#562 I CICS2S.Error used as message field

CASE (CICS2C.Function);

    WHEN (Enquiry);

        ACCEPT (CICS2S.Account OR CICS2S.Name);

        #562 I CICS2S.Error used as message field

        DEFINE TS1 TS DATA(

            Account LIKE CustF.Account);

        GET Custf KEY(CustF.Account OR CustF.Name) SAVECOPY CICS2C.SAVE TS(1);

            #373 I GET statement returns one record at a time for Name

        END GET Custf RESETFUNCTION;

    WHEN (Update);

        GET Custf WHERE(CustF.Account=CICS2C.SAVE.Account) REWRITE CHECKCOPY(CICS2C.SAVE);

            COPY JZSMth;

            COPY JZMDays;

            COPY JZDTVS;

            ACCEPT (CICS2S.Region,CICS2S.District,CICS2S.Name,CICS2S.SalesThisMonth,CICS2S.SalesYTD,CICS2S.Billingcycle,

                   CICS2S.DateCommenced);

            #562 I CICS2S.Error used as message field

        END GET Custf REWRITE RESETFUNCTION;

    WHEN (Add);

        CustF.Account = CustF.$LastKey + 1; [Will need to be changed if key is not a number

        #361 E Assignment to a key field

        GET Custf KEY(CustF.Account) CREATE;

            ACCEPT (CICS2S.Region,CICS2S.District,CICS2S.Name,CICS2S.SalesThisMonth,CICS2S.SalesYTD,CICS2S.Billingcycle,

                   CICS2S.DateCommenced) SETMDT;

            #562 I CICS2S.Error used as message field

        END GET Custf CREATE RESETFUNCTION;

    WHEN (Delete);

        DELETE Custf WHERE(CustF.Account=CICS2C.SAVE.Account) CHECKCOPY(CICS2C.SAVE) RESETFUNCTION;

END CASE;

SEND Inscreen;

 

The RESETFUNCTION option is only valid in classical CICS programs. The PROGRAM statement must name the input screen with INSCREEN, and this screen must contain a message field called “Error” in the screen, and a field called “Function” in the Commarea defined like this: -

DEFINE CICS2C TYPE(COMMAREA) DATA(

    Function CHAR(1) CODES (E:Enquiry,U:Update,A:Add,D:Delete) VALUE 'E',

 

For Function E:Enquiry
            If the record is found then Error is set to “Record Found. Use Function U to update it”.  Function is not automatically reset.

If the record is not found then Error is set to “Record not found. Use Function A to add it”, and Function is set to “A”

For Function U:Update 

Error is set to “Record Updated”, Function is set to “E”

For Function A:Add

Error is set to “Record Added”, Function is set to “E”

For Function D:Delete

            Error is set to “Record Deleted”, Function is set to “E”