在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条回答
My梦
2020-08-25 20:10

Sandra Rossi -感谢您的答复! 我不得不对下行声明行内声明进行一些小改动,然后得到"条目23存在(条目正确)"。 正如Ryan在他(现已接受)的答案中正确指出的那样,我使用参考文献误解了MESSAGE的设计。 ATTR1 ... 4应该是类属性的名称(例如您的示例中的" AA"),而不仅仅是值。 在我的示例中,我只是使用i_text1 = max_orders(max_orders类型为i)来调用raise_exception。 (即使在7.31中,它实际上在文档中也有详细说明,但是谁看了,对吗?:))

无论如何,谢谢! 这很有启发性。

一周热门 更多>