Defining message tables using EQQJCCT

You can create message tables by assembling a message-table-definition file that consists of one or more invocations of the EQQJCCT assembler macro. The output of the assembly job is the message table. You should save this table in a JCC message-table library.

Syntax


1  EQQJCCT?  M =  ' message text '?  S = 
2.1! 1
2.1 start position?  T = 
2.1! NORMMSG
2.1 MULTSTA
2.1 MULTEND
2.1 MULT2STA
2.1 MULTMSG
2.1 SKIPSTA
2.1 SKIPEND
2.1  SKIP nnn
2.1 SKIPDS
2.1 ENDTAB?  CA = 
2.1! CONT
2.1 CHECK
2.1 ERROR
2.1 ESTOP
2.1 STOP?  EID = 
2.1! 
2.1 error code?  TID = 
2.1! 
2.1 tracking identifier

When coding the EQQJCCT macro, you must follow the IBM® assembler language syntax rules. These rules require that you delimit the macro name, EQQJCCT, by one or more blanks; that you place a continuation character (any non-blank character) in column 72 of any statement with a continuation line; and that you start continuation lines in column 16.

Parameters

M='message text'
Defines a character string that the JCC attempts to find in each SYSOUT record. The character string must be enclosed in quotation marks. The maximum size of the string is 51 bytes. The M keyword is required for all types except MULTEND or ENDTAB.
M-Example
 EQQJCCT M='IEF452I'
S=start position|1
Defines the position in the SYSOUT record of the first character of the message text character string. Valid values for start position are from 0 to 132. The value 0 indicates that the message text can appear anywhere in the first 132 positions in the SYSOUT record.
T=entry type|NORMMSG
Defines the message-table entry type. These entry types are supported:
NORMMSG
Normal entry type. Stop processing the current SYSOUT record when a match is found. Then read the next SYSOUT record and check it, starting over with the first message-table entry.
MULTSTA
Start of a sequence of related, multiple-condition table entries. It must be paired with a MULTEND statement.
MULTEND
Defines the last of a sequence of related table entries that was started by a MULTSTA entry.
MULT2STA
Defines an additional condition that must be fulfilled by a SYSOUT record matched by a MULTSTA entry. There can be only one MULT2STA entry for each MULTSTA entry.
MULTMSG
Defines an additional condition that must be fulfilled by a SYSOUT record matched by a MULTSTA entry. There can be several MULTMSG entries for each MULTSTA entry. If a MULT2STA entry has been defined, the SYSOUT record is treated as a match only if it fulfills all three conditions: MULTSTA, MULT2STA, and MULTMSG.
SKIPSTA
Start of a sequence of related skip-definition entries. Skipping means that a SYSOUT record is read but not checked. SKIPSTA must be followed by at least one SKIPEND statement.
SKIPEND
Defines when a forward skip that was started by a SKIPSTA entry should end. There can be several SKIPEND entries for each SKIPSTA entry. Skipping stops when a SYSOUT record is found that matches one of the SKIPEND entries.
SKIPnnn
Defines a forward skip of a fixed number of records. The number is specified as nnn in the SKIPnnn keyword. The number nnn must be 3 digits, 001 to 999.
SKIPDS
Defines a forward skip of the remaining records in the current SYSOUT data set.
ENDTAB
Defines how records that have not been matched by any preceding table entries should be handled. If specified, the ENDTAB entry must be the last entry in a message table definition.

Here are some examples of the T parameter:

T-Example 1
 EQQJCCT S=1,M='IEF375I'
Example 1 shows the default used for normal message entries.
T-Example 2
 EQQJCCT T=MULTSTA,S=1,M='IEF285I'      DEALLOCATION
 EQQJCCT T=MULTMSG,S=56,M='KEPT'
 EQQJCCT T=MULTMSG,S=56,M='DELETED'
 EQQJCCT T=MULTMSG,S=56,M='UNCATALOGED'
 EQQJCCT T=MULTEND

In Example 2, the SYSOUT line is scanned for IEF285I. If IEF285I is found, the SYSOUT line is scanned for KEPT, DELETED, and UNCATALOGED.

T-Example 3
 EQQJCCT T=MULTSTA,S=1,M='IEC501'       MOUNT
 EQQJCCT T=MULT2STA,S=0,M='PRIVAT'
 EQQJCCT T=MULTMSG,S=0,M='GDG',CA=ESTOP
 EQQJCCT T=MULTEND

In Example 3, the SYSOUT line is scanned for IEC501. If IEC501 is found, the SYSOUT line is also scanned for PRIVAT. If both IEC501 and PRIVAT are found, the SYSOUT line is scanned for GDG.

T-Example 4
 EQQJCCT S=49,T=SKIPSTA,M='J E S 2  J O B  L O G'
 EQQJCCT S=1,T=SKIPEND,M='ICH0001I'         (RACF LAST ACCESS)
 EQQJCCT S=20,T=SKIPEND,M='IEF452I',CA=STOP (JOB NOT RUN-JCL ERR)

In Example 4, when the JES2 log starts, checking of SYSOUT records is bypassed until ICH0001I or IEF452I is found in the SYSOUT line.

T-Example 5
 EQQJCCT S=49,T=SKIP007,M='J E S 2  J O B  L O G'

Example 5 shows how you can skip the next 7 records following a record containing J E S 2  J O B  L O G .

T-Example 6
 EQQJCCT T=ENDTAB,CA=CONT

In Example 6, a SYSOUT record that does not match any entries in the message table is accepted as normal.

T-Example 7
 EQQJCCT T=ENDTAB,CA=ESTOP

In Example 7, if a SYSOUT record does not match any entries in the message table, an error is generated.

CA=check action|CONT
Defines what action the JCC should take when a SYSOUT record is found that fulfills the conditions defined by the current table entry. These actions are supported:
CONT
Continue checking. Stop processing the current SYSOUT record (because it matches). Then read the next SYSOUT record and check it, starting again with the first message-table entry.
CHECK
Check the next table entry. In addition, check the current record against the next table entry.
ERROR
Error condition detected. Continue checking, but treat this job as having ended in error.
ESTOP
Error condition detected. Stop checking, and treat this job as having ended in error.
STOP
Stop checking. Stop processing the current SYSOUT record; read the remaining SYSOUT records, but do not check their contents.

Here are some examples of the CA parameter:

CA-Example 1
 EQQJCCT M='IEF287I',CA=ERROR,EID=5555
Example 1 shows how to flag a job as having ended in error, with an error code of 5555, if message IEF287I is issued by any step in the job.
CA-Example 2
 EQQJCCT M='B2 TABLE MISSING',CA=ESTOP,EID=1111
Example 2 is a specific job message. The JCC signals the error to HCL Workload Automation for Z and stops further checking of the message output of the job.
CA-Example 3
 EQQJCCT S=1,T=SKIPSTA,M='IDCAMS SYSTEM SERVICES'
 EQQJCCT S=1,T=SKIPEND,M='IDC0002I',CA=CHECK
 EQQJCCT S=57,T=NORMMSG,M='CODE WAS 16',CA=ERROR
In Example 3, skipping starts when IDCAMS SYSTEM SERVICES is found in the SYSOUT line. When IDC0002I is found in the SYSOUT record, skipping is stopped, and an error condition is indicated if this text is found in the SYSOUT line: CODE WAS 16.
EID=error code|    
Defines an error code to be used by HCL Workload Automation for Z job tracking. The error code is either a 4-digit decimal number or 3 hexadecimal digits preceded by the character X. The default error code is 4 blank characters. If there is no error code, the status of the job is not changed by the JCC. If EID is coded to a no-blank value, you must not perform a NOERROR checking for the same job, even for a different EID return code.

An error code can be defined only when the current check action is ERROR or ESTOP. The JCC normally creates an incident record for all ERROR and ESTOP actions that have been matched. Error code 0000, however, prevents the creation of an incident record. Similarly, the default error code, 4 blanks, causes an incident to be created, but prevents job tracking from treating the match as a real error.

An example of how to use the EID= parameter follows:

EID-Example
 EQQJCCT CA=ERROR,EID=XB37,M='IEC030I'
 EQQJCCT CA=ERROR,EID=XD37,M='IEC031I'
 EQQJCCT CA=ERROR,EID=XE37,M='IEC032I'
 EQQJCCT CA=ERROR,EID=892,M='IEF257'  (SPACE NOT FOUND)
 EQQJCCT CA=ERROR,M='DATABASE IS 80% FULL'
This example shows how to pair error codes and the messages to be printed. If you specify CA=ERROR or ESTOP but do not specify EID (as in the last line of the example), the error code is 4 blanks. In this case, job tracking is not notified about the error, but a record is written to the incident file. You can use this method to record incidents that do not currently affect the normal processing of jobs but should be investigated later.
TID=tracking identifier|        
Defines a tracking identifier code that can be used in the incident log to group similar errors with a common identification. The tracking identifier is a character string with a maximum of 8 characters. The default identifier is 8 blank characters.
TID-Example
 EQQJCCT CA=ERROR,EID=XB37,TID=SPACE,M='IEC030I'
 EQQJCCT CA=ERROR,EID=XD37,TID=SPACE,M='IEC031I'
 EQQJCCT CA=ERROR,EID=XE37,TID=SPACE,M='IEC032I'
This example shows how you ensure that the error is logged on the incident file and how you match the same comment to different errors.

Sample Message Table

The following macros generate a general message table that you can use to avoid most manual checks of JCL. Exceptions for individual jobs are specified in job-specific message tables, which are not shown here. If you have detailed standards for completion codes, you need only a few job-specific message tables.

Message-table macros
 ( 1) EQQJCCT CA=ESTOP,EID=5555,M='IEF287I',TID=NOTCTLGX
 ( 2) EQQJCCT CA=ESTOP,EID=4444,M='DATASET LIMIT REACHED',              X
              S=0,TID=REORG-DB
 ( 3) EQQJCCT CA=ESTOP,EID=0012,M='COND CODE 0012',S=0,TID=RC12
 ( 4) EQQJCCT CA=ERROR,M='ICE061A',S=21,TID=IOERROR
 ( 5) EQQJCCT T=MULTSTA,M='IEC501',S=20    MOUNT PRIVATE
 ( 6) EQQJCCT T=MULTMSG,M='PRIVAT',S=34,CA=ESTOP,EID=6666,TID=PRIVATE
 ( 7) EQQJCCT T=MULTEND
 ( 8) EQQJCCT T=MULTSTA,M='COND CODE 0016',S=0
 ( 9) EQQJCCT T=MULTMSG,M='IBTS',S=0,CA=ERROR,EID=0000,TID=OK-IBTS
 (10) EQQJCCT T=MULTMSG,M='GISFR',S=0,CA=ERROR,EID=0000,TID=OK-GIS
 (11) EQQJCCT T=MULTEND,CA=ESTOP,EID=0016,TID=RC16
 (12) EQQJCCT S=0,T=NORMMSG,M='SPOOL DATASET IS FULL',EID=0016,         X
              TID=IBTSFULL,CA=ESTOP
          END
Statement (1)
Detects the IEF287I message, which indicates a not cataloged 2 job situation. HCL Workload Automation for Z job tracking regards this as ended-in-error, with error code 5555.
Statement (2)
Warns that the IMS database is full. The job is set to ended-in-error because successors to this job can never terminate successfully.
Statement (3)
Treats each COND CODE 0012 as an ended-in-error condition. The error indication detected by job tracking is reset if the remaining steps after the error are not flushed. This definition can save effort in updating old JCL to a common standard. All jobs that have a step resulting in COND CODE 0012 generate an incident on the incident log.
Statement (4)
Logs all sort/merge I/O errors to the incident file. HCL Workload Automation for Z detects if the I/O error is recovered, so no EID is specified.
Statements (5-7)
Define all MOUNTs or PRIVATs as errors.
Statements (8-12)
Together, these statements define that COND CODE 0016 is usually wrong. However, if message IBTS or message GISFR is found on the line (it is always part of the step name at this installation), it is an error only if SPOOL data set IS FULL is also found.
Statements (9-10)
Define that this job is correct, even if HCL Workload Automation for Z job tracking has detected an error from information collected from the system. If no match is found, statement (11) is processed. This will give EID = 0016 to HCL Workload Automation for Z because COND CODE 0016 was found, and it was neither IBTS nor GISFR.
Statement (12)
Defines an exception to the exception. Although COND CODE 0016 is usually wrong, it is correct for IBTS jobs. However, a COND CODE 0016 IBTS job is incorrect if SPOOL data set IS FULL is found later in the scanning.