如何动态改变ALV状态栏(Status)中的按钮文本和图标(Icon)详解编程语言

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

如何动态改变ALV状态栏(Status)中的按钮文本和图标(Icon)详解编程语言

如何动态改变ALV状态栏(Status)中的按钮文本和图标(Icon)详解编程语言

下面介绍具体实现方法:

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

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

如何动态改变ALV状态栏(Status)中的按钮文本和图标(Icon)详解编程语言

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

如何动态改变ALV状态栏(Status)中的按钮文本和图标(Icon)详解编程语言

创建完如下:

如何动态改变ALV状态栏(Status)中的按钮文本和图标(Icon)详解编程语言

完整代码如下:

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://blog.ytso.com/tech/pnotes/19290.html

(0)
上一篇 2021年7月19日 22:02
下一篇 2021年7月19日 22:02

相关推荐

发表回复

登录后才能评论