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

来源:互联网 发布:ps4刷windows 编辑:程序博客网 时间:2024/05/21 07:08

最近无事对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.

原创粉丝点击