如何在cl_salv_table中实现F4搜索

2020-09-24 22:31发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好。 我有一个程序,显示由cl_salv_table显示的列表。 如果我尝试在其中一个字段中使用F4搜索,则不会发生任何事情。

我在论坛上找到了一种解决方案,可以在其上进行F4活动:

数据:P_DDIC类型SALV_S_DDIC_REFERENCE,
       IR_COLUMNS类型参考CL_SALV_COLUMNS_TABLE,
       IR_COLUMN类型参考CL_SALV_COLUMN_TABLE,
       EX_MSG类型参考CX_SALV_NOT_FOUND。
 P_DDIC-TABLE ='TVRO'。
 P_DDIC-FIELD ='VSART'。
 尝试。
   IR_COLUMN?= IR_COLUMNS-> GET_COLUMN(P_DDIC-FIELD)。
   IR_COLUMN-> SET_DDIC_REFERENCE(P_DDIC)。
   IR_COLUMN-> SET_F4(IF_SALV_C_BOOL_SAP => TRUE)。
   将CX_SALV_NOT_FOUND捕获到EX_MSG中。
     MESSAGE EX_MSG类型" I"。
 ENDTRY。
 

但是问题是,您必须对表中的每个字段都使用此代码,但我不喜欢它。 有人知道在cl_salv_table中同时对所有字段使用F4搜索的方法吗? 谢谢。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好。 我有一个程序,显示由cl_salv_table显示的列表。 如果我尝试在其中一个字段中使用F4搜索,则不会发生任何事情。

我在论坛上找到了一种解决方案,可以在其上进行F4活动:

数据:P_DDIC类型SALV_S_DDIC_REFERENCE,
       IR_COLUMNS类型参考CL_SALV_COLUMNS_TABLE,
       IR_COLUMN类型参考CL_SALV_COLUMN_TABLE,
       EX_MSG类型参考CX_SALV_NOT_FOUND。
 P_DDIC-TABLE ='TVRO'。
 P_DDIC-FIELD ='VSART'。
 尝试。
   IR_COLUMN?= IR_COLUMNS-> GET_COLUMN(P_DDIC-FIELD)。
   IR_COLUMN-> SET_DDIC_REFERENCE(P_DDIC)。
   IR_COLUMN-> SET_F4(IF_SALV_C_BOOL_SAP => TRUE)。
   将CX_SALV_NOT_FOUND捕获到EX_MSG中。
     MESSAGE EX_MSG类型" I"。
 ENDTRY。
 

但是问题是,您必须对表中的每个字段都使用此代码,但我不喜欢它。 有人知道在cl_salv_table中同时对所有字段使用F4搜索的方法吗? 谢谢。

付费偷看设置
发送
5条回答
shere_lin
1楼-- · 2020-09-24 22:35
如果您根据链接到搜索帮助的ABAP词典字段键入字段,则会自动分配

F4。

樱桃小丸子0093
2楼-- · 2020-09-24 22:35

您就是错的。 cf Mike的答案。

派大星 ヾ
3楼-- · 2020-09-24 22:49

如果您输入的数据定义了默认域或搜索帮助,则应自动使用它们。 至少这是我的想法,并且可以肯定它曾经这样工作。 但是,在我当前的(7.5)系统上,行为不是基于域而是基于结构。

示例:

选择*从t000到表@DATA(itab1)。
     cl_salv_table =>工厂(正在导入r_salv_table = DATA(alv)
                              更改t_table = itab1)。
     alv-> display()。  "货币,日期等对搜索有帮助

     选择多行文字,从t000更改为TABLE @DATA(itab2)。
     cl_salv_table =>工厂(正在导入r_salv_table = data(alv2)
                              更改t_table = itab2)。
     alv2-> display()。  "图标,但没有搜索帮助
 

第一个显示具有日期下拉菜单,第二个没有显示日期。

臭虫? 至少,提供下拉图标而不提供功能是一个错误。 我很确定这适用于7.0/1/2,也许有人可以验证这一点?

编辑:我将示例更改为使用更改日期(类型D),因为此表中的货币不是基于WAERS。 但是,您可以使用具有域值列表的任何数据元素来重现它。

南山jay
4楼-- · 2020-09-24 22:42

提供了示例,因此您可以了解如何使用提供的那些类来分析itab/结构。 (当然,最好使用ddic引用正确定义结构。)当然,SALV因为每个ALV工具都有一个字段目录,但是它是在后台构建的。 使用列方法时,您可以更新该字段目录...

提示:方法CL_SALV_CONTROLLER_METADATA => SET_LVC_FIELDCATALOG(允许以旧方式更改cl_salv_table中的列和聚合)

昵称总是被占用
5楼-- · 2020-09-24 22:47

使用类似cl_abap_structdescr的类(例如 describe_by_data后跟get_ddic_field_list),以获取内部表结构中具有ddic引用的字段列表,然后在此表处循环以强制使用F4。

一周热门 更多>