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