Отмена обработки сообщения об исправном выпуске в случае сбоя теста при выходе пользователя - PullRequest
0 голосов
/ 15 ноября 2018

В настоящее время я работаю над некоторыми проверками для транзакции SAP vl02n и хочу проверить партии и соответствует ли их срок годности некоторым критериям.

Для этого я использую пользователя-выход SAVE_DOCUMENT_PREPARE .Если проверки не пройдены, должна быть решетка ALV, которая содержит ошибочные позиции. Обработка PGI должна быть прервана.

Моя проблема заключается в том, что при тестировании этих дефектных пакетов возникает ошибка, подобная этой:

Риск размещения нескольких матов.documents для одной доставки-> длинный текст.

Я прочитал статью, в которой говорилось, что вы должны использовать команду ROLLBACK WORK , но я не совсем уверен, будет ли это работать, если ядумаю, что не было COMMIT, пока не узнаешь ...

Это то, что я получил до сих пор (ROLLBACK WORK пока не тестируется).

[...]

IF lt_faulty_lips IS NOT INITIAL.

" Titel des ALV-Grid abhaengig von der Sprache festlegen
IF sy-langu EQ 'D'.
  lv_grid_title = 'Verfallsdatum folgender Positionen zu klein.'.
ELSE.
  lv_grid_title = 'Expiration date of the following items too small.'.
ENDIF.

" Grid-Title setzen
MESSAGE s001(zamm) INTO lv_grid_title.

" Fehler-Message ausgeben
MESSAGE s000(zamm) DISPLAY LIKE 'E'.

" is this possible?
"ROLLBACK WORK.

" ALV-Grid mit fehlerhaften Positionen ausgeben
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    i_grid_title       = lv_grid_title
    i_callback_program = 'SY-REPID'
    i_structure_name   = 'LIPSVB'
    is_layout          = gs_alv_layout
  TABLES
    t_outtab           = lt_faulty_lips
  EXCEPTIONS
    program_error      = 1
    OTHERS             = 2.
IF sy-subrc <> 0.
  " Implement suitable error handling here
ENDIF.



" nochmals Message-Ausgabe im Hauptbild
MESSAGE e000(zamm) DISPLAY LIKE 'E'.

Как я мог решить эту проблему?

Спасибо большое, каждый намек ценится!

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Как я и обещал, вот мое решение:

мы использовали уже существующую реализацию интерфейса IF_EX_LE_SHP_GOODSMOVEMENT .

В этом интерфейсе есть метод, который называется CHANGE_INPUT_HEADER_AND_ITEMS .

Здесь мы делаем наши проверки для конкретных критериев. После этого мы заполняем объявленную структуру ls_errlog типа SHP_BADI_ERROR_LOG ошибочными позициями. Важные поля:

ls_errlog-msgty = 'E'.
ls_errlog-msgid = '<message-class>'.
ls_errlog-msgno = '<message-number'.

Затем мы добавляем эту структуру в таблицу ct_log .

В результате, если есть позиции, которые не соответствуют нашим критериям, PGI будет прерван, а неисправные позиции будут показаны в ALV-Grid.

0 голосов
/ 15 ноября 2018

вы выводите сообщение с типом E. Это выходит из программы, и вы даже не достигаете своего ALV. Измените сообщение на следующее: СООБЩЕНИЕ s001 (zamm) ТИП 'I' ПОКАЗАТЬ НРАВИТСЯ 'E'.

Если это не поможет, либо измените Сообщение на ... ДИСПЛЕЙ, КАК I, после того, как пользователь подтвердит, отчет должен прогрессировать.

привет

...