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