更改ALV字段並同步自建數據表
參考ABAP
數據表操作教程。
ALV報表數據怎麼可以實現可編輯? 然後可以保存到自建表ZTVBAP_TEST
中?
-
修改ALV字段展示屬性值。
"修改alv顯示字段屬性 edit wa_fieldcat-edit = 'X'. "指定顯示字段可編輯 MODIFY it_fieldcat FROM wa_fieldcat TRANSPORTING edit WHERE fieldname = 'KWMENG'. CLEAR wa_fieldcat.
-
聲明與自建表同名的工作區, 並定義一個內表
"聲明與自建表同名的工作區 TABLES:ZTVBAP_TEST. "定義一個內表 DATA: IT_ZTVBAP_TEST TYPE STANDARD TABLE OF ZTVBAP_TEST.
-
執行點擊保存事件,調子程序:
PERFORM SAVE_DATA.
* 定義 響應執行事件的子程序 FORM USER_COMMAND USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. CASE r_ucomm. WHEN '&IC1'. * MESSAGE I003(Z_FC). MESSAGE I002(Z_FC) WITH rs_selfield-tabindex rs_selfield-fieldname. WHEN 'MESS'. MESSAGE '你點擊了消息按鈕' TYPE 'I'. WHEN 'CLEAR'. PERFORM clear_data. "清空字段數據 rs_selfield-refresh = 'X'. "刷新界面 WHEN '&DATA_SAVE'. " 保存數據 PERFORM SAVE_DATA. WHEN OTHERS. ENDCASE. ENDFORM.
-
子程序
GET_GLOBALS_FROM_SLVC_FULLSCR
函數將傳統的alv轉變爲面向對象的alv,可以保證數據同步。FORM save_data . DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID. " 使用OO 的刷新方式,先使用GET_GLOBALS_FROM_SLVC_FULLSCR接收屏幕ALV,放置容器,再調用刷新方法 CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' * EXPORTING * IR_SALV_FULLSCREEN_ADAPTER = IMPORTING * ET_EXCLUDING = * E_REPID = * E_CALLBACK_PROGRAM = * E_CALLBACK_ROUTINE = E_GRID = G_GRID * ET_FIELDCAT_LVC = * ER_TRACE = * E_FLG_NO_HTML = * ES_LAYOUT_KKBLO = * ES_SEL_HIDE = * ET_EVENT_EXIT = * ER_FORM_TOL = * ER_FORM_EOL = . " 同步數據 將alv中的數據同步到內表中 CALL METHOD g_grid->check_changed_data * IMPORTING * e_valid = * CHANGING * c_refresh = 'X' . "獲取數據 LOOP AT it_vbap INTO wa_vbap. " 只有 wa_vbap 中的字段與 ZTVBAP_TEST 字段一致的纔會遷移。 " MOVE-CORRESPONDING wa_vbap TO ZTVBAP_TEST. ZTVBAP_TEST-ZWERKS = wa_vbap-werks. ZTVBAP_TEST-ZMATNR = wa_vbap-MATNR. ZTVBAP_TEST-ZKWMENG = wa_vbap-KWMENG. ZTVBAP_TEST-ZMEINS = wa_vbap-MEINS. APPEND ZTVBAP_TEST TO IT_ZTVBAP_TEST. CLEAR ZTVBAP_TEST. ENDLOOP. " 更新或新建數據 MODIFY ZTVBAP_TEST FROM TABLE IT_ZTVBAP_TEST. ENDFORM.