ALV GRID 不会根据值表检查输入,并且不显示匹配代码

问题描述 投票:0回答:1

我创建了一个包含 5 个字段的自定义表格:

  • MANDT
    :数据元素
    MANDT
  • VBELN
    :数据元素
    VBELN_VA
  • POSNR
    :数据元素
    POSNR_VA
  • EXT_ID
    :自定义数据元素
  • VALUE
    :自定义数据元素

我已在

VBELN
(至
VBAK
)、
POSNR
(至
VBAP
)和
EXT_ID
(至仅由关键字段
MANDT
EXT_ID
组成的自定义值表)上定义了外键。外键的基数是“Key field / Candidates”和
1:CN
,并且“Check required”被选中。

我的问题是,当我在 ALV 网格中显示此表时,匹配代码/值帮助显示在字段

VBELN
POSNR
上,但不显示
EXT_ID
上。字段
VBELN
POSNR
中的输入会根据其值表进行检查,但不会在
EXT_ID
中输入。

我已经在字段的域上设置了适当的值表。 我为

EXT_ID
创建了自定义值帮助并将其分配给表字段。也没有用。

维护表的行为符合预期(提供了匹配代码并检查了输入

EXT_ID
),这似乎表明 DDIC 对象已正确定义,并且这是 ALV 网格中的错误?

我的代码以这种方式实例化 ALV:

      go_alv = new cl_gui_alv_grid(
        i_parent                = cl_gui_custom_container=>default_screen
      ).

      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
        EXPORTING
          i_structure_name       = 'ZEXT_ATT'
        CHANGING
          ct_fieldcat            = lt_fieldcat
        EXCEPTIONS
          inconsistent_interface = 1
          program_error          = 2
          others                 = 3
        .

      go_alv->register_edit_event(
        EXPORTING
          i_event_id = cl_gui_alv_grid=>mc_evt_enter
        EXCEPTIONS
          error      = 1
          others     = 2
      ).

      insert cl_gui_alv_grid=>mc_fc_pc_file         into table lt_exclude.
      insert cl_gui_alv_grid=>mc_fc_views           into table lt_exclude.
      insert cl_gui_alv_grid=>mc_fc_info            into table lt_exclude.
      insert cl_gui_alv_grid=>mc_fc_print           into table lt_exclude.
      insert cl_gui_alv_grid=>mc_fc_subtot          into table lt_exclude.
      insert cl_gui_alv_grid=>mc_fc_sum             into table lt_exclude.
      insert cl_gui_alv_grid=>mc_fc_find            into table lt_exclude.
      insert cl_gui_alv_grid=>mc_fc_find_more       into table lt_exclude.
      insert cl_gui_alv_grid=>mc_fc_call_xml_export into table lt_exclude.
      insert cl_gui_alv_grid=>mc_fc_call_report     into table lt_exclude.
      insert cl_gui_alv_grid=>mc_fc_pc_file         into table lt_exclude.
      insert cl_gui_alv_grid=>mc_fc_send            into table lt_exclude.
      insert cl_gui_alv_grid=>mc_fc_data_save       into table lt_exclude.
      insert cl_gui_alv_grid=>mc_fc_send            into table lt_exclude.
      insert cl_gui_alv_grid=>mc_fc_to_office       into table lt_exclude.
      insert cl_gui_alv_grid=>mc_fc_views           into table lt_exclude.
      insert cl_gui_alv_grid=>mc_fc_html            into table lt_exclude.

      go_alv->set_table_for_first_display(
        EXPORTING
          is_layout                     = ls_layout
          it_toolbar_excluding          = lt_exclude
        CHANGING
          it_outtab                     = gt_ext_attr
          it_fieldcatalog               = lt_fieldcat
        EXCEPTIONS
          invalid_parameter_combination = 1
          program_error                 = 2
          too_many_lines                = 3
          others                        = 4
      ).
      IF SY-SUBRC <> 0.
      ENDIF.
abap alv
1个回答
0
投票

如果我没记错的话,只有数据元素级别的搜索帮助和基于域的检查表设置被普遍保留。其余的(外键、表/结构中指定的搜索帮助等)可能会丢失,具体取决于您形成字段目录的方式。

此问题在大多数(如果不是全部)可用于创建应用程序 ABAP 的技术(ALV、WebDynpro、FPM、RESTful)中都存在。

特别是在 ALV 的情况下,字段目录中的某些字段您必须手动设置搜索帮助或继承它。

  • ROLLNAME
    =(数据元素名称)用于从该 DE 继承搜索帮助。
  • CHECKTABLE
    =(表名称)是不言自明的。我相信它用于验证(防止输入不在该表中的输入),但我从未亲自使用过它。
  • REF_TABLE
    REF_FIELD
    可用于指定该结构中的表(结构也应该有效)名称和字段名称,以继承一些参数(包括输入帮助设置)。

我相信您需要的是修改该特定字段的字段目录条目

  • REF_TABLE
    = 'ZEXT_ATT'
  • REF_FIELD
    = 'EXT_ID'

以下内容的完整传递(在

LVC_FIELDCATALOG_MERGE
之后)也可以工作,因为您的字段目录完全基于该结构。

loop at lt_fieldcat assigning field-symbol(<ls_fieldcat>).
    <ls_fieldcat>-REF_TABLE = 'ZEXT_ATT'
    <ls_fieldcat>-REF_FIELD = <ls_fieldcat>-FIELDNAME.
endloop

如果您最终测试了它,请告诉我它是否有效。我对 ALV 很生疏。

© www.soinside.com 2019 - 2024. All rights reserved.