控制alv中layout保存及搜索帮助详解编程语言

问题

今天有user反映希望程序alv结果可以保存layout,但save layout按钮为灰色。程序实现alv方法为CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’。

原因

经debug发现’REUSE_ALV_GRID_DISPLAY’中参数i_save值为空值space。
i_save参数官方介绍如下:

’ ’ = Display variants cannot be saved     (不能保存)
Defined display variants (such as delivered display variants) can be selected for presentation regardless of this indicator. However, changes cannot be saved.

’X’ = Standard save mode          (全局布局可以保存)
Display variants can be saved as standard display variants.
Saving display variants as user-specific is not possible.

’U’ = User-specific save mode        (用户自定义布局可以保存)
Display variants can only be saved as user-specific.

’A’ = Standard and user-specific save mode (全局和用户自定义布局都可以保存)
Display variants can be saved both as user-specific and as standard
variants. Users make their choice on the dialog box for saving the
display variant.

解决办法

将i_save值写死赋值为A,测试后发现可以保存layout,选择屏幕layout输入框需要做F4帮助,方便user直接选择自己layout并保存variant。

以下为与layout相关部分代码,wk_vari为选择屏幕上layout输入框。

DATA : variante        LIKE disvariant, 
       def_variante    LIKE disvariant, 
       variant_exit(1) TYPE c, 
       variant_save(1) TYPE c. 
 
PARAMETERS:   wk_vari LIKE disvariant-variant. 
 
INITIALIZATION. 
 
  variant_save = 'A'. 
  CLEAR variante. 
  variante-report = sy-repid. 
  def_variante    = variante. 
  CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET' 
    EXPORTING 
      i_save        = variant_save 
    CHANGING 
      cs_variant    = def_variante 
    EXCEPTIONS 
      wrong_input   = 1 
      not_found     = 2 
      program_error = 3 
      OTHERS        = 4. 
 
  IF sy-subrc = 0. 
    wk_vari = def_variante-variant. 
  ENDIF. 
 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR wk_vari. 
 
  CALL FUNCTION 'REUSE_ALV_VARIANT_F4' 
    EXPORTING 
      is_variant    = variante 
      i_save        = variant_save 
    IMPORTING 
      e_exit        = variant_exit 
      es_variant    = def_variante 
    EXCEPTIONS 
      not_found     = 1 
      program_error = 2 
      OTHERS       = 3. 
  IF sy-subrc = 2. 
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno 
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 
  ELSE. 
    IF variant_exit = space. 
        wk_vari = def_variante-variant. 
    ENDIF. 
  ENDIF. 
 
AT SELECTION-SCREEN. 
   
  IF NOT wk_vari IS INITIAL. 
    MOVE variante TO def_variante. 
    MOVE wk_vari TO def_variante-variant. 
    CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE' 
      EXPORTING 
        i_save     = variant_save 
      CHANGING 
        cs_variant = def_variante. 
        variante   = def_variante. 
  ELSE. 
    CLEAR variante. 
    variante-report = sy-repid. 
  ENDIF. 
   
  "调用alv函数时赋值i_save、is_variant参数即可 
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 
    EXPORTING 
      i_interface_check  = '' 
      i_callback_program = sy-repid 
      it_fieldcat        = xfieldcat[] 
      i_default          = 'X' 
      i_save             = variant_save 
      is_layout          = layout 
      is_variant         = variante 
    TABLES 
      t_outtab           = inttab 
    EXCEPTIONS 
      program_error      = 1 
      OTHERS             = 2. 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/17878.html

(0)
上一篇 2021年7月19日 20:35
下一篇 2021年7月19日 20:35

相关推荐

发表回复

登录后才能评论