如何在以前的模态对话框上提高PBO?

时间:2019-01-08 07:33:15

标签: abap

我有两个对话框,其中一个调用另一个。为了澄清我的意思,让我们看一下第一个对话框:

enter image description here

如您在屏幕上看到的,它包含ALV。当我单击该行时,它将打开第二个对话框:
enter image description here

当我关闭第二个对话框时,我想在第一个屏幕上触发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. 

更新

我认为这些图片并不清楚我的意思。现在应该更好:

enter image description here

第一个模态调用第二个模态。当第二个模式关闭时,则应刷新第一个屏幕上的ALV。我无法刷新它,因为关闭第二个模式后,第一个屏幕上的PBO不会执行。

2 个答案:

答案 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