对ALV标准GUI的增加,删除操作

ALV 显示中默认会调用标准的 ALV GUI,可是有时候我们需要禁止或增加系统中已经有的一些GUI STATUS的功能。

1.首先到SE41中COPY 一个GUI STATUS 到要用的programm中。

   可以COPY PROGRAMM : SAPLKKBL  STATUS : STANDARD_FULLSCREEN中到需要程序的STATUS中。

2.在程序中做STATUS的替换动作了,也就是在CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 的时候,参数

I_CALLBACK_PF_STATUS_SET   = 'SET_PF_STATUS',这里SET_PF_STATUS是form的名字。

*&---------------------------------------------------------------------*
*& Report  ZEASYALVTEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZEASYALVLAOUTTEST MESSAGE-ID ZEASYMESSAGE.
INCLUDE <ICON>.
INCLUDE <SYMBOL>.
TABLES : SPFLI.
SELECT-OPTIONS : S_CARR FOR SPFLI-CARRID,
                 S_CONN FOR SPFLI-CONNID.
PARAMETERS p_layout LIKE disvariant-variant.
TYPES : TY_SPFLI TYPE  SPFLI .
DATA  : IT_SPFLI TYPE TABLE OF TY_SPFLI WITH HEADER LINE.
TYPES :  BEGIN OF TY_ALV_SPFLI.                                    "
           INCLUDE TYPE TY_SPFLI.
TYPES :    exception TYPE C.
TYPES :    CHECKBOX TYPE C.
TYPES :    icon TYPE icon_d.
TYPES :    symbol TYPE icon_d.


TYPES :  END OF TY_ALV_SPFLI.
DATA :   ALV_SPFLI TYPE TABLE OF TY_ALV_SPFLI WITH HEADER LINE.
*&------------------------------------*
*&-- DECLARE DATA FOR ALV
*&-----------------------------------*
TYPE-POOLS: slis.
DATA  : g_variant LIKE disvariant,
        g_save(1) TYPE c,
        g_exit(1) TYPE c,
        gx_variant LIKE disvariant.
**-------------------------------------*
DATA : G_REPID LIKE SY-REPID.
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
      gt_events   TYPE slis_t_event ,
      gt_list_top_of_page TYPE slis_t_listheader,
      gs_print TYPE slis_print_alv,
      gs_layout         TYPE slis_layout_alv .
G_REPID = SY-REPID.
AT SELECTION-SCREEN ON  VALUE-REQUEST FOR p_layout.
  PERFORM f_f4_layout CHANGING p_layout.
START-OF-SELECTION.
SELECT * INTO TABLE  IT_SPFLI
         FROM SPFLI
         WHERE CARRID IN S_CARR
           AND CONNID IN S_CONN.
CHECK IT_SPFLI[] IS NOT INITIAL.
LOOP AT IT_SPFLI.
MOVE-CORRESPONDING IT_SPFLI TO ALV_SPFLI.
ALV_SPFLI-EXCEPTION = '3'.
ALV_SPFLI-CHECKBOX = 'X'.
ALV_SPFLI-ICON = icon_detail.
ALV_SPFLI-symbol = sym_folder.
*ALV_SPFLI[] = IT_SPFLI[].
APPEND ALV_SPFLI.
ENDLOOP.
PERFORM DISPLAYALV.
*&---------------------------------------------------------------------*
*&      Form  DISPLAYALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAYALV .
*-- PREPARE ALV DATA
  PERFORM EVENTTAB_BUILD USING GT_EVENTS[].
  PERFORM COMMENT_BUILD  USING GT_LIST_TOP_OF_PAGE[].
*-- LAYOUT SETTING
  PERFORM PREPARE_ALV_FIELD USING GT_FIELDCAT[].
*-- ALV DISPLAY
*-- 半自动生产FIELDCAT
*  PERFORM AUTO_GET_FIELDCAT.
*  PERFORM ALV_FIECAT.
  PERFORM CALL_REUSE_ALV_GRID_DISPLAY.

ENDFORM.                    " DISPLAYALV

*&---------------------------------------------------------------------*
*&      Form  EVENTTAB_BUILD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GT_EVENTS[]  text
*----------------------------------------------------------------------*
FORM EVENTTAB_BUILD  USING PT_EVENTS TYPE SLIS_T_EVENT.
  DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
*
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      I_LIST_TYPE = 0
    IMPORTING
      ET_EVENTS   = PT_EVENTS.
  READ TABLE PT_EVENTS WITH KEY NAME =  SLIS_EV_TOP_OF_PAGE
                           INTO LS_EVENT.
  IF SY-SUBRC = 0.
    LS_EVENT-FORM = 'TOP_OF_PAGE'.
    MODIFY PT_EVENTS FROM LS_EVENT INDEX SY-TABIX.
  ENDIF.
ENDFORM.                    " EVENTTAB_BUILD
*&---------------------------------------------------------------------*
*&      Form  PREPARE_ALV_FIELD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GT_FIELDCAT[]  text
*----------------------------------------------------------------------*
FORM PREPARE_ALV_FIELD  USING P_FIELDCAT TYPE  SLIS_T_FIELDCAT_ALV.
  DATA: LS_LINE TYPE  SLIS_FIELDCAT_ALV.
  DATA: dat type d,
      datt(10).
*-- DEFINE MARCO
  DEFINE APPEND_ALV_FIELD.
    CLEAR LS_LINE.
    LS_LINE-FIELDNAME = &1.
    LS_LINE-TABNAME = &2.
    LS_LINE-REPTEXT_DDIC = &3.
    LS_LINE-SELTEXT_L = &3.
    LS_LINE-SELTEXT_M = &3.
    LS_LINE-SELTEXT_S = &3.
*    LS_LINE-QFIELDNAME = &4.
    LS_LINE-CHECKBOX = &4.
*    LS_LINE-symbol = &4.
*    LS_LINE-QTABNAME = &5.
    LS_LINE-EDIT = &5.
    LS_LINE-NO_OUT    = &6.
    LS_LINE-NO_ZERO   = &7.
*    LS_LINE-OUTPUTLEN = &8.
    LS_LINE-KEY = &8.
    LS_LINE-fix_column = &8.
    LS_LINE-lzero = &9.                                            "输出前导0.
    APPEND LS_LINE TO P_FIELDCAT.
  END-OF-DEFINITION.

  APPEND_ALV_FIELD: 'CARRID' 'ALV_SPFLI'  '航线承运人ID'          "DN
                  '' ''
                  'O' 'X' 'X' ''.

  APPEND_ALV_FIELD: 'CONNID' 'ALV_SPFLI' '航班连接 Id'          "MBLNO
                    '' ''
                    'O' '' 'X' 'X'.
  APPEND_ALV_FIELD: 'CITYFROM' 'ALV_SPFLI' '起飞城市'           "HBLNO
                    '' ''
                    'O' 'X' '' ''.
  APPEND_ALV_FIELD: 'CITYTO' 'ALV_SPFLI' '目标城市'           "SENDTIMES  SELLERNAME
                   '' ''
                   'O' 'X' '' ''.
  APPEND_ALV_FIELD: 'DISTANCE' 'ALV_SPFLI' '距离'         "
                   '' ''
                   'O' 'X' '' ''.
*"checkbox
*
* CLEAR LS_LINE.
*
* LS_LINE-fieldname = 'CHECKBOX'.
*
* LS_LINE-seltext_l = 'Checkbox'.
*
* LS_LINE-checkbox = 'X'.
*
* LS_LINE-fix_column = 'X'.
*
* APPEND LS_LINE TO P_FIELDCAT.
*
* "icon
*
* CLEAR LS_LINE.
*
* LS_LINE-fieldname = 'ICON'.
*
* LS_LINE-seltext_l = 'Icon'.
*
* LS_LINE-icon = 'X'.
*
* APPEND LS_LINE TO P_FIELDCAT.
*
*
*
* "symbol
*
* CLEAR LS_LINE.
*
* LS_LINE-fieldname = 'SYMBOL'.
*
* LS_LINE-seltext_l = 'Symbol'.
*
* LS_LINE-symbol = 'X'.
*
* APPEND LS_LINE TO P_FIELDCAT.


  ENDFORM.                    " PREPARE_ALV_FIELD

*&---------------------------------------------------------------------*
*&      Form  CALL_REUSE_ALV_GRID_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CALL_REUSE_ALV_GRID_DISPLAY .
  gs_layout-f2code              = 'DISPLAY'.
  gs_print-no_print_listinfos   = 'X'.
  gs_layout-colwidth_optimize   = 'X'.       "列宽度自动根据内容优化
**  gs_layout-f2code              = '&ETA'.    "double check弹出详细信息
**  gs_layout-zebra               = 'X'.       "清单条纹显示
*  gs_layout-no_vline            = ''.        "是否显示列间隔线
*  gs_layout-box_fieldname       = 'X'.        "是否显示checkbox
  gs_layout-confirmation_prompt = ''.        "推出清单是否提示
  gs_layout-detail_titlebar     = '详细信息'."详细清单的标题
  gs_layout-DETAIL_POPUP        = 'X'.
  gs_layout-lights_fieldname =   'EXCEPTION'.    "报警灯栏位

**-----------选择布局--------------------------------------------------**
  DATA:
        ls_variant TYPE disvariant.


 PERFORM f_variant_build CHANGING ls_variant.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
       I_CALLBACK_PROGRAM                = G_REPID               "SY-CPROG
*      I_BACKGROUND_ID                   = 'ALV_BACKGROUND'
*      i_buffer_active                   = 'X'
      I_CALLBACK_PF_STATUS_SET          = 'SET_PF_STATUS'
*      I_CALLBACK_USER_COMMAND           = 'ALV_USER_COMMAND'
*      I_CALLBACK_TOP_OF_PAGE            =  'TOP_OF_PAGE'                        "GT_LIST_TOP_OF_PAGE[]
      IT_FIELDCAT                       = GT_FIELDCAT[]
      IT_EVENTS                         = GT_EVENTS[]
*      I_STRUCTURE_NAME                  = 'SPFLI'
      I_SAVE                            = 'A'
      IS_LAYOUT                         = GS_LAYOUT
*      IS_PRINT                          = GS_PRINT
      is_variant                       = ls_variant
    TABLES
      T_OUTTAB                          = ALV_SPFLI
    EXCEPTIONS
      PROGRAM_ERROR                     = 1
      OTHERS                            = 2
            .
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " CALL_REUSE_ALV_GRID_DISPLAY
************************************************************************************

*&---------------------------------------------------------------------*
*&      Form  COMMENT_BUILD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GT_LIST_TOP_OF_PAGE[]  text
*----------------------------------------------------------------------*
FORM COMMENT_BUILD  USING    LT_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.
DATA: LS_LINE TYPE SLIS_LISTHEADER.
*
* LIST HEADING LINE: TYPE H
  CLEAR LS_LINE.
  LS_LINE-TYP  = 'H'.
* LS_LINE-KEY:  NOT USED FOR THIS TYPE
  LS_LINE-INFO = '航班时刻表'.
  APPEND LS_LINE TO LT_TOP_OF_PAGE.
* STATUS LINE: TYPE S
  CLEAR LS_LINE.
  LS_LINE-TYP  = 'S'.
  LS_LINE-KEY  = '输出时间'.               "TEXT-101.
  LS_LINE-INFO = SY-DATUM.                  "TEXT-102.
  APPEND LS_LINE TO LT_TOP_OF_PAGE.
  LS_LINE-KEY  = '查询者'.                  "TEXT-103.
  LS_LINE-INFO = 'EASY'.                    "TEXT-104.
  APPEND LS_LINE TO LT_TOP_OF_PAGE.
* ACTION LINE: TYPE A
  CLEAR LS_LINE.
  LS_LINE-TYP  = 'A'.
* LS_LINE-KEY:  NOT USED FOR THIS TYPE
  LS_LINE-INFO = '详细信息'.                  "TEXT-105.
  APPEND LS_LINE TO LT_TOP_OF_PAGE.

ENDFORM.                    " COMMENT_BUILD

FORM TOP_OF_PAGE.
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
       EXPORTING
           I_LOGO             = 'EASYPICTURE'
            IT_LIST_COMMENTARY = GT_LIST_TOP_OF_PAGE.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  ALV_FIECAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ALV_FIECAT .
CLEAR gt_fieldcat.
gt_fieldcat-COL_POS = 1.
gt_fieldcat-FIELDNAME = 'CARRID'.
gt_fieldcat-TABNAME = 'ALV_SPFLI'.
gt_fieldcat-SELTEXT_L = '航线承运人'.
gt_fieldcat-SELTEXT_M = 'MMM'.
gt_fieldcat-SELTEXT_S = 'SSS'.

APPEND gt_fieldcat TO gt_fieldcat.
CLEAR gt_fieldcat.
gt_fieldcat-COL_POS = 2.
gt_fieldcat-FIELDNAME = 'CONNID'.
gt_fieldcat-TABNAME = 'ALV_SPFLI'.
gt_fieldcat-SELTEXT_M = '航班连接'.
*gt_fieldcat-no_out = 'X'.
gt_fieldcat-EDIT = 'X'.
gt_fieldcat-lzero = 'X'.
APPEND gt_fieldcat TO gt_fieldcat.
CLEAR gt_fieldcat.
gt_fieldcat-COL_POS = 3.
gt_fieldcat-FIELDNAME = 'CITYFROM'.
gt_fieldcat-TABNAME = 'ALV_SPFLI'.
gt_fieldcat-SELTEXT_M = '起飞城市'.
APPEND gt_fieldcat TO gt_fieldcat.
CLEAR gt_fieldcat.
gt_fieldcat-COL_POS = 4.
gt_fieldcat-FIELDNAME = 'CITYTO'.
gt_fieldcat-TABNAME = 'ALV_SPFLI'.
gt_fieldcat-SELTEXT_M = '目的城市'.
*gt_fieldcat-EDIT = 'X'.
APPEND gt_fieldcat TO gt_fieldcat.
CLEAR gt_fieldcat.
gt_fieldcat-COL_POS = 5.
gt_fieldcat-FIELDNAME = 'DISTANCE'.
gt_fieldcat-TABNAME = 'ALV_SPFLI'.
gt_fieldcat-SELTEXT_M = '距离'.
gt_fieldcat-EDIT = 'X'.
APPEND gt_fieldcat TO gt_fieldcat.
ENDFORM.                    " ALV_FIECAT
*&---------------------------------------------------------------------*
*&      Form  AUTO_GET_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM AUTO_GET_FIELDCAT .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'         "不好用啊。。。
 EXPORTING
   I_PROGRAM_NAME               = sy-repid
*   I_INTERNAL_TABNAME           = 'ALV_SPFLI'
   I_STRUCTURE_NAME             =  'ALV_SPFLI'
*   I_CLIENT_NEVER_DISPLAY       = 'X'
*   I_INCLNAME                   =
*   I_BYPASSING_BUFFER           =
*   I_BUFFER_ACTIVE              =
  CHANGING
    CT_FIELDCAT                  = GT_FIELDCAT[]
* EXCEPTIONS
*   INCONSISTENT_INTERFACE       = 1
*   PROGRAM_ERROR                = 2
*   OTHERS                       = 3
          .
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


ENDFORM.                    " AUTO_GET_FIELDCAT

*&---------------------------------------------------------------------*
*&      Form  f_variant_build
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_LS_VARIANT  text
*----------------------------------------------------------------------*
FORM f_variant_build  CHANGING  p_variant TYPE disvariant.

  p_variant-report  = sy-repid.
  p_variant-variant = p_layout.


ENDFORM.                    " f_variant_build

*&---------------------------------------------------------------------*
*&      Form  f_f4_layout
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_P_LAYOUT  text
*----------------------------------------------------------------------*
FORM f_f4_layout  CHANGING p_variant.
DATA: ls_variant TYPE disvariant,

        l_exit TYPE char1.

 

  ls_variant-report = sy-repid.

 

  CALL FUNCTION 'REUSE_ALV_VARIANT_F4'

    EXPORTING

      is_variant = ls_variant

      i_save     = 'A'

    IMPORTING

      e_exit     = l_exit

      es_variant = ls_variant

    EXCEPTIONS

      not_found  = 1.

 

  IF sy-subrc = 1.

    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno

    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ELSE.

    IF l_exit IS INITIAL.

      p_variant = ls_variant-variant.

    ENDIF.

  ENDIF.


ENDFORM.                    " f_f4_layout

FORM set_pf_status USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'ZALV_PF_STATUS'.
ENDFORM. "Set_pf_status

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值