ABAP选择界面实现Layout选取

2019-07-22  本文已影响0人  JayDragon

像下图这样,用户查询ALV数据时根据需要选取符合自己的布局方式(由用户自己设定)

Layout选取.png

选择界面放置Layout选取框:

SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE text-t01.
PARAMETER p_vari LIKE disvariant-variant.
SELECTION-SCREEN  END OF BLOCK bk1.

相关变量定义:

DATA: variante        LIKE disvariant,
      def_variante    LIKE disvariant,
      def_variante_f4 LIKE disvariant,
      gv_vari         LIKE disvariant-variant,
      gv_repid        LIKE sy-repid VALUE sy-repid,
      variant_exit(1) TYPE c.

在初始化事件中获取默认Layout:

INITIALIZATION.
  PERFORM get_variant.

FORM get_variant .
  variante-report      = gv_repid.
  def_variante = variante.
  CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
    EXPORTING
      i_save     = 'A'
    CHANGING
      cs_variant = def_variante
    EXCEPTIONS
      not_found  = 2.
  IF sy-subrc = 0.
    gv_vari = def_variante-variant.
  ENDIF.
  p_vari = gv_vari.
ENDFORM.                    " GET_VARIANT

然后设置F4事件:

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
  PERFORM f4_for_variant.

FORM f4_for_variant .
  CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
    EXPORTING
      is_variant    = variante
      i_save        = 'A'
    IMPORTING
      e_exit        = variant_exit
      es_variant    = def_variante_f4
    EXCEPTIONS
      not_found     = 1
      program_error = 2
      OTHERS        = 3.
  IF sy-subrc = 0.
    IF variant_exit = space.
      p_vari = def_variante_f4-variant.
      gv_vari = p_vari.
    ENDIF.
  ENDIF.

ENDFORM.                    " F4_FOR_VARIANT

最后调用函数显示ALV时,加上参数:

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = gv_repid
      i_callback_pf_status_set = 'SET_PF_STATUS'
      i_callback_user_command  = 'USER_COMMAND'
      is_layout                = ls_layout
      it_fieldcat              = gt_fieldcat
      i_save                   = 'A'
      is_variant               = def_variante_f4
    TABLES
      t_outtab                 = gt_out
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
上一篇 下一篇

猜你喜欢

热点阅读