abap - OO ALV 网格中 F4 搜索帮助的通用解决方案
问题描述
我有一个易于使用的功能模块,可以为几乎任何类型的表创建 ALV 网格,尤其是没有 DDIC 类型的表。也支持编辑。
基本上,它通过 RTTI 创建一个字段目录,并在一个固定的内部 Dynpro 中实例化标准 CL_GUI_ALV_GRID 类。
问题:当列不是DDIC 结构或透明表的一部分时,F4 搜索帮助不起作用。原因是REF_FIELD
如果字段目录中的字段为空,标准 ALV 会覆盖该字段。
* Excerpt from LVC_FCAT_COMPLETE_NEW in LSLVCF02
if not <ls_fcat>-ref_table is initial
and <ls_fcat>-ref_field is initial
and r_fcat_complete eq abap_false.
<ls_fcat>-ref_field = <ls_fcat>-fieldname.
endif.
但是要使用功能模块(由in 方法内部使用)获取数据元素的搜索帮助,必须包含数据元素名称并且必须是初始的。DD_SHLP_GET_HELPMETHOD
CL_GUI_ALV_GRID
F4
TABNAME
FIELDNAME
REF_FIELD
如果我在分配后在调试器中清除它,一切都会按预期工作。
我知道字段目录的文档包括省略REF_FIELD
名称的功能,如果它与FIELDNAME
. 但是自动化对于非DDIC 结构没有意义。
知道如何在不修改的情况下摆脱这种行为吗?ONF4
最好不要为(未记录的)事件处理程序
中的每种类型的搜索帮助编写我自己的 F4 调用例程。
不幸的是,由于需要 Dynpro 的东西,几乎不可能提供一个有效的测试用例。但我可以提供 ABAP 部分。它假定 Dynpro 500 存在,其容器控件名为CC_ALV
.
" test table
TYPES: BEGIN OF t_test,
date TYPE dats,
time TYPE time,
werks TYPE werks_d,
END OF t_test.
DATA it_data TYPE STANDARD TABLE OF t_test.
APPEND VALUE #( date = '20180102' time = '123059' werks = '2020' ) TO it_data.
" field catalog
DATA it_fc TYPE lvc_t_fcat.
APPEND VALUE #( fieldname = 'DATE' f4availabl = abap_true ref_table = 'DATS' ) TO it_fc.
APPEND VALUE #( fieldname = 'TIME' f4availabl = abap_true ref_table = 'TIMS' ) TO it_fc.
APPEND VALUE #( fieldname = 'WERKS' f4availabl = abap_true ref_table = 'WERKS_D' ) TO it_fc.
" show ALV
DATA: r_alv TYPE REF TO cl_gui_alv_grid.
CREATE OBJECT r_parent
EXPORTING
container_name = 'CC_ALV'.
CREATE OBJECT r_alv
EXPORTING
i_parent = r_parent.
r_alv->set_table_for_first_display(
EXPORTING is_layout = VALUE #( edit = abap_true )
CHANGING it_fieldcatalog = it_fc
it_outtab = it_data ).
CALL SCREEN 500.
解决方案
您提供的代码示例与您提供的代码示例有关,ref 字段指定不正确,因此它不起作用。这样它就像一个魅力:
APPEND VALUE #( fieldname = 'DATE' f4availabl = abap_true ref_table = 'BKPF' ref_field = 'BUDAT' ) TO it_fc.
APPEND VALUE #( fieldname = 'TIME' f4availabl = abap_true ref_table = 'BKPF' ref_field = 'CPUTM' ) TO it_fc.
APPEND VALUE #( fieldname = 'WERKS' f4availabl = abap_true ref_table = 'BSEG' ref_field = 'WERKS') TO it_fc.
关于非 DDIC 字段的问题,当您基于任意非 DDIC 数据元素和/或任意域 ALV 声明非 DDIC 字段时,根本无法确定调用什么输入帮助。请参阅输入帮助调用层次结构。
因为我没有看到你的 FM 代码,所以我不能说更明确的话。否则,请给我们更多说明性的用例。
推荐阅读
- json - 为什么从请求而不是直接字符串读取时json解析失败
- ios - 使用原生组件在 Flutter 插件中打开 iOS 页面/屏幕
- sql-server-2008 - 怎么办 - SQL 更新方案在多列上使用联接条件,如果为空,则在联接条件中排除列
- javascript - 如何在画布构造函数中将文本放在特定宽度和长度之间
- sql - 每月 16 天后返回结果的 SQL 语句
- html - 应该在视频之上的元素在视频之下
- mysql - 如何修复sql查询?
- php - Laravel 无法显示服务器上公用文件夹中的图像
- android - intent.getStringExtra 始终为“null”
- .net-core - 无法在 Jenkins 的相同解决方案中恢复 .netcore 和 .netframework 的 nuget/nexus 包