abap 实现ListBox 的三种方法

在选择屏幕输出时调用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®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即可,

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

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.  
  1.  双击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.

直接运行这段代码就可以看到结果。
————————————————
版权声明:本文为优快云博主「yf_sap」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/yf_sap/article/details/2840051

### 设置和获取SAP ABAP中的ListBox下拉框值 #### 初始化赋值 在SAP ABAP中,对于选择屏幕上的`p_lbbox`下拉框初始化赋值的操作可以在FORM模块内完成。此操作通常涉及使用特定的函数来填充下拉选项并设定默认选中项[^1]。 ```abap DATA: lt_values TYPE TABLE OF ddshselopt, ls_value LIKE LINE OF lt_values. ls_value-low = 'Option1'. APPEND ls_value TO lt_values. ... CALL FUNCTION 'SET_PROFILE' EXPORTING fieldname = 'P_LBBOX' tabname = sy-repid TABLES selopt = lt_values. ``` 上述代码片段展示了如何向名为`P_LBBOX`的选择字段添加多个可选项至其列表中,并将其绑定到当前程序(`sy-repid`)上。 #### 定义与事件响应 为了创建一个功能完整的下拉菜单,在定义好选择画面之后还需要配置相应的事件处理器以便于当用户交互时能够触发预期的行为逻辑。这一步骤可以通过自定义PAI(PBO/PAI)流程来进行实现[^2]。 #### 动态设置下拉框内容 利用标准提供的接口如`VRM_SET_VALUES`可以动态地改变已存在的选择字段的内容而不必重新启动整个事务处理链路。下面是一段用于更新指定控件ID关联的数据源集合的例子: ```abap DATA: cv_id TYPE vrm_id VALUE 'P_LBBOX', li_list TYPE vrm_values. li_list-key = 'A'. " 值键 li_list-text = 'Text A'. " 显示文本 APPEND li_list TO li_list. CALL FUNCTION 'VRM_SET_VALUES' EXPORTING id = cv_id values = li_list. ``` 这段脚本说明了怎样通过调用`VRM_SET_VALUES`函数给定目标组件传递一组新的条目作为候选输入项[^3]。 #### 设置为必填项及赋予初始值 如果希望强制要求用户提供有效输入,则可在参数声明阶段加入属性`OBLIGATORY`;同时也可以在此处指派一个预设好的缺省值以简化用户的操作体验。例如: ```abap PARAMETERS s_firm TYPE c AS LISTBOX VISIBLE LENGTH 10 MODIFIED AT SELECTION-SCREEN OUTPUT OBLIGATORY DEFAULT 'A'. ``` 这里设置了`s_firm`这个变量作为一个可见长度为10字符宽度的下拉列表框,并且标记它为必需填写项目,默认情况下会自动选取字母'A'作为起始状态下的选定答案[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值