2024年5月6日发(作者:)

ABAP中实现LISTBOX的几种方法

1. 在选择屏幕输出时调用FUNCTION MODULE ‘VRM_SET_VALUES’。

这种方法的好处就是,可以在程序中自定义LISTBOX中的内容

源码如下:

report z_hxg_006 .

* 需要调用的类型池

type-pools: vrm.

data: name type vrm_id,

list type vrm_values,

value like line of list.

data: ps_t(10) type c.

* 选择屏幕定义

parameters: ps_parm(10) as listbox visible length 10,

ps(10) as listbox visible length 10.

* 选择屏幕输出控制

at selection-screen output.

refresh list.

clear list.

name = 'PS'.

value-ke(R)y = '1'.

value-text = 'Line 1'.

append value to list.

value-key = '2'.

value-text = 'Line 2'.

append value to list.

call function 'VRM_SET_VALUES'

exporting id = name

values = list.

* start-of-selection事件触发

start-of-selection.

case ps.

when '1'.

ps_t = 'Line 1'.

when '2'.

ps_t = 'Line 2'.

endcase.

write: / 'Parameter:', ps_t.

2. 直接在数据字典中定义域(将该域的value range填充相应的值),然后通过数据表中

的字段和这个域关联即可。

report z_hxg_042 .

tables: zsale_plan. “自定义的表

* 下面的zsale_plan-zmonth是和SAP系统自带的域month相关联的,即这个字段的字段类

* 型为month

parameters: zmonth like zsale_plan-zmonth as listbox

visible length 10.

3. 通过自定义屏幕来实现LISTBOX

1) 首先我们自己创建一个屏幕

Call screen 100.

双击上面这段代码,进入到屏幕设计GUI之后,在界面上增加文本输入框,给它取名为

SJUDGE(这个名字可以随便你自己取,只要在程序编写的时候保持一致就可以了),同时在属性框

的“下拉“中选中LISTBOX即可,如下图所示:

2) 做完上面一步后,我们需要在该屏幕的逻辑流中这样设计

process before output.

* MODULE STATUS_0100.

process after input.

* MODULE USER_COMMAND_0100.

* 这里就是给屏幕字段SJUDGE创建一个功能模块module create_dropdown_list

process on value-request.

field sjudge module create_dropdown_list.

3) 双击moule create_dropdown_list,我们创建这个module在程序中的代码,这里需要调

用一个系统的功能模块F4IF_INT_TABLE_VALUE_REQUEST

主程序代码如下:

report z_hxg_040.

data: ok_code type sy-ucomm.

data: begin of itab occurs 0,

carrname like scarr-carrname,

end of itab.

call screen 100.

* module create_dropdown_list_input

module create_dropdown_list input.

refresh itab.

clear itab.

itab-carrname = '合格'.

append itab.

itab-carrname = '不合格'.

append itab.

call function 'F4IF_INT_TABLE_VALUE_REQUEST'

exporting

retfield = 'CARRNAME'

value_org = 'S'

tables

value_tab = itab

exceptions

parameter_error = 1

no_values_found = 2

others = 3.

if sy-subrc <> 0.

endif.

endmodule.

直接运行这段代码就可以看到结果。