ABAP对象 - 访问类的消息类?

时间:2012-10-23 20:22:57

标签: sap abap

在ABAP Objects类的头信息中,我可以输入要与MESSAGE语句一起使用的消息类。这类似于报告或函数池的MESSAGE-ID语句。由于我无法在生成的部分中的任何位置找到我在头部数据中输入的消息类,因此我假设它已生成到某处的顶级CLASS-POOL语句中。

对于某些库(例如,BAL应用程序日志记录),必须使用变量或方法参数指定消息类。到目前为止,我已经定义了一个指定消息类的常量并使用了该常量。我想知道是否有可能以其他方式访问头数据中指定的消息类,以便我可以摆脱冗余变量。有人找到了这样做的方法吗?

编辑:新方法应该比旧方式更容易 - 我不够疯狂添加CLASS-CONSTRUCTOR并执行一些数据库访问或SEO_*函数调用只是为了摆脱那个常数。

3 个答案:

答案 0 :(得分:5)

我认为你需要一个CLASS-CONSTRUCTOR来设置一个带有消息类的类属性。

带有MESSAGE子句的INTO语句具有设置SY-系统变量的副作用。所以你可以把CLASS-CONSTRUCTOR这样的东西放进去:

DATA: lf_dummy TYPE string.
MESSAGE s999 INTO lf_dummy.
af_msgid = sy-msgid.

答案 1 :(得分:4)

您可以使用类构建器API:

data the_class type ref to cl_oo_class.
create object the_class
  exporting
    clsname = `ZCL_SOMECLASS`.
data message_class type arbgb.
message_class = the_class->class-msg_id.

答案 2 :(得分:3)

我没有遇到过任何语法要做的问题。由于我在下面概述的原因,我可以相信SAP从未认识到需要包含这样的功能。

根据我的经验,消息类是消息的属性,而不是引发它的对象的属性,因此它应该与消息的类型,数量和变量保持在一起。例如,如果我的对象返回错误的数量,它也应该返回id(类)。从这个角度来看,我看不出为什么你需要知道分配给ABAP-OO类的消息类的原因,你只需要知道ABAP-OO类返回的消息的消息类。 / p>

我通常管理它的方法是将我的消息提升到虚拟字段,然后使用子例程将sy-msg *字段的内容填充到BAPIRETURN结构中。然后我将这个BAPIRETURN结构返回给调用者。这样,消息的类型,id,数字和变量都保持在一起。