ABAP - SALV教程12 显示图标和提示信息

  • ALV要求字段的值为图标的需求并不多见,一般都用于红黄绿灯,来表示单据的执行状态,添加图标的方式也可以实现红黄绿灯的功能,也可以参考SALV实现红黄绿灯这篇文章:http://t.csdnimg.cn/Dzx7x
  • 效果图
  • SAVL列设置为图标图标显示实现步骤:
  1. 输出内表增加一个char30的字段类型,然后赋值。图标的值:SE38执行showicon程序

        TYPES:BEGIN OF TY_dATA,
                icon  TYPE char30,
        TYPES:END  OF ty_data.
        
        DATA mt_data TYPE TABLE OF ty_data.
        
        INCLUDE: <icon>.
    
        LOOP AT mt_data ASSIGNING FIELD-SYMBOL(<fs_data>).
          <fs_data>-icon = icon_checked.
        ENDLOOP.
    
  2. 将该字段设置为图标显示列

        DATA: lo_functional_settings  TYPE REF TO cl_salv_functional_settings.
        DATA: lo_tooltips TYPE REF TO cl_salv_tooltips,
              lv_value    TYPE lvc_value.
        DATA: lo_columns              TYPE REF TO cl_salv_columns.
        DATA: lo_column               TYPE REF TO cl_salv_column_table.
    
        INCLUDE: <icon>.
    
        lo_columns = co_alv->get_columns( ).
    
        TRY.
            lo_column ?= lo_columns->get_column( 'ICON' ).
            " 将列设置为显示ICON
            lo_column->set_icon( if_salv_c_bool_sap=>true ).
            " 设置列标签 label
            lo_column->set_long_text( '图标' ).
            " 图标对齐方式
            lo_column->set_alignment( if_salv_c_alignment=>centered ).
            " 字段长度
            lo_column->set_output_length( 6 ).
          CATCH cx_salv_not_found.
        ENDTRY.
    
        "这里做鼠标悬停时的提示信息
        lo_functional_settings = co_alv->get_functional_settings( ).
        lo_tooltips = lo_functional_settings->get_tooltips( ).
        TRY.
            "当图标代码值为icon_checked,提示 Everything is Processed
            lv_value = icon_checked.
            lo_tooltips->add_tooltip(
              type    = cl_salv_tooltip=>c_type_icon
              value   = lv_value
              tooltip = 'Everything is Processed' ).
          CATCH cx_salv_existing.
        ENDTRY.
      ENDMETHOD.
    


  • 完整代码

    CLASS lcl_model DEFINITION.
      PUBLIC SECTION.
        TYPES:BEGIN OF TY_dATA,
                icon  TYPE char30,
                vbeln TYPE vbak-vbeln,
                erdat TYPE erdat,
                erzet TYPE erzet,
                ernam TYPE ernam,
                auart TYPE auart.
        TYPES:END  OF ty_data.
    
        DATA mt_data TYPE TABLE OF ty_data.
    
        DATA mo_salv TYPE REF TO cl_salv_table.
    
        "获取数据的方法
        METHODS get_data.
        "展示SALV的方法
        METHODS alv_show.
    
      PRIVATE SECTION.
        METHODS:
          set_icon CHANGING co_alv TYPE REF TO cl_salv_table.
        METHODS:
          set_status CHANGING co_alv TYPE REF TO cl_salv_table.
    
    ENDCLASS.
    
    CLASS lcl_model IMPLEMENTATION.
      METHOD get_data.
        SELECT vbeln erdat erzet ernam auart
          INTO CORRESPONDING FIELDS OF TABLE mt_data
          FROM vbak
          UP TO 20 ROWS.
    
        INCLUDE: <icon>.
    
        LOOP AT mt_data ASSIGNING FIELD-SYMBOL(<fs_data>).
          <fs_data>-icon = icon_checked.
        ENDLOOP.
    
      ENDMETHOD.
    
      METHOD alv_show.
        DATA: lx_msg TYPE REF TO cx_salv_msg.
        TRY.
            cl_salv_table=>factory(
              IMPORTING
                r_salv_table = mo_salv
              CHANGING
                t_table      = mt_data ).
          CATCH cx_salv_msg INTO lx_msg.
        ENDTRY.
    
        me->set_status( CHANGING co_alv = mo_salv ).
        me->set_icon( CHANGING co_alv = mo_salv ).
        mo_salv->display( ).
      ENDMETHOD.
    
      METHOD set_status.
        DATA(lo_functions) = co_alv->get_functions( ).
        "cl_salv_functions_list类型的实例对象的添加状态方法
        lo_functions->set_all( abap_true ).
        "lo_functions->set_default( abap_true ).
      ENDMETHOD.
    
      METHOD set_icon.
        DATA: lo_functional_settings  TYPE REF TO cl_salv_functional_settings.
        DATA: lo_tooltips TYPE REF TO cl_salv_tooltips,
              lv_value    TYPE lvc_value.
        DATA: lo_columns              TYPE REF TO cl_salv_columns.
        DATA: lo_column               TYPE REF TO cl_salv_column_table.
    
        INCLUDE: <icon>.
    
        lo_columns = co_alv->get_columns( ).
    
        TRY.
            lo_column ?= lo_columns->get_column( 'ICON' ).
            " 将列设置为显示ICON
            lo_column->set_icon( if_salv_c_bool_sap=>true ).
            " 设置列标签 label
            lo_column->set_long_text( '图标' ).
            " 图标对齐方式
            lo_column->set_alignment( if_salv_c_alignment=>centered ).
            " 字段长度
            lo_column->set_output_length( 6 ).
          CATCH cx_salv_not_found.
        ENDTRY.
    
        "这里做鼠标悬停时的提示信息
        lo_functional_settings = co_alv->get_functional_settings( ).
        lo_tooltips = lo_functional_settings->get_tooltips( ).
        TRY.
            "当图标代码值为icon_checked,提示 Everything is Processed
            lv_value = icon_checked.
            lo_tooltips->add_tooltip(
              type    = cl_salv_tooltip=>c_type_icon
              value   = lv_value
              tooltip = 'Everything is Processed' ).
          CATCH cx_salv_existing.
        ENDTRY.
      ENDMETHOD.
    
    ENDCLASS.
    
    START-OF-SELECTION.
      DATA(lo_model) = NEW lcl_model( ).
      lo_model->get_data( ).
      lo_model->alv_show( ).
    
相关推荐
爱喝水的鱼丶6 天前
SAP-ABAP:SAP中REPORT程序和online程序的区别对比
sap·abap·erp·企业应用·开发运维
SAP学习成长之路12 天前
了解 ALV 中的 field catalog (ABAP List Viewer)
开发语言·sap·abap
山茶花开时。15 天前
[SAP ABAP] 静态断点的使用
开发语言·sap·abap
山茶花开时。16 天前
[SAP ABAP] Debug Skill
开发语言·sap·abap
山茶花开时。21 天前
[Dialog屏幕开发] 设置搜索帮助
开发语言·sap·abap
LilySesy1 个月前
【业务案例】F.13——SAP系统标准的清帐程序有BUG?
运维·bug·sap·abap·esb·internet服务
小羔羊的官方学习账号1 个月前
SAP -最简单smartforms打印保存到本地pdf方法
运维开发·sap·abap
山茶花开时。1 个月前
[SAP ABAP] 使用LOOP AT...ASSIGNING FIELD-SYMBOL 直接更新内表数据
开发语言·sap·abap
IT小职员1 个月前
利用 NATIVE SQL 实现不区分供应商名字大小写进行模糊查询
sql·abap
山茶花开时。1 个月前
[OPEN SQL] 限定选择行数
开发语言·sap·abap