Как отобразить itab в ALV с динамическим вариантом макета?

Я использую класс CL_GUI_ALV_GRID и экран dynpro для отображения внутренней таблицы с помощью инструмента ALV.

На моем экране выбора у меня есть раскрывающийся список, в котором пользователь может выбрать вариант макета для отображаемой внутренней таблицы. Варианты компоновки хранятся в таблице LTDX.

Теперь вернемся к моему вопросу, как я могу отображать варианты в зависимости от выбора пользователя?


person BMW3000    schedule 11.02.2019    source источник


Ответы (1)


Вы указываете в исходном set_table_for_first_display методе параметр is_variant:

DATA: ls_variant TYPE disvariant.


CLEAR: ls_variant.
ls_variant-report   = sy-repid.
ls_variant-variant  = pa_varid. "<<< this is the name of the variant

CALL METHOD gro_alv100->set_table_for_first_display
      EXPORTING
        is_variant                    = ls_variant
        ...

РЕДАКТИРОВАТЬ: хорошо, вы не приняли простой ответ, поэтому я добавлю ручную альтернативу:

FORM set_variant USING ps_variant TYPE disvariant.

  DATA: lf_user_specific TYPE char1,
        ls_stable  TYPE lvc_s_stbl VALUE 'XX'.

  CHECK ps_variant-variant IS NOT INITIAL.

  lf_user_specific = boolc( ps_variant-variant(1) <> '/' ).
  CALL FUNCTION 'LVC_VARIANT_SELECT'
    EXPORTING
      i_dialog            = space
      i_user_specific     = lf_user_specific
      i_default           = space
      it_default_fieldcat = gt_fcat
    IMPORTING
      et_fieldcat         = gt_fcat
      et_sort             = gt_sort
      et_filter           = gt_filter 
    TABLES
      it_data             = gt_outtab
    CHANGING
      cs_variant          = ps_variant
    EXCEPTIONS
      wrong_input         = 1
      fc_not_complete     = 2
      not_found           = 3
      program_error       = 4
      data_missing        = 5
      OTHERS              = 6.
  IF sy-subrc <> 0.
  ENDIF.

  gro_alv100->set_variant( EXPORTING is_variant = ps_variant ).
  gro_alv100->set_frontend_fieldcatalog( EXPORTING it_fieldcatalog = gt_fcat ).
  gro_alv100->set_sort_criteria( EXPORTING it_sort = gt_sort ).
  gro_alv100->set_filter_criteria( EXPORTING it_filter = gt_filter ).

  gro_alv100->refresh_table_display( EXPORTING is_stable = ls_stable i_soft_refresh = abap_false ).
ENDFORM.
person futu    schedule 11.02.2019