Как позвонить в ENDCMTCTL с ожидающими изменениями?
Моя программа iSeries ILE аварийно завершилась. Теперь я хочу завершить управление фиксацией (чтобы снова запустить программу, программа запускает сам контроль фиксации) с помощью ENDCMTCTL, но она завершается с сообщением:
CPF8355 - ENDCMTCTL not allowed. Pending changes active
Есть ли способ откатить / зафиксировать изменения и завершить контроль фиксации должным образом? Мои более опытные коллеги предлагают только выйти и начать новый сеанс.
редактировать
Я пробовал WRKCMTDFN и все действия в нем безуспешно. Принудительный откат и принудительная фиксация завершились с сообщением:
CPD83ED -Commitment definition not eligible for forced rollback ...
... 2 -- The logical unit of work, for this commitment definition, is not in
an undecided state.
2 ответа
Идентификатор сообщения, вероятно, CPF8355, и текст второго уровня полезен для понимания ситуации:
Cause . . . . . : An attempt was made to end commitment control for
commitment definition &1. However, there are one or more active resources
under commitment control for the commitment definition. The resources could
be one of the following:
-- Local files
-- Remote files
-- API commitment resources
-- Remote SQL database
Используйте WRKJOB OPTION(*CMTCTL), чтобы увидеть, какие ресурсы все еще открыты и находятся под контролем фиксации. Если есть открытые файлы, программа должна закрыть их, прежде чем пытаться ENDCMTCTL. Если это случай, когда есть повторяющиеся вызовы для программы RPG, которая оставляет файлы открытыми из соображений производительности, вызовите это в последний раз со специальным параметром, который скажет ему закрыть файлы. В качестве альтернативы, если это программа ILE, рассмотрите RCLACTGRP.
После прочтения документации кажется, что вы ничего не можете сделать. Я бы ожидал, что вам будет предоставлена возможность зафиксировать изменения или откатить их на основании этого:
Если в интерактивном задании есть незафиксированные изменения, отправляется сообщение с вопросом о том, следует ли зафиксировать или откатить изменения до окончания определения обязательства. Для пакетного задания изменения откатываются.
Поскольку вы не получили эту опцию, я думаю, что ваша работа уже начала процесс принятия (или отката), и вы не можете изменить его в данный момент. Таким образом, у вас остается единственная "опция" выхода из системы, которая завершит вашу работу и связанный с ней контроль обязательств.