Код возврата сброшенного шага в jcl

Я столкнулся с приведенным ниже сценарием, и я немного смущен тем, как работает параметр cond для предыдущего шага, который исключен.

Например......

//Шаг 1 EXEC
//Шаг 2 EXEC cond=(0,ne,step1)
//Шаг 3 EXEC cond=(0,ne,step2)

В приведенном выше случае для одного входного файла шаг 1 RC был равен 4, поэтому шаг 2 был сброшен, но шаг 3 выполнен.
Вот где я запутался, увидит ли jcl очищенный шаг rc как 0 или что вызвало выполнение шага 3, даже если шаг 2 не был выполнен.

Любое объяснение по этому поводу приветствуется и заранее благодарит.


person Hara Chaitanya    schedule 23.03.2012    source источник


Ответы (1)


Из документации...

Используйте параметр COND, чтобы проверить коды возврата из предыдущих шагов задания и определить, следует ли пропустить этот шаг задания. Вы можете указать один или несколько тестов для параметра COND, а также проверить коды возврата для определенных шагов задания или для каждого шага задания, обработка которого завершена. Если какое-либо из тестовых условий выполнено, система оценивает параметр COND как истинный и пропускает шаг задания. Если ни одно из условий проверки, указанных в параметре COND, не выполняется, система оценивает параметр COND как ложный и выполняет шаг задания.

Система выполняет проверку параметра COND на соответствие кодам возврата текущего выполнения задания. Если тест возвращает ранее пропущенный шаг, система оценивает тест как ложный.

Обратите внимание на текст, который я выделил курсивом. Поскольку система оценивает тест как ложный, выполняется шаг задания. Другими словами, параметр COND оператора EXEC работает так, как описано в документации. Что касается почему параметр был разработан таким образом, я боюсь, что я не работал в этой области, когда он был изобретен более 40 лет назад, и поэтому не могу говорить о рассуждениях оригинала. Разработчики.

Вы можете изучить IF оператор, который предоставляет возможность проверки выполнения данного шага в дополнение к проверке его кода возврата.

//STEP01 EXEC 
//CK01   IF STEP1.RC EQ 0 THEN
//STEP02 EXEC
//CK01E  ENDIF
//CK02   IF STEP2.RUN & STEP2.RC EQ 0
//STEP03 EXEC
//CK02E  ENDIF

в качестве альтернативы вы можете закодировать...

//STEP01 EXEC 
//CK01   IF STEP1.RC EQ 0 THEN
//STEP02 EXEC
//CK02   IF STEP2.RC EQ 0
//STEP03 EXEC
//CK02E  ENDIF
//CK01E  ENDIF
person cschneid    schedule 24.03.2012