0

ALV_GRID のレイアウトのバリアントを使用します

FORM display_alv .
  DATA: lr_event    TYPE REF TO lcl_zcad_0004,
        ls_varia    TYPE disvariant.

  IF gr_alvpl IS NOT BOUND.
    PERFORM build_fieldcatalog.
    PERFORM alv_clear_std_toolbar.
    PERFORM build_alv_table.

    IF gv_vmode EQ 'N'.
      PERFORM alv_dragdrop.
    ENDIF.

    CREATE OBJECT gr_alvpl
       EXPORTING
         i_parent                    = gc_cnalv.

    CREATE OBJECT lr_event.

    gs_layou-sel_mode             = 'D'.
    gs_layou-ctab_fname           = 'COLCL'.
    gs_layou-cwidth_opt           = 'A'.

    SET HANDLER: lr_event->handle_toolbar   FOR gr_alvpl,
                 lr_event->handle_ucomm     FOR gr_alvpl,
                 lr_event->double_click     FOR gr_alvpl.

    IF gv_vmode EQ 'N'.
      SET HANDLER: lr_event->on_drag          FOR gr_alvpl,
                   lr_event->on_drop          FOR gr_alvpl.
    ENDIF.

    ls_varia-report                 = sy-repid.

    CALL METHOD gr_alvpl->set_table_for_first_display
        EXPORTING
          it_toolbar_excluding      = gt_exctb
          is_layout                 = gs_layou
          i_save                    = 'A'
          is_variant                = ls_varia
        CHANGING
          it_outtab                 = gt_tbalv
          it_fieldcatalog           = gt_fldct.

*     Calling the interactive toolbar method of ALV
      CALL METHOD gr_alvpl->set_toolbar_interactive.

      PERFORM maj_titre_alv.
  ENDIF.

ENDFORM.                    " DISPLAY_ALV

ご覧のとおり、表示バリアントを検討しますls_variaが、後でテーブルを更新すると、この表示バリアントは失われます。

特定のボタンをクリックするか、特定のアクションをトリガーすると、次のようにテーブルを更新します。

FORM refresh_alv USING iv_rfalv TYPE xfeld.
  DATA: ls_varia    TYPE disvariant.

  PERFORM build_fieldcatalog.

  IF iv_rfalv EQ 'X'.
    gr_alvpl->set_frontend_layout( gs_layou ).
    CALL METHOD gr_alvpl->set_frontend_fieldcatalog
                EXPORTING
                  it_fieldcatalog = gt_fldct.

    PERFORM maj_titre_alv.
    gr_alvpl->get_variant( IMPORTING ES_VARIANT = ls_varia  ).
    gr_alvpl->set_variant( EXPORTING is_variant = ls_varia
                                     i_save    = 'A' ).
    CALL METHOD gr_alvpl->refresh_table_display(
*                                                  is_stable       = ls_stabl
                                                 i_soft_refresh  = 'X'
                                                   ).
     gr_alvpl->set_variant( is_variant = ls_varia ).
  ENDIF.

ENDFORM.                    " REFRESH_ALV

ご覧のとおり、表示バリアントを取得して ALV に再割り当てしようとしていますが、何も考慮されていません。

感謝をこめて

4

0 に答える 0