ABAP Dialog 开发 Dropdownlist Demo

ABAP Dialog开发中,在用到下拉框时,以为能像.Net 或 html 上加上select标签。

然而在接触之后,才发现不是那么一回事;这里用现有实例在做个简单的demo:

通过spec,下拉需要选择移动类型请维护:

251-仓库中的销售消耗

252-仓库中的销售消耗 - 冲销

551-发货报废

Z01-物耗及零配件

Z81-样品送样&福利领用

由于这里不是直接取数据表字段内容,故是静态绑定操作。

 

第一步,创建屏幕,并在屏幕中拖拽文本框,并在属性界面将下拉属性选择为 ListBox:

第二步,定义全部变量:

1 ************************************************************************
2 *                  V A R I A B L E                                     *
3 ************************************************************************
4 DATA: ok_code TYPE sy-ucomm,   "功能码
5       ddlbwart(30) TYPE c.     "与屏幕变量一致

第三步,在PBO中,为下拉框赋值;这里通过Call Function:VRM_SET_VALUES 来为下拉框做填充绑定:

 1 ************************************************************************
 2 *                  S U B R O U T I N E S                               *
 3 ************************************************************************
 4 *&---------------------------------------------------------------------*
 5 *&      Form  FRM_SET_DROPDOWNLIST
 6 *&---------------------------------------------------------------------*
 7 FORM frm_set_dropdownlist.
 8 
 9   DATA: lv_name TYPE vrm_id,
10         lt_list TYPE vrm_values,
11         lw_value LIKE LINE OF lt_list.
12 
13   CLEAR: lv_name,lt_list[],lw_value.
14   lv_name = 'DDLBWART'.
15 
16 *       关联控件名
17   lw_value-text = '251-仓库中的销售消耗'.
18   lw_value-key = '251'.
19   APPEND lw_value TO lt_list.
20 
21   lw_value-text = '252-仓库中的销售消耗 - 冲销'.
22   lw_value-key = '252'.
23   APPEND lw_value TO lt_list.
24 
25   lw_value-text = '551-发货报废'.
26   lw_value-key = '551'.
27   APPEND lw_value TO lt_list.
28 
29   lw_value-text = 'Z01-物耗及零配件'.
30   lw_value-key = 'Z01'.
31   APPEND lw_value TO lt_list.
32 
33   lw_value-text = 'Z81-样品送样&福利领用'.
34   lw_value-key = 'Z81'.
35   APPEND lw_value TO lt_list.
36 
37 
38   CALL FUNCTION 'VRM_SET_VALUES'
39     EXPORTING
40       id              = lv_name
41       values          = lt_list
42     EXCEPTIONS
43       id_illegal_name = 1
44       OTHERS          = 2.
45   IF sy-subrc <> 0.
46 * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
47 *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
48   ENDIF.
49 
50 ENDFORM.                    " FRM_SET_DROPDOWNLIST

第四步,在PAI中,添加User Command,来实现对dropdownlist的响应:

 1 *&---------------------------------------------------------------------*
 2 *&      MODULE  USER_COMMAND_0100  INPUT
 3 *&---------------------------------------------------------------------*
 4 *       TEXT
 5 *----------------------------------------------------------------------*
 6 MODULE user_command_0100 INPUT.
 7 
 8   CASE ok_code.
 9     WHEN 'SELECTED'.
10       MESSAGE ddlbwart TYPE 'I'.
11   ENDCASE.
12 
13 ENDMODULE.                 " USER_COMMAND_0100  INPUT

直接结果如下所示:

注意:当我们绑定之后,会发现下拉框中,总是在最后一行会出现空白行。

这里解决的方法,在下拉框属性中,设置为必选,即为required:

当然,若下拉框不需要必选的话,这里只能作罢。

 

完整代码如下:

  1 REPORT  zbc_requisitioned_a_retirement MESSAGE-ID zdev001.
  2 
  3 ************************************************************************
  4 *                  I N C L U D E                                       *
  5 ************************************************************************
  6 
  7 ************************************************************************
  8 *                  T A B L E S                                         *
  9 ************************************************************************
 10 
 11 ************************************************************************
 12 *                  T Y P E S                                           *
 13 ************************************************************************
 14 TYPE-POOLS vrm.
 15 
 16 ************************************************************************
 17 *                  V A R I A B L E                                     *
 18 ************************************************************************
 19 DATA: ok_code TYPE sy-ucomm,
 20       ddlbwart(30) TYPE c.
 21 
 22 *DATA GT_BWART TYPE STANDARD TABLE OF TY_BWART WITH HEADER LINE.
 23 
 24 ************************************************************************
 25 *                  T O P  O F  P A G E                                 *
 26 ************************************************************************
 27 ************************************************************************
 28 *                  I N I T I A L I Z A T I O N                         *
 29 ************************************************************************
 30 INITIALIZATION.
 31 
 32 ************************************************************************
 33 *                  S T A R T  O F  S E L E C T I O N                   *
 34 ************************************************************************
 35 START-OF-SELECTION.
 36   CALL SCREEN 0100.
 37 
 38 ************************************************************************
 39 *                  E N D  O F  S E L E C T I O N                       *
 40 ************************************************************************
 41 END-OF-SELECTION.
 42 
 43 ************************************************************************
 44 *                  M O D U L E                                         *
 45 ************************************************************************
 46 *&---------------------------------------------------------------------*
 47 *&      MODULE  STATUS_0100  OUTPUT
 48 *----------------------------------------------------------------------*
 49 MODULE status_0100 OUTPUT.
 50 
 51   PERFORM frm_set_dropdownlist.
 52 
 53 ENDMODULE.                 " STATUS_0100  OUTPUT
 54 *&---------------------------------------------------------------------*
 55 *&      MODULE  USER_COMMAND_0100  INPUT
 56 *&---------------------------------------------------------------------*
 57 *       TEXT
 58 *----------------------------------------------------------------------*
 59 MODULE user_command_0100 INPUT.
 60 
 61   CASE ok_code.
 62     WHEN 'SELECTED'.
 63       MESSAGE ddlbwart TYPE 'I'.
 64 
 65   ENDCASE.
 66 
 67 ENDMODULE.                 " USER_COMMAND_0100  INPUT
 68 
 69 ************************************************************************
 70 *                  S U B R O U T I N E S                               *
 71 ************************************************************************
 72 *&---------------------------------------------------------------------*
 73 *&      Form  FRM_SET_DROPDOWNLIST
 74 *&---------------------------------------------------------------------*
 75 FORM frm_set_dropdownlist.
 76 
 77   DATA: lv_name TYPE vrm_id,
 78         lt_list TYPE vrm_values,
 79         lw_value LIKE LINE OF lt_list.
 80 
 81   CLEAR: lv_name,lt_list[],lw_value.
 82   lv_name = 'DDLBWART'.
 83 
 84 * 关联控件名
 85   lw_value-text = '251-仓库中的销售消耗'.
 86   lw_value-key = '251'.
 87   APPEND lw_value TO lt_list.
 88 
 89   lw_value-text = '252-仓库中的销售消耗 - 冲销'.
 90   lw_value-key = '252'.
 91   APPEND lw_value TO lt_list.
 92 
 93   lw_value-text = '551-发货报废'.
 94   lw_value-key = '551'.
 95   APPEND lw_value TO lt_list.
 96 
 97   lw_value-text = 'Z01-物耗及零配件'.
 98   lw_value-key = 'Z01'.
 99   APPEND lw_value TO lt_list.
100 
101   lw_value-text = 'Z81-样品送样&福利领用'.
102   lw_value-key = 'Z81'.
103   APPEND lw_value TO lt_list.
104 
105 
106   CALL FUNCTION 'VRM_SET_VALUES'
107     EXPORTING
108       id              = lv_name
109       values          = lt_list
110     EXCEPTIONS
111       id_illegal_name = 1
112       OTHERS          = 2.
113   IF sy-subrc <> 0.
114 * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
115 *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
116   ENDIF.
117 
118 ENDFORM.                    " FRM_SET_DROPDOWNLIST

 

posted @ 2013-02-19 15:25  沙茶叶  阅读(4897)  评论(0编辑  收藏  举报