ошибка завершает программу вместо продолжения

У меня есть механизм приложения, который состоит из трех шагов: 1) peoplecode (загрузить пользовательские настройки модели) 2) do select & peoplecode (скопировать пользовательские настройки модели в настройки списка пользователей) 3) peoplecode (добавить окончательные результаты в журнал)

действие peoplecode на втором этапе выполняется в цикле для каждого пользователя, полученного с помощью действия «выбрать».

если все записи и значения верны, программа работает правильно. но я пытаюсь проверить случаи, когда возникает ошибка, и у меня есть проблема в этом случае:

когда я пытаюсь вставить значения, которые уже существуют в базе данных, выполнив это с помощью &CompInt.Save() в коде людей внутри второго шага, появляется эта ошибка:

Добавляемые данные конфликтуют с существующими данными. (18,2)

Ошибка сохранения интерфейса компонента. {Z09_CI_OPR_DEFN} (91,37)

Процесс 18256 ABENDED на шаге Z09_USERPREF.MAIN.Step02 (PeopleCode) -- RC = ? (108 524) Номер набора сообщений: 108 Номер сообщения: 524 Причина сообщения: Процесс 18256 ABENDED на шаге Z09_USERPREF.MAIN.Step02 (PeopleCode) -- RC = ? (108 524)

проблема заключается в том, что после этого код людей внутри второго шага завершает свое выполнение, но больше не выполняются итерации этого кода людей для следующих значений, полученных с помощью действия «выбрать». правильное поведение должно показать ошибку, а затем продолжить следующие итерации.

кто-нибудь знает, что может происходить? параметр При ошибке для второго шага устанавливается в значение «Игнорировать».


person Neets    schedule 29.11.2011    source источник
comment
Поскольку это распространенная проблема с CI и AE, я разместил репозиторий на Github, в котором есть вся логика, необходимая для управления AE на основе набора строк для работы CI в классе приложения, а также пример кода. github.com/jpeyret/ae2ci   -  person JL Peyret    schedule 17.09.2017


Ответы (1)


Вероятно, ошибка CI уничтожила ваш курсор SQL. Вместо отдельного шага выбора было бы лучше загрузить данные в набор строк и иметь только один статус PeopleCode для 2-го шага. Если бы вы могли опубликовать пример кода, было бы легче предоставить лучшие предложения.

person Brett B    schedule 30.11.2011
comment
Да, это так. Поскольку я не мог заставить его работать с таким подходом, я заменил действие do select на do while и сделал соответствующие корректировки, и теперь это работает. я все еще думаю, что поведение do select в этом случае не имеет смысла, но так оно и работает. то же самое не происходит с do while, поскольку каждый раз, когда выполняется код людей, создается новый курсор. спасибо за ваше понимание! - person Neets; 30.11.2011