Как поднять PBO в предыдущем модальном диалоге? - PullRequest
0 голосов
/ 08 января 2019

У меня есть два диалога, один из которых вызывает другой. Чтобы уточнить, что я имею в виду, давайте посмотрим на первый диалог:

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 голосов
/ 08 января 2019

Вы не должны использовать ЭКРАН ВЫЗОВА «0100», НАЧИНАЮЩАЯСЯ В 8 8.

Ниже приведен пример кода для вызова всплывающего экрана. Когда всплывающее окно закрыто, вы можете написать код для обновления первых данных экрана ALV.

  TYPES: BEGIN OF alv_line,
             carrid   TYPE spfli-carrid,
             connid   TYPE spfli-connid,
             cityfrom TYPE spfli-cityfrom,
             cityto   TYPE spfli-cityto,
           END OF alv_line.
    DATA   alv_tab    TYPE TABLE OF alv_line.
    SELECT carrid, connid, cityfrom, cityto
           FROM spfli
           WHERE carrid = @carrid
           INTO CORRESPONDING FIELDS OF TABLE @alv_tab.
    IF sy-subrc <> 0.
      MESSAGE e007(sabapdemos).
    ENDIF.
    TRY.
        cl_salv_table=>factory(
          IMPORTING r_salv_table = DATA(alv)
          CHANGING  t_table = alv_tab ).
        alv->set_screen_popup( start_column = 1
                               end_column   = 60
                               start_line   = 1
                               end_line     = 12 ).
        alv->display( ).
      CATCH cx_salv_msg.
        MESSAGE 'ALV display not possible' TYPE 'I'
                DISPLAY LIKE 'E'.
    ENDTRY.
0 голосов
/ 08 января 2019

Я предполагаю, что метод 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.

Предполагая, что вы запрограммировали сетку ALV с классом CL_GUI_ALV_GRID, добавьте этот код:

" 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( ).
...