如何动态改变ALV状态栏(Status)中的按钮文本和图标(Icon)

经常会在ALV的状态栏上加入自定义的按钮(button),有时还需要动态更改自定义按钮上的文本和图标,如下:开始是修改按钮,点击后变成显示按钮,按钮上的显示的内容可以自动切换。

<img class="alignnone size-full wp-image-5849" src="http://www.baidusap.com/wp-content/uploads/2018-03-13_14-35-53.png" alt="" width="693" height="179" />

<img class="alignnone size-full wp-image-5850" src="http://www.baidusap.com/wp-content/uploads/2018-03-13_14-36-26.png" alt="" width="690" height="206" />

下面介绍具体实现方法:

1,现在程序中定义一个全局变量,类型是 smp_dyntxt

2,在创建状态(status)中的按钮时选择Dynamic Text选项

<img class="alignnone size-full wp-image-5851" src="http://www.baidusap.com/wp-content/uploads/2018-03-13_14-44-00.png" alt="" width="903" height="452" srcset="http://www.baidusap.com/wp-content/uploads/2018-03-13_14-44-00.png 903w, http://www.baidusap.com/wp-content/uploads/2018-03-13_14-44-00-740x370.png 740w, http://www.baidusap.com/wp-content/uploads/2018-03-13_14-44-00-768x384.png 768w" sizes="(max-width: 903px) 100vw, 903px" />

然后选择1中定义的全局变量

<img class="alignnone size-full wp-image-5853" src="http://www.baidusap.com/wp-content/uploads/2018-03-13_14-45-38.png" alt="" width="697" height="335" />

创建完如下:

<img class="alignnone size-full wp-image-5854" src="http://www.baidusap.com/wp-content/uploads/2018-03-13_15-13-57.png" alt="" width="839" height="270" srcset="http://www.baidusap.com/wp-content/uploads/2018-03-13_15-13-57.png 839w, http://www.baidusap.com/wp-content/uploads/2018-03-13_15-13-57-740x238.png 740w, http://www.baidusap.com/wp-content/uploads/2018-03-13_15-13-57-768x247.png 768w" sizes="(max-width: 839px) 100vw, 839px" />

完整代码如下:

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.

 

转载于:https://www.cnblogs.com/datie/p/11433325.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值