在ABAP ASSERT中包含错误消息

时间:2018-10-04 19:24:57

标签: sap abap

我有一个这样的ABAP行:

assert ( cond = 'x' ).

该函数的调用者(通过rfc)收到一条毫无意义的消息,表明某些断言失败。

由于我的源代码中有几个断言,因此我想提供和补充文字。

这样,如果客户向我发送错误消息,我就可以轻松找到匹配的行。

如何在ABAP中最简单地做到这一点?

更新:此问题关注assert。但这是ABAP中的错误路线。我在这里写了一个更好的新问题:Raise Exception with custom message in ABAP

3 个答案:

答案 0 :(得分:1)

我发现这可行:

message my_string_var type 'E'.

这不是一个断言,但它可以满足我的要求:它将终止函数并显示我的变量。

您可以使用此便捷的方法来序列化变量,以查看其内部。这里的变量foo_var被序列化为json:

MESSAGE |Error foo_var: | && 
     /ui2/cl_json=>serialize( data = foo_var 
     pretty_name = /ui2/cl_json=>pretty_mode-low_case ) TYPE 'E'.

答案 1 :(得分:1)

来自SAP Documentation

所有方法都具有可选的导入参数MSG,LEVEL和QUIT,其含义相同:

  • MSG(类型:CSEQUENCE)包含(如果有)详细描述错误的文本

因此,您可以像这样轻松地将文本添加到声明中:

TRY.
 cut->divide_by_zero( denominator = 1).
CATCH cx_sy_zerodivide.
ENDTRY.

cl_abap_unit_assert=>fail( msg = 'CX_SY_ZERODIVIDE not raised'
                           level = if_aunit_constants=>critical ).

答案 2 :(得分:0)

为在测试类中使用而设计的断言功能,详细信息为here。我认为不适合在普通代码中使用。您可以将 check 用于相同的功能,但不会返回任何消息。在函数或类中引发异常是正确的方法。

如果不想使用异常,则可以返回OK和MESSAGE变量。在您的方法/功能开始时,将“确定”设置为空,并发送MESSAGE(例如“存在错误”)消息。在执行操作之前,手动更新消息。最后清除消息,然后将X设置为MESSAGE。

function ZMKY_TEST.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(COND) TYPE  C
*"  EXPORTING
*"     REFERENCE(OK) TYPE  C
*"     REFERENCE(MESSAGE) TYPE  STRING
*"----------------------------------------------------------------------

  clear: OK, MESSAGE.
  MESSAGE = 'There is an error.'

  MESSAGE = 'COND not equal to X'.
  check COND = 'X'.

  clear: MESSAGE.
  OK = 'X'.

endfunction.