我有两个对话框,其中一个调用另一个。为了澄清我的意思,让我们看一下第一个对话框:
如您在屏幕上看到的,它包含ALV。当我单击该行时,它将打开第二个对话框:
当我关闭第二个对话框时,我想在第一个屏幕上触发PBO以重新渲染ALV。如何存档?
更新 代码,调用第二个屏幕:
METHOD handle_double_click.
FIELD-SYMBOLS <lt_task> TYPE STANDARD TABLE.
FIELD-SYMBOLS <ls_task> TYPE any.
FIELD-SYMBOLS <ls_clicked_data> TYPE any.
DATA(lo_task_provider) = lcl_alv_task_provider=>get_instance( ).
DATA(lt_task) = lo_task_provider->c_gt_data.
ASSIGN lt_task->* TO <lt_task>.
IF sy-subrc <> 0 OR <lt_task>[] IS INITIAL.
RETURN.
ENDIF.
CREATE DATA lo_task_provider->c_gs_clicked_data LIKE LINE OF <lt_task>.
ASSIGN lo_task_provider->c_gs_clicked_data->* TO <ls_clicked_data>.
READ TABLE <lt_task> ASSIGNING <ls_task> INDEX e_row.
<ls_clicked_data> = <ls_task>.
zdp2_planning_split = me->fill_splitt_info( <ls_task> ).
DATA(ls_planning_split_alv) = VALUE zdp2_planning_split_alv( matnr = zdp2_planning_split-matnr
lfdat = zdp2_planning_split-lfdat
sollmng = zdp2_planning_split-sollmng
meins = zdp2_planning_split-meins ).
DATA(lt_planning_split_alv) = VALUE zdp2_planning_split_alv_t( ).
INSERT ls_planning_split_alv INTO TABLE lt_planning_split_alv.
lcl_alv_split_provider=>get_instance( )->insert_data( lt_planning_split_alv ).
CALL SCREEN '0100' STARTING AT 8 8.
ENDMETHOD.
更新
我认为这些图片并不清楚我的意思。现在应该更好:
第一个模态调用第二个模态。当第二个模式关闭时,则应刷新第一个屏幕上的ALV。我无法刷新它,因为关闭第二个模式后,第一个屏幕上的PBO不会执行。
答案 0 :(得分:1)
我猜想HANDLE_DOUBLE_CLICK
的事件DOUBLE_CLICK
会触发方法CL_GUI_ALV_GRID
。此事件仅触发一个方法,它不会启动PAI(因此也不会触发PBO)。
如果要触发PAI,只需添加此行(您必须在此处指示功能代码,此处为“ ZZZ”):
cl_gui_cfw=>set_new_ok_code( new_code = 'ZZZ' ).
但是,相反,在CALL SCREEN
之后,为什么不刷新 ALV网格呢?
假设您使用类CL_GUI_ALV_GRID
对ALV网格进行了编程,请添加以下代码:
" first update the internal table of the ALV
...
" transfer the internal table to the control, it also does an "update_view"
alv_grid->refresh_table_display( ).
答案 1 :(得分:0)
您不应使用从8月8日开始的CALL SCREEN'0100'。
以下是调用弹出屏幕的示例代码,当弹出屏幕关闭时,您可以编写代码以刷新第一个ALV屏幕数据。
sudo apt-get install composer