在MESSAGE中使用带有IF_T100_MESSAGE和数字变量的异常类的问题

2020-08-25 19:22发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)这是在ECC EHP6 ABAP...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


这是在ECC EHP6 ABAP 7.31系统中。 我使用IF_T100_MESSAGE接口创建了一个全局异常类。 此异常类将在将验证选择屏幕字段的本地方法中使用。 这些方法将引发异常(使用此新的异常类),并通过它传递不同的消息ID,编号等,以便可以在选择屏幕上显示适当的错误消息。

数据:screen_error类型参考zcx_sel_screen_error。
 尝试。
 validate_input(...)。
 捕获zcx_sel_screen_error INTO屏幕错误。
 消息screen_error类型" E"。
 ENDTRY。

在validate_input()内,我们调用具有一个或多个参数的另一个本地方法raise_exception,以引发上下文相关消息的异常。 这是引发异常的方式:

 METHODraise_exception。
  DATA error_message类似于if_t100_message => t100key。
 error_message-msgid ='Z ...'。
  error_message-msgno = i_msgno。
  error_message-attr1 = i_text1。
  error_message-attr2 = i_text2。
  error_message-attr3 = i_text3。
  error_message-attr4 = i_text4。
  引发例外类型zcx_sel_screen_error
  正在导出textid = error_message。
 终结法。  " raise_exception 

这很好用,但是当消息文本属性(ATTR1)是数字变量(类型为N或I)时,我遇到了一个奇怪的问题。问题在于消息文本显示的是&号,例如:

如果我直接在MESSAGE命令中使用数字变量,则不会发生这种情况。 一种"强力"方法将是拥有一个中间文本类型变量,并在调用异常方法之前在其中移动数值,但我希望避免这种情况。 (注意:我在方法定义中对ATTTR1 ... 4使用TYPE ANY,因为在接口中使用的类型会导致使用数字变量的语法错误。这部分也不很满意,但这不是主要问题。)

我做错什么了吗,除了"蛮力"解决方案以外,还有其他可行的解决方案吗? 谢谢!

P.S。 在有人建议之前,IF_T100_DYN_MSG在7.31中不存在。

scn.jpg (36.4 kB)
6条回答
小灯塔
2020-08-25 20:01

我记得遇到了这种问题。 您假设要传递包含消息参数的异常类的属性名称,而不是直接传递参数值本身。

 DATA:textid LIKE if_t100_message => t100key,
       异常类型REF TO zcx_my_error。

 textid-msgid = msgid。
 textid-msgno = msgno。
 textid-attr1 ='PARAMETER1'。
 textid-attr2 ='PARAMETER2'。
 textid-attr3 ='PARAMETER3'。
 textid-attr4 ='PARAMETER4'。

 CREATE OBJECT异常
    出口
       textid = textid。

 异常->参数1 = msgv1。
 exception-> parameter2 = msgv2。
 exception-> parameter3 = msgv3。
 exception-> parameter4 = msgv4。

 RAISE EXCEPTION异常。
 

一周热门 更多>