NOERROR

Purpose

The NOERROR statement defines a list of error codes that, for job-tracking purposes, are treated as normal completion codes. This statement is used by a controller or standby controller. It can be specified more than once.

The NOERROR statement performs the same function as the NOERROR keyword on the JTOPTS statement. You can use NOERROR statements with, or instead of, the NOERROR keyword. By creating NOERROR statements, you can specify a greater number of error codes than is possible with only the NOERROR keyword of the JTOPTS statement. You might also find it useful to group error codes on different NOERROR statements.

NOERROR is defined in the member of the EQQPARM library as specified by the PARM parameter on the JCL EXEC statement.

To dynamically rebuild the NOERROR table, based on updated NOERROR statements in the main parameter library member (that is, the PARM value for EXEC PGM=EQQMAJOR), you can run either one of the following commands:
F ssnm, NEWNOERR
     or
F ssnm, NOERRMEM(member)
For example, to delete all NOERROR codes defined by member M1, change M1 to contain only comments and enter the command:
F ssnm, NOERRMEM(M1)
Note:
  1. If you used either of the previous commands to dynamically update the NOERROR table, and you need to restart the controller with CURRPLAN(NEW) in the JTOPTS initialization statement, update the NOERROR definitions also in the EQQPARM library, before stopping and restarting the controller. If you do not do this, the scheduler does not keep the updated data when restarting.
  2. If you use the command:
    F ssnm, NOERRMEM(member)
    the scheduler replaces any entry for the same member in the current NOERROR table, provided that the entry is correct and consistent with the previous ones.
  3. If you want to delete an entry from the current NOERROR table, perform the following steps:
    1. Delete or comment out that entry in the same member you used to define it, for example M1 member.
    2. Use the command
      F ssnm, NOERRMEM(M1)
  4. Do not use the asterisk (*) and percent sign (%) as part of the error code when it is not a numeric return code (for example, CAN, JCLI, and so on) and when relational operators, different from EQ or NE, are specified.

Format


1  NOERROR  LIST (
2.1+ ,
2.1 error code entry
1 )

Parameters

LIST(error code entry, ...,error code entry)
Specify one or more error codes that, for job-tracking purposes, are treated as normal completion codes. Entries in the list are in two formats: a general format that applies to all jobs and started tasks; and a specific format that applies to a single job or started task, or to a set of jobs or started tasks.
A general entry can be:
  • A 4-digit job or started-task return code (nnnn)
  • A system abend code (Sxxx)
  • A user abend code (Uxxx)
  • An HCL Workload Automation for Z-defined code.
A specific entry has the following format:
jobname.stepname.procstepname.errorcode
jobname
The name of a job or started task as specified in the job-name field of the operation. The maximum length is 8 characters.
stepname
The name of a step that invokes an in-stream or cataloged procedure. This is always the name of an EXEC PROC statement. The maximum length is 8 characters.

This value is meaningless for an HCL Workload Automation Agent workstation.

procstepname
The name of a step that invokes a program. This is always the name of an EXEC PGM statement. The maximum length is 8 characters.

This value is meaningless for an HCL Workload Automation Agent workstation.

errorcode
The error code that is not to be considered an error. The error code can be a positive or negative number. For negative numbers, you can specify -n where n is a number starting with the minus symbol (-) with a maximum of 4 digits. For positive numbers, you can specify n where n is a number with a maximum of 4 digits; in this case the plus symbol (+) can be omitted.
operator
The name of the relational operator to be used together with the specified error code. This field is optional and can be up to two characters in length. Valid values are:
EQ
Equal to (this is the default).
GE
Greater than or equal to.
GT
Greater than.
LE
Less than or equal to.
LT
Less than.
NE
Not equal to.
TO
Indicates a range between two values. Use it by specifying an expression with the form
errorcode.TO.errorcode2
where the extreme values are inclusive.

The default is EQ for capability with earlier versions.

errorcode2
The error code that is not to be considered as an error, as second boundary in a range expressed by the TO operator. errorcode corresponds to the first element of the boundary. It can be up four characters in length. It is required when the operator is TO. Do not use it when you specify another operator.
When you include an entry in the specific format, the first four names are required. That is, there must be at least three periods.

You can use the asterisk (*) and percent sign (%) as part of the names to create a generic name that can match many values.

An asterisk can represent a character string of unknown length. A single asterisk matches against any name, including a blank name. Two adjacent asterisks match the same values as a single asterisk. More than two adjacent asterisks match a specific error code range, but for this purpose you are recommended to use the operator TO. For example, to match the error codes from 0 to 999, from 1000 to 1999, from 2000 to 2999, and from 3000 to 3999, you specify either of the following:
NOERROR LIST(********.********.********.0*** ,
             ********.********.********.1*** ,
             ********.********.********.2*** ,
             ********.********.********.3*** )

      OR

NOERROR LIST(*.*.*0.TO.3999)  
The second statement, using the operator TO, is preferred and does not require the processing of redundant multiple asterisks.

Use a percent sign to represent a single character. A single percent sign matches any character in a specific position, except blank.

The scheduler parsing process performs the following logical checks:
  • Duplicate entries, for example
    (*.*.*.10.EQ, *.*.*.10.EQ)
  • Overlapping and consistent entries, for example
    (*.*.*.10.TO.50, *.*.*.15.EQ)
  • Inconsistent entries, for example:
    • (*.*.*.100.EQ, *.*.*.100.NE)
    • (J*.S*.P%S*.120.GE,*.*.*.115.GT)
    • (*.*.*.0C4.GE ,*.*.*.0C6.GT)
As a general rule, when processing error events, the scheduler sequentially checks the NOERROR table. As soon as the process finds a NOERROR matching condition, it stops scanning the NOERROR table. Therefore avoid specifying ambiguous conditions, such as GE or GT comparisons in the previous examples: decide which value is to be used for the comparison and define a unique statement.

The check results are returned in specific messages written in the controller message log.

Note:
  1. HCL Workload Automation for Z-defined error codes OSUB, OSUF, OSUP, OJCV, OSEQ, and JCLI are always treated as errors.
  2. To use the NOERROR keyword for a specific job or started task steps, the event writer options, as specified in the EWTROPTS initialization statement, must be set as follows:
    • The STEPEVENTS keyword must specify either ALL or NZERO.
    • The RETCODE keyword must specify HIGHEST.
  3. Error codes generated by the EQQCLEAN step, that is a step inserted into a restarted job by the Restart and Cleanup function, cannot be suppressed by the NOERROR logic.
  4. When you set the errorcode name to an HCL Workload Automation for Z-defined code (for example JCLI), set the operator name to EQ.
  5. The only acceptable error codes are those listed in the related section included in Managing the Workload.
  6. If JCC EID processing can be done for a job, you must not perform a NOERROR checking for the same job, even for a different EID return code.
NOERROR LIST(JOBSUBEX.*.*.S806)              1   
NOERROR LIST(CAN)                            2
NOERROR LIST(*.*.*.U001)                    3
NOERROR LIST(TWSJOB2.*.*.0032.LE)            4
NOERROR LIST(TWSJOB 1.*.*.S806.TO.S810)      5
NOERROR LIST(*.*.*.10.TO.11,*.*.*.13.TO.15)  6
NOERROR LIST(*.*.*.0C6.GT)                   7
In this example of NOERROR statements:
1
Any job called JOBSUBEX that abends with system abend code S806 is treated as having ended normally.
2
Any job that is canceled by the operator or by a TSO user before execution is treated as having ended normally.
3
Any job that abnormally ends with user abend code U001, is treated as having ended normally.
4
Any job called TWSJOB2, that ends with an error code less than or equal to 0032, is treated as having ended normally.
5
Any job called TWSJOB1, that abnormally ends with a system code in the range S806 (inclusive) and S810 (inclusive), is treated as having ended normally.
6
Any job that ends with an error code in the range 10 (inclusive) and 15 (inclusive), excluding 12, is treated as having ended normally.
Note: You cannot manage such a case by combining the following conditions:
*.*.*.12.NE
and
*.*.*.10.TO.15
For example, if the NOERROR table already contains
*.*.*.12.NE
and you are adding
*.*.*.10.TO.15
the scheduler issues a warning message and does not add the second entry.
7
Any job that ends with an abend code greater than 0C6, is treated as having ended normally.