3

在 ABAP Objects 类的标头信息中,我可以输入一个消息类以与MESSAGE语句一起使用。这就像MESSAGE-ID报表或函数池的语句。由于在生成的部分的任何地方都找不到我在标题数据中输入的消息类,我假设它是在某处生成到顶级CLASS-POOL语句中的。

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

有没有人找到这样做的方法?

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

4

3 回答 3

5

我认为您需要CLASS-CONSTRUCTOR使用消息类设置类属性。

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

DATA: lf_dummy TYPE string.
MESSAGE s999 INTO lf_dummy.
af_msgid = sy-msgid.
于 2012-10-24T09:15:23.693 回答
4

我没有遇到任何语法来做你要求的事情。由于我在下面概述的原因,我可以相信 SAP 从来没有看到需要包含这样的功能。

根据我的经验,消息类是消息的属性,而不是引发它的对象的属性,因此它应该与消息的类型、编号和变量一起保存。例如,如果我的对象返回错误的编号,它也应该返回 id(类)。

从这个角度来看,我看不出为什么您需要知道分配给 ABAP-OO 类的消息类的原因,您只需要知道 ABAP-OO 类返回的消息的消息类。

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

于 2012-10-26T18:11:19.520 回答
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.
于 2012-10-28T19:37:54.123 回答