#ibm-midrange #rpg
Вопрос:
У меня есть программа RPG, которая выполняет приведенную ниже команду через QCMDEXC:
OVRPRTF FILE(QSYSPRT) HOLD(*YES) SAVE(*YES) USRDTA(OWNERUPD)
Программа также выполняет DLTOVR FILE(QSYSPRT)
команду через QCMDEXC. Проблема в том, что DLTOVR, похоже, иногда выходит из строя, и в результате USRDTA файлов катушек из программ, выполняемых впоследствии, отображается как «OWNERUPD».
Чтобы устранить эту проблему, я попытался изменить область действия OVRPRTF на *CALLLVL. Также применил то же изменение области действия к DLTOVR. Кажется, это работает нормально. ПЕРЕОПРЕДЕЛЕНИЕ теперь, похоже, влияет только на программу, генерирующую катушку. Но мой вопрос в том, будут ли какие-либо «скрытые» опасности при внесении этого изменения?
Если да, то каков был бы лучший подход?
Комментарии:
1. Я нахожу переопределения головной болью. Мое решение состоит в том, чтобы запустить все программы и сервисные программы в одной и той же группе активации с именем.
Ответ №1:
Если *CALLLVL
бы это имело значение, казалось бы, вы работаете в реальной группе активации ILE, а не в группе активации по умолчанию OPM (RPGIII) (DAG).
Другим вариантом было бы использовать ACTGRP(*NEW)
программу ILE RPG и уйти OVRSCOPE(*ACTGRPDFN)
. Вам даже не понадобится DLTOVR в качестве группы активации, и переопределение исчезнет, когда программа вернется.
Однако использование ACTGRP(*NEW)
не является хорошей идеей, если программа вызывается в цикле.
Последний вариант, используйте ACTGRP(<something>)
и OVRSCOPE(*ACTGRPDFN)
, чтобы программа и переопределение находились в определенной группе активации, отличной от любой группы активации, в которой работают остальные ваши программы. (Скорее всего, QILE по умолчанию, что в первую очередь является плохим выбором и полностью отличается от OPM DAG.)
В принципе, другие ваши варианты требуют понимания того, как работают группы активации ILE.
Комментарии:
1. Не могли бы вы, пожалуйста, сказать мне, возникнут ли какие-либо проблемы с использованием *CALLLVL?
2. все должно быть в порядке, если вы удалите его, когда закончите.