You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

维护视图保存前校验时如何高亮标记指定行/字段?

表维护生成器(TMG)批量标记错误行/字段的实现方案

在TMG的"01 - Before saving the data in the database"事件中,要实现批量标记所有错误行并显示对应提示,不能用单条MESSAGE终止的方式,而是要利用TMG提供的两个核心内部表:vim_totals和vim_mesg来实现。

核心实现步骤

  1. 初始化状态:清空消息表,重置行标记
  2. 批量校验并标记:遍历所有待保存记录,不符合条件的行标记错误状态,同时添加对应错误消息
  3. 触发终止保存:如果存在错误,设置终止保存的标识

完整代码示例

FORM before_saving.
  DATA: ls_vim_mesg TYPE vim_mesg,
        lv_index   TYPE sy-tabix.

  " 初始化:清空错误消息表,重置行标记
  REFRESH vim_mesg.
  LOOP AT vim_totals ASSIGNING FIELD-SYMBOL(<fs_vim_total>).
    <fs_vim_total>-vim_mark = space.
  ENDLOOP.

  " 遍历所有待保存记录执行校验
  LOOP AT total ASSIGNING FIELD-SYMBOL(<fs_total>) INDEX lv_index.
    " 替换为你的实际校验条件,示例:检查ZCHECK_FIELD字段是否未满足要求
    IF <fs_total>-zcheck_field <> 'VALID'.
      " 标记当前行为错误行(界面会高亮该行)
      READ TABLE vim_totals ASSIGNING <fs_vim_total> INDEX lv_index.
      IF sy-subrc = 0.
        <fs_vim_total>-vim_mark = 'E'. " 'E'代表错误标记
      ENDIF.

      " 添加错误消息到消息表(会自动在界面显示对应行的错误)
      ls_vim_mesg-msgty = 'E'.
      ls_vim_mesg-msgid = 'ZTMG_MSG'. " 替换为你的自定义消息类
      ls_vim_mesg-msgno = '002'.    " 替换为对应的消息号,或者直接用msgtext字段写文本
      ls_vim_mesg-msgv1 = <fs_total>-zcheck_field. " 消息变量,可选
      ls_vim_mesg-tabix = lv_index. " 指定错误对应的行号
      APPEND ls_vim_mesg TO vim_mesg.
    ENDIF.
  ENDLOOP.

  " 存在错误则终止保存,并提示整体错误信息
  IF NOT vim_mesg IS INITIAL.
    vim_abort_saving = abap_true.
    MESSAGE '请修正所有标记为错误的记录后重新保存' TYPE 'E'.
  ENDIF.
ENDFORM.

关键说明

  • vim_totals:与total表行一一对应,vim_mark字段设为'E'后,TMG界面会自动高亮该行,提示用户这是错误行
  • vim_mesg:专门用于存储TMG中的错误消息,添加后会在界面底部状态栏或对应行位置显示具体错误提示,支持批量存储所有错误
  • 不要用原有的单条MESSAGE ... DISPLAY LIKE 'E'方式,这种方式会中断循环,无法标记所有错误行

另外,你尝试的VIEW_SET_PF_STATUS是用于自定义TMG界面状态栏的,和错误行标记无关,所以无法实现需求,应该用上述标准内部表的方式。

内容的提问来源于stack exchange,提问作者Frontmaniaac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:07:32