点击此处---> 群内免费提供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)
您好,Jelena,
如果系统确定无法将ATTR1-4转换为占位符文本,这似乎是设计使然。 这是帮助中的屏幕截图-看来您必须先进行某种形式的转换,然后才能将消息提升为适当的字符类型,以避免出现此问题。
致谢
Ryan Crosby
我知道我使用的是最新的7.52系统,但以防万一,如果您尝试使用此代码(不确定它是否有效),是否会看到"条目23存在(条目正确)"或"条目&23&存在( 项正确)"?
如果它起作用并且您看到第一个,那么您可以比较一下您的案例与本案例的不同之处。
我记得遇到了这种问题。 您假设要传递包含消息参数的异常类的属性名称,而不是直接传递参数值本身。
Sandra Rossi -感谢您的答复! 我不得不对下行声明行内声明进行一些小改动,然后得到"条目23存在(条目正确)"。 正如Ryan在他(现已接受)的答案中正确指出的那样,我使用参考文献误解了MESSAGE的设计。 ATTR1 ... 4应该是类属性的名称(例如您的示例中的" AA"),而不仅仅是值。 在我的示例中,我只是使用i_text1 = max_orders(max_orders类型为i)来调用raise_exception。 (即使在7.31中,它实际上在文档中也有详细说明,但是谁看了,对吗?:))
无论如何,谢谢! 这很有启发性。
Jelena Perfiljeva -我也更喜欢避免sy组件,除了消息 相关的(当然还有subrc :-))。 在最近引入语法元素RAISE EXCEPTION ... MESSAGE ...之前,我一直选择以这种方式在OOP上下文中处理消息。 我还没有发现这种形式的任何缺点,但是即使存在交叉引用也可以弥补这一不足。 当用户要求随机调查错误时,我发现使用列表的价值像金币。
但是也许有一天有人会说服我。 :-)
谢谢您的回答! 我只能"接受"一个,但这也是正确的。 我应该更仔细地阅读文档。
一周热门 更多>