如果希望ALV中某字段具有搜索帮助,第一种办法当然是对表中某字段的引用,设置ref_table、ref_field,将自动触发该字段所带的搜索帮助。
可不可以直接设置Searh Help呢?应该不可以,找遍了field catalog的结构也没发现有可以设置的字段。
第二种办法就是利用自定义代码来实现ALV的搜索帮助,显然它的功能更强大、更灵活。针对在OO ALV中实现搜索帮助,其主要步骤有:
1,在ALV的事件处理类中添加个Method,其DEFINITION如下:
其IMPLEMENTATION中就是我们希望执行的代码,用来弹出可选择对话框。e_fieldname代表用户点击了ALV的哪个字段来触发搜索帮助,es_row_no代表了当前行信息,
es_row_no-row_id就是ALV中内表记录的INDEX。er_event_data代表了当前用户对ALV进行了哪些编辑的信息。在Method的最后,记得加上
通知系统搜索事件处理完毕,这样就不会调用系统标准的Search Help。
2,那就是对需要自定义搜索帮助的字段,设置其field catalog时:
ls_fieldcat-f4availabl = 'X'.
这一步往往容易被忽略。
3,在创建ALV对象之后,要对需要自定义搜索帮助的字段进行注册。
lvc_s_f4中的字段getbefore和changeafter应该代表是否触发data_changed事件。
然后我们为其指定事件处理类(假设go_evt_receiver是自定义事件处理类的一个对象):
至此,主要的设置步骤都介绍完毕。
下面贴一段Handle_onf4的代码供参考:
** 这里可以添加代码以对lt_hitlist内表进行填充