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( ).
相关推荐
duangww6 小时前
QRFC的详细错误消息查看方式
abap·ewm·总分类帐科目xxx不一致
slacker-kian1 天前
SAP On-Premise 部署环境下 ABAP 开发对接 AI Agent 方案探讨
人工智能·ai·sap·agent·abap·mcp·odata
slacker-kian20 天前
[实践]-让 SAP 工程 Skill 脱离 opencode跑在自定义Agent 上
ai·llm·sap·agent·abap·adt·opencode
爱喝水的鱼丶20 天前
SAP-ABAP:MM 模块供应商主数据开发:字段扩展、分级管控与同步接口开发
开发语言·性能优化·接口·sap·abap·增强·经验交流
爱喝水的鱼丶22 天前
SAP-ABAP:SAP 权限控制深度解析:自定义程序与标准事务码的边界与协同
性能优化·sap·abap·权限·开发交流·交流学习
爱喝水的鱼丶24 天前
SAP-ABAP:MM 模块库存管理开发:出入库增强、批次管理与库存盘点功能开发
性能优化·sap·abap·增强·开发运维·经验交流·mm模块
goyeer25 天前
20.[SAP ABAP] DATA与TYPES异同
sap·abap·fico·fi·co·mm
爱喝水的鱼丶25 天前
SAP-ABAP:SAP MM 模块物料主数据批量导入与增强开发:字段扩展、校验逻辑与批量导入工具开发
开发语言·性能优化·sap·abap·增强·经验交流·mm
goyeer25 天前
21.[SAP ABAP] DATA关键字详解
sap·abap·fi·mm·opensql
ChampaignWolf1 个月前
在 SAP S/4HANA 内部基于 ICF Handler 从零实现 ABAP MCP Server:架构、代码与踩坑实录
c++·架构·sap·abap·mcp