ABAP - SALV教程10 添加可编辑checkbox列

  • 几乎所有的功能报表都会有那么一个选择列,问了业务顾问,业务顾问说是用户不习惯使用报表原生的选择模式。
  • 效果图
  • SALV的选择列是通过将列设置成checkbox_hotspot样式,注册单击事件完成勾选功能的。
  • 完成步骤
  1. 将SEL列设置成checkbox_hotspot样式
      METHOD set_columns.
    *   取得全部列的对象
        DATA(lo_cols) = co_alv->get_columns( ).
    
        TRY.
    
            "修改列SEL的标签名字和输出长度
            lo_cols->get_column( 'SEL' )->set_long_text( '选择' ).  "长描述
            lo_cols->get_column( 'SEL' )->set_medium_text( '选择' )."中描述
            lo_cols->get_column( 'SEL' )->set_short_text( '选择' ). "短描述
            lo_cols->get_column( 'SEL' )->set_output_length( 4 ).
            
            "修改列成为checkbox_hotspot样式
            DATA lo_col TYPE REF TO cl_salv_column_list.
            lo_col ?= lo_cols->get_column( 'SEL' ).
            lo_col->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot ).
          CATCH cx_salv_not_found.
        ENDTRY.
    
      ENDMETHOD.    

  2. 获取SALV事件对象,并对单击事件作处理
      METHOD set_columns.
        "获取事件对象
        DATA: lo_events TYPE REF TO cl_salv_events_table.
        lo_events = co_alv->get_event( ).
        "注册单击事件
        SET HANDLER me->on_link_click FOR lo_events.
      ENDMETHOD.    
      
      "单击事件的处理  
      METHOD on_link_click.
        READ TABLE me->mt_data ASSIGNING FIELD-SYMBOL(<fs_data>) INDEX row.
        CHECK sy-subrc IS INITIAL.
        IF <fs_data>-sel IS INITIAL.
          <fs_data>-sel = 'X'.
        ELSE.
          CLEAR <fs_data>-sel.
        ENDIF.
        me->mo_salv->refresh( ).
      ENDMETHOD.                
     

  • 完整代码
    CLASS lcl_model DEFINITION.
      PUBLIC SECTION.
        TYPES:BEGIN OF TY_dATA,
                sel   TYPE char1,
                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_status  CHANGING co_alv TYPE REF TO cl_salv_table.
        METHODS:
          set_columns CHANGING co_alv TYPE REF TO cl_salv_table.
        METHODS:
          on_link_click FOR EVENT link_click OF cl_salv_events_table
            IMPORTING row column.
    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.
      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_columns( 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_columns.
    *   取得全部列的对象
        DATA(lo_cols) = co_alv->get_columns( ).
    
    *   设置自动优化列宽度
        lo_cols->set_optimize( 'X' ).
    
    *   修改列VBELN的标签名字和输出长度
        TRY.
            lo_cols->get_column( 'SEL' )->set_long_text( '选择' ).  "长描述
            lo_cols->get_column( 'SEL' )->set_medium_text( '选择' )."中描述
            lo_cols->get_column( 'SEL' )->set_short_text( '选择' ). "短描述
            lo_cols->get_column( 'SEL' )->set_output_length( 4 ).
    
            DATA lo_col TYPE REF TO cl_salv_column_list.
            lo_col ?= lo_cols->get_column( 'SEL' ).
            lo_col->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot )..
          CATCH cx_salv_not_found.
        ENDTRY.
    
        DATA: lo_events TYPE REF TO cl_salv_events_table.
        lo_events = co_alv->get_event( ).
    
        SET HANDLER me->on_link_click FOR lo_events.
    
      ENDMETHOD.                    "SET_COLUMNS
    
      METHOD on_link_click.
    
        READ TABLE me->mt_data ASSIGNING FIELD-SYMBOL(<fs_data>) INDEX row.
        CHECK sy-subrc IS INITIAL.
        IF <fs_data>-sel IS INITIAL.
          <fs_data>-sel = 'X'.
        ELSE.
          CLEAR <fs_data>-sel.
        ENDIF.
        me->mo_salv->refresh( ).
      ENDMETHOD.
    ENDCLASS.
    
    START-OF-SELECTION.
      DATA(lo_model) = NEW lcl_model( ).
      lo_model->get_data( ).
      lo_model->alv_show( ).
     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/424113.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

递推算法(c++)

递推可以说是递归反过来的一种算法&#xff0c;递归是从后往前倒着算&#xff0c;递推是从前往后正着算。 统计每个月兔子的总数 题目描述 有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;一对小兔子长到第三个月后每个月又生一对兔子&#xff0c; …

网络编程(IP、端口、协议、UDP、TCP)【详解】

目录 1.什么是网络编程&#xff1f; 2.基本的通信架构 3.网络通信三要素 4.UDP通信-快速入门 5.UDP通信-多发多收 6.TCP通信-快速入门 7.TCP通信-多发多收 8.TCP通信-同时接收多个客户端 9.TCP通信-综合案例 1.什么是网络编程&#xff1f; 网络编程是可以让设…

Cloud整合Zookeeper代替Eureka

微服务间通信重构与服务治理笔记-CSDN博客 Zookeeper是一个分布式协调工具,可以实现注册中心功能 安装Zookeeper 随便 就用最新版本吧 进入Zookeeper 包目录 cd /usr/local/develop/ 解压 tar -zxvf apache-zookeeper-3.9.1-bin.tar.gz -C /usr/local/develop 进入配置文件…

electron nsis 安装包 window下任务栏无法正常固定与取消固定 Pin to taskbar

问题 win10系统下&#xff0c;程序任务栏在固定后取消固定&#xff0c;展示的程序内容异常。 排查 1.通过论坛查询&#xff0c;应该是与app的api setAppUserModelId 相关 https://github.com/electron/electron/issues/3303 2.electron-builder脚本 electron-builder…

VUE CLI3项目搭建 ESLint配置

VUE项目框架配置 一、工具准备 Node.js安装 安装方法&#xff1a;点击查看WebStorm安装 下载地址&#xff1a;点击查看 二、环境准备 镜像准备 1.查看代理&#xff1a;npm get registry 2.设置淘宝镜像 2.1临时使用. npm --registry https://registry.npm.taobao.org ins…

vue 使用vue-scroller 列表滑动到底部加载更多数据

安装插件 npm install vue-scroller -dmain.js import VueScroller from vue-scroller Vue.use(VueScroller)<template><div class"wrap"><div class"footer"><div class"btn" click"open true">新增</d…

LeetCode --- 三数之和

题目描述 三数之和 代码解析 暴力 在做这一道题的时候&#xff0c;脑海里先想出来的是暴力方法&#xff0c;一次排序&#xff0c;将这个数组变为有序的&#xff0c;再通过三次for循环来寻找满足条件的数字&#xff0c;然后将符合条件的数组与之前符合条件的数组进行一一对比…

Matlab 机器人工具箱 运动学

文章目录 R.fkine()R.ikine()R.ikine6s()R.jacob0、R.jacobn、R.jacob_dotjtrajctraj参考链接官网:Robotics Toolbox - Peter Corke R.fkine() 正运动学,根据关节坐标求末端执行器位姿 mdl_puma560; % 加载puma560模型 qz % 零角度 qr

Spring学习笔记(六)利用Spring的jdbc实现学生管理系统的用户登录功能

一、案例分析 本案例要求学生在控制台输入用户名密码&#xff0c;如果用户账号密码正确则显示用户所属班级&#xff0c;如果登录失败则显示登录失败。 &#xff08;1&#xff09;为了存储学生信息&#xff0c;需要创建一个数据库。 &#xff08;2&#xff09;为了程序连接数…

备战蓝桥杯Day21 - 堆排序的内置模块+topk问题

一、内置模块 在python中&#xff0c;堆排序已经设置好了内置模块&#xff0c;不想自己写的话可以使用内置模块&#xff0c;真的很方便&#xff0c;但是堆排序算法的底层逻辑最好还是要了解并掌握一下的。 使用heapq模块的heapify()函数将列表转换为堆&#xff0c;然后使用he…

CVPR2023 RIFormer, 无需TokenMixer也能达成SOTA性能的极简ViT架构

编辑 | Happy 首发 | AIWalker 链接 | https://mp.weixin.qq.com/s/l3US8Dsd0yNC19o7B1ZBgw project, paper, code Token Mixer是ViT骨干非常重要的组成成分&#xff0c;它用于对不同空域位置信息进行自适应聚合&#xff0c;但常规的自注意力往往存在高计算复杂度与高延迟问题…

记录一次架构优化处理性能从3千->3万

0.背景 优化Kafka消费入Es&#xff0c;适配600台设备上报数据&#xff0c;吞吐量到达2万每秒 1.环境配置 2.压测工具 3.未优化之前的消费逻辑 4.优化之后的消费流程 5.多线程多ESclient 6.修改ES配置&#xff0c;增加kafka分区&#xff0c;增加线程&#xff0c;提升吞吐量 7.…

pytest多重断言插件-pytest-assume

最近准备废弃之前用metersphere做的接口自动化&#xff0c;转战pytest了&#xff0c;先来分享下最近接触到的一个插件&#xff1a;pytest-assume。 在使用这个插件之前&#xff0c;如果一个用例里面有多个断言的话&#xff0c;前面的断言失败了&#xff0c;就不会去执行后面的断…

vite+vue3图片引入方式不生效解决方案

vitevue3图片引入方式不生效解决方案 引入方式改成 const wordImgnew URL(/src/assets/MicsosoftWord.png,import.meta.url).href;原理

Pycharm的下载安装与汉化

一.下载安装包 1.接下来按照步骤来就行 2.然后就能在桌面上找到打开了 3.先建立一个文件夹 二.Pycharm的汉化

Unity--自动版面(Horizontal Layout Croup)||Unity--自动版面(Vertical Layout Group)

Unity--自动版面&#xff08;Horizontal Layout Croup&#xff09; Horizontal Layout Croup&#xff1a; “水平布局组”组件将其子布局元素并排放置。它们的宽度由各自的最小&#xff0c;首选和灵活的宽度决定&#xff0c;具体取决于以下模型&#xff1a; 所有子布局元素的…

python模块和包概念与使用

python模块和包概念与使用 Python模块与包的关键概念 在Python编程中&#xff0c;模块和包是代码组织和管理的基石。以下是关于Python模块与包的核心要点&#xff1a; 模块&#xff1a; 模块是一个包含Python代码的.py文件&#xff0c;它可以定义函数、类、变量等。通过导入模…

● 70. 爬楼梯 (进阶)● 322. 零钱兑换 ● 279.完全平方数

● 70. 爬楼梯 &#xff08;进阶&#xff09; 题目&#xff1a;57. 爬楼梯 题目描述&#xff1a; 根据示例&#xff1a; 可知1到m的阶数可以重复选择&#xff0c;跳了1阶之后还能跳一阶&#xff0c;所以是完全背包&#xff0c;又因为考虑了顺序问题&#xff0c;所以是完全背包的…

排序(4)——堆排序

目录 堆排序&#xff08;回顾&#xff09; 基本思路 代码实现 向下调整排序 AdjustDown 建堆排序 时间复杂度 特性总结 堆排序&#xff08;回顾&#xff09; 重点回顾戳&#x1f449;堆排序 基本思路 堆排序(Heapsort)是指利用堆积树&#xff08;堆&#xff09;这种数…

备战蓝桥杯---动态规划的一些思想1

话不多说&#xff0c;直接看题&#xff1a; 目录 1.双线程DP 2.正难则反多组DP 3.换个方向思考&#xff1a; 1.双线程DP 可能有人会说直接贪心&#xff1a;先选第1条的最优路径&#xff0c;再选第2条最优路径。 其实我们再选第1条时&#xff0c;我们怎么选会对第2条的路径…