我创建了一个包含 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、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 很生疏。