Промежуточный код возврата шага в jcl - PullRequest
1 голос
/ 23 марта 2012

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

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

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

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

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

1 Ответ

6 голосов
/ 24 марта 2012

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

Используйте параметр COND для проверки кодов возврата из предыдущих этапов задания и определите, нужно ли обойти этот шаг задания. Вы можете указать один или больше тестов для параметра COND, и вы можете проверить коды возврата из конкретные шаги работы или с каждого шага работы, который завершен обработка. Если какое-либо из условий испытания удовлетворено, система оценивает параметр COND как true и пропускает этап задания. Если ни одно из условий испытаний, указанных в параметре 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
...