当用户退出中的测试失败时,取消对后发问题的处理

时间:2018-11-15 10:22:33

标签: sap abap

我目前正在为SAP交易 vl02n 做一些检查,我想检查批次以及它们的到期日期是否符合某些条件。

为此,我正在使用用户出口 SAVE_DOCUMENT_PREPARE 。如果检查失败,则应有一个包含故障位置的ALV电网。 必须中断PGI的处理。

我的问题是,在测试这些有问题的批次时,出现如下错误:

  

为一次交货->长文本发布多个mat.documents的风险。

我读了一篇文章,说您应该使用命令 ROLLBACK WORK ,但是我不确定这是否行得通,我认为直到知道之后才提交...

这是我到目前为止所获得的(到目前为止,尚未测试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 :(得分:1)

您引发一条类型为E的消息。这将退出程序,甚至没有达到您的ALV。 将消息更改为此:MESSAGE s001(zamm)类型'I'显示为'E'。

如果这没有帮助,请将消息更改为... DISPLAY LIKE I,在用户确认后,报告应继续进行。

致谢

答案 1 :(得分:1)

因此,正如我所承诺的,这是我的解决方案:

我们使用了接口的现有实现 IF_EX_LE_SHP_GOODSMOVEMENT

在此界面中,有一种名为 CHANGE_INPUT_HEADER_AND_ITEMS 的方法。

在这里,我们对特定条件进行检查。之后,我们用错误的位置填充类型为 SHP_BADI_ERROR_LOG 的声明结构 ls_errlog 。 重要字段如下:

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

然后我们将此结构附加到表 ct_log

结果是,如果某些位置不符合我们的标准,则PGI将被中断,并且错误的位置将显示在ALV网格中。