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