`
ihuashao
  • 浏览: 4547100 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

ABAP--SAP是如何控制REUSE_ALV_GRID_DISPLAY函数嵌套调用的返回控制

阅读更多

最近无事对REUSE_ALV_GRID_DISPLAY函数代码又进行了一次阅读,发现该函数使用了堆栈进行嵌套调用的控制。sap使用全局内表gt_grid作为堆栈,每次调用REUSE_ALV_GRID_DISPLAY函数都会调用globals_push子过程进行入栈处理,返回时globals_pop会调用做出站处理。这样就保证了屏幕之间的切换的准确性。

代码摘抄如下,参见红色标记

function reuse_alv_grid_display. "#EC *
*"----------------------------------------------------------------------
*"*"Globale Schnittstelle:
*" IMPORTING
*" REFERENCE(I_INTERFACE_CHECK) DEFAULT SPACE
*" VALUE(I_BYPASSING_BUFFER) TYPE CHAR01 DEFAULT SPACE
*" VALUE(I_BUFFER_ACTIVE) DEFAULT SPACE
*" REFERENCE(I_CALLBACK_PROGRAM) LIKE SY-REPID DEFAULT SPACE
*" REFERENCE(I_CALLBACK_PF_STATUS_SET) TYPE SLIS_FORMNAME DEFAULT
*" SPACE
*" REFERENCE(I_CALLBACK_USER_COMMAND) TYPE SLIS_FORMNAME DEFAULT
*" SPACE
*" REFERENCE(I_CALLBACK_TOP_OF_PAGE) TYPE SLIS_FORMNAME DEFAULT
*" SPACE
*" REFERENCE(I_CALLBACK_HTML_TOP_OF_PAGE) TYPE SLIS_FORMNAME
*" DEFAULT SPACE
*" REFERENCE(I_CALLBACK_HTML_END_OF_LIST) TYPE SLIS_FORMNAME
*" DEFAULT SPACE
*" REFERENCE(I_STRUCTURE_NAME) LIKE DD02L-TABNAME OPTIONAL
*" REFERENCE(I_BACKGROUND_ID) TYPE SDYDO_KEY DEFAULT SPACE
*" REFERENCE(I_GRID_TITLE) TYPE LVC_TITLE OPTIONAL
*" REFERENCE(I_GRID_SETTINGS) TYPE LVC_S_GLAY OPTIONAL
*" REFERENCE(IS_LAYOUT) TYPE SLIS_LAYOUT_ALV OPTIONAL
*" REFERENCE(IT_FIELDCAT) TYPE SLIS_T_FIELDCAT_ALV OPTIONAL
*" REFERENCE(IT_EXCLUDING) TYPE SLIS_T_EXTAB OPTIONAL
*" REFERENCE(IT_SPECIAL_GROUPS) TYPE SLIS_T_SP_GROUP_ALV OPTIONAL
*" REFERENCE(IT_SORT) TYPE SLIS_T_SORTINFO_ALV OPTIONAL
*" REFERENCE(IT_FILTER) TYPE SLIS_T_FILTER_ALV OPTIONAL
*" REFERENCE(IS_SEL_HIDE) TYPE SLIS_SEL_HIDE_ALV OPTIONAL
*" REFERENCE(I_DEFAULT) DEFAULT 'X'
*" REFERENCE(I_SAVE) DEFAULT SPACE
*" REFERENCE(IS_VARIANT) LIKE DISVARIANT STRUCTURE DISVARIANT
*" OPTIONAL
*" REFERENCE(IT_EVENTS) TYPE SLIS_T_EVENT OPTIONAL
*" REFERENCE(IT_EVENT_EXIT) TYPE SLIS_T_EVENT_EXIT OPTIONAL
*" REFERENCE(IS_PRINT) TYPE SLIS_PRINT_ALV OPTIONAL
*" REFERENCE(IS_REPREP_ID) TYPE SLIS_REPREP_ID OPTIONAL
*" REFERENCE(I_SCREEN_START_COLUMN) DEFAULT 0
*" REFERENCE(I_SCREEN_START_LINE) DEFAULT 0
*" REFERENCE(I_SCREEN_END_COLUMN) DEFAULT 0
*" REFERENCE(I_SCREEN_END_LINE) DEFAULT 0
*" REFERENCE(IT_ALV_GRAPHICS) TYPE DTC_T_TC OPTIONAL
*" REFERENCE(IT_HYPERLINK) TYPE LVC_T_HYPE OPTIONAL
*" REFERENCE(IT_ADD_FIELDCAT) TYPE SLIS_T_ADD_FIELDCAT OPTIONAL
*" REFERENCE(IT_EXCEPT_QINFO) TYPE SLIS_T_QINFO_ALV OPTIONAL
*" REFERENCE(I_HTML_HEIGHT_TOP) TYPE I OPTIONAL
*" REFERENCE(I_HTML_HEIGHT_END) TYPE I OPTIONAL
*" EXPORTING
*" REFERENCE(E_EXIT_CAUSED_BY_CALLER)
*" REFERENCE(ES_EXIT_CAUSED_BY_USER) TYPE SLIS_EXIT_BY_USER
*" TABLES
*" T_OUTTAB
*" EXCEPTIONS
*" PROGRAM_ERROR
*"----------------------------------------------------------------------

clear e_exit_caused_by_caller.
clear es_exit_caused_by_user.

*... Trace?
if ( cl_alv_trace=>is_trace_on( ) eq 1 ).
create object mr_trace.

call method mr_trace->add_trace_item
exporting
i_trace_item = 'REUSE_ALV_GRID_DISPLAY'
is_vari_slis = is_variant
is_layo_slis = is_layout
is_prnt_slis = is_print
it_fcat_slis = it_fieldcat
it_sort_slis = it_sort
it_filt_slis = it_filter.
endif.

free memory id 'DYNDOS_FOR_ALV'.

perform globals_push.

gt_grid-flg_first_time = 'X'.

perform reprep_check.

g_repid = sy-repid.

if i_screen_start_column is initial and
i_screen_start_line is initial and
i_screen_start_column is initial and
i_screen_end_line is initial.
gt_grid-flg_popup = space.
call screen 500.
else.
gt_grid-flg_popup = 'X'.
call screen 700
starting at i_screen_start_column i_screen_start_line
ending at i_screen_end_column i_screen_end_line.
endif.

perform globals_pop.

clear g_repid.

endfunction.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics