【问题标题】:Function Module MESSAGES GIVE, how to find error?功能模块MESSAGES GIVE,如何查找错误?
【发布时间】:2020-12-14 10:43:48
【问题描述】:

我将FM MESSAGES GIVE调用到功能模块MRM_SRM_INVOICE_SIMULATE中,如何找到产生错误的点?

谢谢

【问题讨论】:

  • 详细描述您的问题
  • 我有一个自定义功能模块,用于更新文档的状态。在自定义 FM 中有对标准 FM 的调用,它恢复包含错误的返回参数。在 FM MRM_SRM_INVOICE_SIMULATE 中,我看到错误消息的地方是在对 FM MESSAGES_GIVE 的调用中。如何识别生成消息的点?
  • 给出完整的编码,整个架构好像错了
  • 贴的代码太长了,我需要知道如何截取FM MESSAGES_GIVE中XMSEG表的数据输入。

标签: abap system-error


【解决方案1】:

需要更多数据才能为您提供适当的帮助。

但是您是否已经尝试在MESSAGE 语句中添加断点?

为此:

  • 通过/h + 操作打开调试器

  • 然后在菜单中Breakpoints -> Breakpoint at -> Breakpoint at statement [Shift+F5]

  • 在弹出的窗口网格中,在第一行写上MESSAGE,然后单击确定。

  • 之后,您需要复制错误,调试器将在 EVERY MESSAGE 运行时到达的语句中停止。

注意:可能有许多 MESSAGE 语句到达。你需要使用F8键一一检查。

【讨论】:

  • 感谢您的建议。我在消息'KI''222''E'处设置断点,但是内部XMSEG表的值没有经过任何点
【解决方案2】:

从显示的消息列表中提取消息 ID MSGID 和消息编号 MSGNO

然后尝试以下操作:

  1. 尝试通过静态代码分析找到消息触发的地方:在事务SE91中,导航到MSGIDMSGNO给出的消息,然后对单个消息执行Where-Used-List .这将为您提供发出该消息的代码位置。在每个地方放置一个断点并重复导致该消息的事务。系统应在消息发出的位置停止。
  2. 有些开发者动态下发消息(带有MSGIDMSGNO的变量),导致静态代码分析找不到发消息的点。这很糟糕,但还有另一种方法可以找到它。 @cape_bsas 的答案中描述的语句 MESSAGE 处的断点通常停止得太频繁,但您可以在字段 SY-MSGNO 上放置一个观察点,指示调试器在 SY-MSGNO 假定给定消息编号时立即停止。

【讨论】:

    猜你喜欢
    • 2018-03-31
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2018-06-09
    • 2014-06-16
    • 1970-01-01
    相关资源
    最近更新 更多