How to dynamically change the button text and icon ALV status bar (Status) in (Icon)

Often join in the status bar ALV button (button) custom, and sometimes also need to change the dynamic on the Custom button text and icons, as follows: initially the Modify button, click the button becomes a display, the display on the button content can be automatically switched.

The following describes specific method:

1, now define a global variable in the program, type smp_dyntxt

2. Select Dynamic Text option (status) of the button to create a state

Then select a global variable defined

We've created as follows:

The complete code is as follows:

REPORT ztest_alv_lvc_button.

DATA:go_grid TYPE REF TO cl_gui_alv_grid.
DATA:g_text TYPE smp_dyntxt.
DATA:g_display TYPE c.

TYPES:BEGIN OF gty_ekko,
        ebeln TYPE ekko-ebeln,
        verkf TYPE ekko-verkf,
        sel   TYPE c,  "用来标识行选择的字段
      END OF gty_ekko.
DATA:git_ekko TYPE STANDARD TABLE OF gty_ekko,
     gwa_ekko TYPE gty_ekko.

DATA:git_fcat   TYPE lvc_t_fcat,
     gwa_fcat   LIKE LINE OF git_fcat,
     gwa_layout TYPE lvc_s_layo.

CONSTANTS: gco_callback_user_command TYPE slis_formname  VALUE 'FRM_USER_COMMAND',
           gco_callback_status       TYPE slis_formname  VALUE 'FRM_USER_STATUS'.

START-OF-SELECTION.

  SELECT ebeln
         verkf
    INTO CORRESPONDING FIELDS OF TABLE git_ekko
    FROM ekko
   UP TO 10 ROWS.

  PERFORM frm_set_catalog.

  gwa_layout-zebra = 'X'.
  gwa_layout-box_fname = 'SEL'.  "指定行选择字段
  gwa_layout-cwidth_opt = 'X'.

* 初始化状态栏中的button
  g_text-icon_id   = icon_change .
  g_text-text      = 'Change' .
  g_text-icon_text = 'Change'.

  g_display = 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      is_layout_lvc            = gwa_layout
      it_fieldcat_lvc          = git_fcat
      i_callback_pf_status_set = gco_callback_status
      i_callback_user_command  = gco_callback_user_command
    TABLES
      t_outtab                 = git_ekko[]
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc = 0.

  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_PF_STATUS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_user_status USING i_it_extab TYPE slis_t_extab.
  SET PF-STATUS 'S0001' .
ENDFORM.                    " FRM_SET_PF_STATUS

FORM frm_user_command USING i_ucomm       TYPE sy-ucomm
                            i_wa_selfield TYPE slis_selfield.
  CASE i_ucomm.
    WHEN 'CHANGE'.  "click Change button in application toolbar
      IF g_display = 'X'.
        g_text-icon_id   = icon_display .
        g_text-text      = 'Display' .
        g_text-icon_text = 'Display'.
        CLEAR:g_display.
      ELSE.
        g_text-icon_id   = icon_change .
        g_text-text      = 'Change' .
        g_text-icon_text = 'Change'.
        g_display        = 'X'.
      ENDIF.
    WHEN '&IC1'.  "Double click
*     if click on PO field, jump to me23n
      IF i_wa_selfield-fieldname = 'EBELN'.
        SET PARAMETER ID 'BES' FIELD i_wa_selfield-value.
        CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
      ENDIF.
    WHEN OTHERS.

  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_CATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_set_catalog .

  DATA:l_pos TYPE i VALUE 1.
  CLEAR: l_pos.
  l_pos = l_pos + 1.
  gwa_fcat-coltext   = 'PO'.
  gwa_fcat-scrtext_l = 'PO'.
  gwa_fcat-scrtext_m = 'PO'.
  gwa_fcat-scrtext_s = 'PO'.
  gwa_fcat-fieldname = 'EBELN'.
  gwa_fcat-col_pos = l_pos.
  gwa_fcat-outputlen = '10'.
  APPEND gwa_fcat TO git_fcat.
  l_pos = l_pos + 1.
  gwa_fcat-coltext   = 'PO item'.
  gwa_fcat-scrtext_l = 'PO item'.
  gwa_fcat-scrtext_m = 'PO item'.
  gwa_fcat-scrtext_s = 'PO item'.
  gwa_fcat-fieldname = 'VERKF'.
  gwa_fcat-col_pos = l_pos.
  gwa_fcat-outputlen = '20'.
  APPEND gwa_fcat TO git_fcat.

ENDFORM.

 

Guess you like

Origin www.cnblogs.com/datie/p/11433325.html