单元格中的数据被修改后,将ALV单元格中的数据立即刷新到ABAP对应的内表中
方法一:通过对 REUSE_ALV_GRID_DISPLAY 函数参数 i_grid_settings-edt_cll_cb 进行设置
DATA:gs_grid_settings TYPE lv_s_glay.
gs_grid_settings-edt_cll_cb = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_grid_settings = gs_grid_settings
方法二:通过函数参数 I_CALLBACK_USER_COMMAND 指定的回调 Form 的参数 slis_selfield 进行设置
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
rs_selfield-refresh = 'X'.
CASE r_ucomm.
WHEN 'UPDATE'.
PERFORM frm_update.
ENDCASE.
ENDFORM.
按钮使用后刷新ALV
FORM frm_user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN 'PROFIT'.
perform frm_cycle_count_profit.
WHEN others.
ENDCASE.
rs_selfield-refresh = 'X'.
ENDFORM.
稳定刷新
OO ALV
如果使用 “REFRESH_TABLE_DISPLAY” 刷新 ALV 后,记录会跳到第一行,以下代码可以使记录仍然定位在当前行
DATA gs_stable TYPE lvc_s_stbl.
gs_stable-row = 'X'.
gs_stable-col = 'X'.
CALL METHOD go_grid->refresh_table_display
EXPORTING
is_stable = gs_stable
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
Function ALV
使用类似的方法,但是要先把当前 ALV 网格 “对象化”。
注意: FUNCTION ALV 中一般是在 user_command 中加上 rs_selfield-refresh = 'X'. 来刷新 ALV 的,所以当使用稳定刷新以后,不能再用该语句了。
DATA go_grid TYPE REF TO cl_gui_alv_grid.
DATA gs_stbl TYPE lvc_s_stbl.
"把当前网格赋给对象 go_grid"
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = go_grid.
" 调用 CHECK_CHANGED_DATA 可以使被修改的数据自动更新到内表中去 "
CALL METHOD go_grid->check_changed_data.
" 稳定刷新 "
gs_stbl-row = 'X'." 基于行的稳定刷新
gs_stbl-col = 'X'." 基于列稳定刷新
CALL METHOD go_grid->refresh_table_display
EXPORTING
is_stable = gs_stbl
i_soft_refresh = 'X'
EXCEPTIONS
finished = 1
others = 2.
Search help 的创建
PROCESS ON VALUE-REQUEST.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR xxx.
在屏幕的 ON VALUE—REQUEST 事件里可以通过下面方法来创建搜索帮助
标准方法
日历对话框
PARAMETERS: p_date TYPE sy-datum.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_date.
CALL FUNCTION 'F4_DATE'
EXPORTING
date_for_first_month = sy-datum
IMPORTING
select_date = p_date "用户选择后返回的日期"
EXCEPTIONS
calendar_buffer_not_loadable = 1
date_after_range = 2
date_before_range = 3
date_invalid = 4
factory_calendar_not_found = 5
holiday_calendar_not_found = 6
parameter_conflict = 7
OTHERS = 8.
自定义方法
-
F4IF_FIELD_VALUE_REQUEST: 函数的作用是在运行时,可以动态的为某个屏幕字段指定Search Help ,这个被引用的 Help 来自某个表(或结构)字段上绑定的 Help -
F4IF_INT_TABLE_VALUE_REQUEST: 在程序运行时, 将某个内表动态的用作 Search help 的数据来源,即使用该函数可以将某个内表转换为 Search help ,可实现联动效果 -
TR_F4_HELP:简单实现 Search Help ,数据来源于内表
DATA:BEGIN OF it_matf4 OCCURS 0 ,
zucode LIKE zecs_mat-zimport_code,
g_code LIKE zecs_mat-g_code,
g_name LIKE zecs_mat-g_name,
zstate LIKE zecs_hd-zstate,
zby LIKE zecs_hd-zby,
END OF it_matf4.
DATA: it_return LIKE ddshretval OCCURS 0 WITH HEADER LINE.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_TIMSTP-LOW.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE IT_MATF4
FROM <table>
WHERE <var> = <option>.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' "F4输出函数"
EXPORTING
* DDIC_STRUCTURE = ' '
RETFIELD = 'ZUCODE' "field of internal table"
VALUE_ORG = 'S'
CALLBACK_PROGRAM = SY-REPID
CALLBACK_FORM = 'FRM_F4CALLBACK'
TABLES
VALUE_TAB = IT_MATF4
* FIELD_TAB =
RETURN_TAB = IT_RETURN.
WRITE IT_RETURN-FIELDVAL TO S_TIMSTP-LOW.
REFRESH IT_MATF4.
FORM frm_f4callback TABLES record_tab STRUCTURE seahlpres
CHANGING shlp TYPE shlp_descr
callcontrol LIKE ddshf4ctrl.
DATA: wa_selopt TYPE ddshselopt.
DATA: lt_value TYPE TABLE OF ddshfprop,
ls_value TYPE ddshfprop.
lt_value[] = shlp-fieldprop[].
READ TABLE lt_value INTO ls_value WITH KEY fieldname = 'F0004'.
IF sy-subrc = 0.
ls_value-defaultval = '''4'''.
MODIFY lt_value FROM ls_value INDEX sy-tabix.
ENDIF.
shlp-fieldprop[] = lt_value[].
ENDFORM. "FRM_F4CALLBACK"
双击字段功能
FORM frm_user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA lv_index TYPE i.
IF r_ucomm = '&IC1'.
lv_index = rs_selfield-tabindex.
READ it_table INDEX lv_index.
"程序调用传参"
SUBMIT z_pro AND RETURN WITH p_param1 = it_table-param1
WITH p_param2 = it_table-param2.
"如果是TCode - CALL Transation"
"传入输入参数值并调用其他TCode"
SET PARAMETER ID 'ANR' FIELD it_table-aufnr.
CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN. "跳过第一屏屏幕"
ENDIF.
ENDFORM.