ABAP OOALV模板

news2024/11/28 20:17:49

自用模板,可能存在问题

一、主程序

*&---------------------------------------------------------------------*
*& Report ZVIA_OO_ALV
*&---------------------------------------------------------------------*
REPORT ZVIA_OO_ALV.

INCLUDE ZVIA_OO_ALV_TOP1."OO ALV定义相关 (可能需要修改)
INCLUDE ZVIA_OO_ALV_TOP2."程序数据定义相关 (需要修改)
INCLUDE ZVIA_OO_ALV_S01."选择屏幕,获取用户输入 (需要修改)
INCLUDE ZVIA_OO_ALV_F01."取数逻辑等子例程 (需要修改)
INCLUDE ZVIA_OO_ALV_F02."OO ALV 相关 (需要修改)

START-OF-SELECTION.
  PERFORM FRM_GET_DATA.

END-OF-SELECTION.
  CALL SCREEN 2000.

二、OO ALV定义相关

*&---------------------------------------------------------------------*
*& 包含               ZVIA_OO_ALV_TOP1
*&---------------------------------------------------------------------*
DATA:
  gv_ucomm TYPE sy-ucomm,
  ok_code  TYPE sy-ucomm.

DATA:
  gv_col_pos             LIKE sy-cucol,
  g_wa_allfields         TYPE lvc_s_fcat,
  g_grid_alv             TYPE REF TO cl_gui_alv_grid, "列表
  g_container_alv        TYPE scrfname VALUE 'GC_2000', "容器 (可能需要修改)
  g_custom_container_alv TYPE REF TO cl_gui_custom_container,
  gw_layout_alv          TYPE lvc_s_layo,
  gt_fieldcat_alv        TYPE lvc_t_fcat,
  gw_fieldcat_alv        TYPE lvc_s_fcat,
  gw_exclude_alv         TYPE ui_func,
  gt_exclude_alv         TYPE TABLE OF ui_func.

*OO ALV Display*
DATA:
  go_alv TYPE REF TO cl_gui_alv_grid."声明ALV对象

 需要创建屏幕2000

三、程序数据相关

*&---------------------------------------------------------------------*
*& 包含               ZVIA_OO_ALV_TOP2
*&---------------------------------------------------------------------*

*根据报表数据结构来定义内表和结构体*
DATA:
  git_stu TYPE STANDARD TABLE OF zvia_stu,"内表
  gw_stu  TYPE zvia_stu."结构体

TABLES:
  zvia_stu."使用到的表

四、选择屏幕

确认要使用到的用户选择字段

*&---------------------------------------------------------------------*
*& 包含               ZVIA_OO_ALV_S01
*&---------------------------------------------------------------------*
SELECT-OPTIONS:
  s_id FOR zvia_stu-stuid.

五、 取数逻辑等子例程

写自己的取数逻辑,这里写的比较简单

*&---------------------------------------------------------------------*
*& 包含               ZVIA_OO_ALV_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& 取数逻辑
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data .
  SELECT *
    from  ZVIA_STU
    INTO TABLE git_stu
    WHERE stuid in s_id.
ENDFORM.

六、OO ALV 显示等相关 

*&---------------------------------------------------------------------*
*& 包含               ZVIA_OO_ALV_F02
*&---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS:

      handle_top_of_page
        FOR EVENT top_of_page OF cl_gui_alv_grid
        IMPORTING e_dyndoc_id,

      handle_double_click
        FOR EVENT double_click OF cl_gui_alv_grid
        IMPORTING e_row e_column es_row_no,

      handle_toolbar_alv
        FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING e_object e_interactive,

      handle_user_command_alv
        FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm,

      handle_onf4_help
        FOR EVENT onf4 OF cl_gui_alv_grid
        IMPORTING e_fieldname
                  es_row_no
                  "ER_EVENT_DATE,
                  er_event_data,

      "HANDLE_DATE_CHANGED_alv
      HANDLE_DATA_CHANGED_alv
        FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING er_data_changed.

  PRIVATE SECTION.
ENDCLASS.


CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_double_click.
    MESSAGE 'SHUANG JI' TYPE 'S'.
  ENDMETHOD.

  METHOD handle_toolbar_alv.
    DATA:
          ls_toolbar TYPE stb_button.
    CLEAR: ls_toolbar.

    ls_toolbar-butn_type = 3."分隔符
    "APPEND LS_TOOLBAR TO E_ONJECT->MT_TOOLBAR.
    APPEND ls_toolbar TO e_object->mt_toolbar.
    CLEAR: ls_toolbar.
  ENDMETHOD.

  METHOD handle_user_command_alv.
  ENDMETHOD.

  METHOD handle_onf4_help.
    er_event_data->m_event_handled = 'X'.
  ENDMETHOD.

  METHOD handle_data_changed_alv.
    PERFORM handle_data_changed USING er_data_changed.
  ENDMETHOD.

  METHOD handle_top_of_page.
  ENDMETHOD.
ENDCLASS.

FORM sub_set_field USING VALUE(p_first)
                         VALUE(p_col_pos)
                         VALUE(p_fieldname)
                         VALUE(p_coltext)
                         VALUE(p_key)
                         VALUE(p_edit)
                         VALUE(p_outputlen)
                         VALUE(p_f4availabl)
                         VALUE(p_checkbox).
  CLEAR g_wa_allfields.

  g_wa_allfields-col_pos = p_col_pos.
  g_wa_allfields-fieldname = p_fieldname.
  g_wa_allfields-coltext = p_coltext.
  g_wa_allfields-key = p_key.
  g_wa_allfields-edit = p_edit.
  g_wa_allfields-outputlen = p_outputlen.
  g_wa_allfields-f4availabl = p_f4availabl.
  g_wa_allfields-checkbox = p_checkbox.

  IF p_first = '1'.
    APPEND g_wa_allfields TO gt_fieldcat_alv.
  ENDIF.
ENDFORM.
*&---------------------------------------------------
*&FORM FRM_SET_ALV.行项目-需要修改-ALV报表需要显示哪些列
*&按照自己的需求改这里的列对应的字段和列名--------------
*&---------------------------------------------------
FORM frm_set_alv.

  CLEAR:
  gv_col_pos,
  gt_fieldcat_alv,
  gw_fieldcat_alv.

  gv_col_pos = gv_col_pos + 1.
  PERFORM sub_set_field USING '1' gv_col_pos 'STUID' '学生ID' '' '' '10' '' ''.

  gv_col_pos = gv_col_pos + 1.
  PERFORM sub_set_field USING '1' gv_col_pos 'STUNAME' '学生姓名' '' '' '10' '' ''.

  gv_col_pos = gv_col_pos + 1.
  PERFORM sub_set_field USING '1' gv_col_pos 'GENDER' '性别' '' '' '10' '' ''.

  gv_col_pos = gv_col_pos + 1.
  PERFORM sub_set_field USING '1' gv_col_pos 'AGE' '年龄' '' '' '10' '' ''.
ENDFORM.
*&---------------------------------------------------
*&FORM FRM_PREPARE_LAYOUT
*&ALV 显示相关的参数-比如是否可以编辑,是否可以选择
*&---------------------------------------------------
*&---------------------------------------------------
*&---------------------------------------------------
FORM frm_prepare_layout CHANGING cs_layout TYPE lvc_s_layo.
  cs_layout-zebra = 'X'."可选行颜色
  cs_layout-smalltitle = 'X'."标题大小
  cs_layout-edit_mode = 'X'."编辑模式
  cs_layout-cwidth_opt = 'X'."优化列宽度
  cs_layout-edit = ''."准备输入
*    CS_LAYOUT-NO ROWMWARK = ''."禁用行选择
*    CS_LAYOUT-SEL_MODE = 'R'."选择方式
  cs_layout-stylefname = 'STYLE'."内部表字段的字段名称
  cs_layout-info_fname = 'CLR'."WEB中显示的行数
*    CS_LAYOUT-NO_HGRIDLN = 'X'."隐藏水平网格线
ENDFORM.

*&---------------------------------------------------
*&FORM HANDLE_DATA_CHANGED
*&---------------------------------------------------
FORM handle_data_changed USING p_er_data_changed TYPE REF TO cl_alv_changed_data_protocol.

  DATA: lw_mod_cell TYPE lvc_s_modi.
  DATA: lv_jine TYPE p DECIMALS 4.
  DATA:lv_shul TYPE p DECIMALS 4.

  IF p_er_data_changed->mt_mod_cells IS NOT INITIAL.
    LOOP AT p_er_data_changed->mt_mod_cells INTO lw_mod_cell.
    ENDLOOP.
    PERFORM sub_alv_refresh.

  ENDIF.
ENDFORM.

*&---------------------------------------------------
*&FORM SUB_ALV_REFRESH
*&---------------------------------------------------
FORM sub_alv_refresh.
  DATA: lw_stable TYPE lvc_s_stbl."刷新稳定性
  lw_stable-row = 'X'.
  lw_stable-col = 'X'.

  CALL METHOD g_grid_alv->refresh_table_display
    EXPORTING is_stable = lw_stable.
ENDFORM.

*&---------------------------------------------------
*&MODULE STATUS_2000 OUTPUT.
*&---------------------------------------------------
*&这里面需要手动创建STATUS/TITLEBAR-------------------
*&---------------------------------------------------
MODULE status_2000 OUTPUT.
  SET PF-STATUS 'ZPF'."复制标准菜单栏(双击创建)
  SET TITLEBAR 'ZTITLE'."ALV显示的标题行(双击创建)
  PERFORM frm_prepare_layout CHANGING gw_layout_alv.
  PERFORM frm_2000_alv_show.
ENDMODULE.

*&---------------------------------------------------
*&MOUDLE USER_COMMAND_2000 INPUT
*&---------------------------------------------------
*&用来响应用户的操作----------------------------------
*&---------------------------------------------------
MODULE user_command_2000 INPUT.
  gv_ucomm = ok_code.
  CASE gv_ucomm.
    WHEN '&F03' OR '&F12' OR '&F15'.
      LEAVE TO SCREEN 0."返回上一屏幕
    WHEN 'TEST'.
      MESSAGE 'TEST CLICKED' TYPE 'S'.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.

*&---------------------------------------------------
*&FORM SUB SCREEN 2000
*&---------------------------------------------------
FORM sub_screen_2000.
  PERFORM frm_prepare_layout
  CHANGING
    gw_layout_alv.
ENDFORM.
*&---------------------------------------------------
*&FORM FRM 2000 ALV SCREEN
*&---------------------------------------------------
FORM frm_2000_alv_show.
  DATA:
    lw_variant           TYPE disvariant,
    lo_event_handler_alv TYPE REF TO lcl_event_receiver.
    lw_variant-report = sy-repid.
  PERFORM frm_set_alv.
  CREATE OBJECT lo_event_handler_alv.
  IF g_grid_alv IS INITIAL.
    CREATE OBJECT g_custom_container_alv
      EXPORTING
        container_name = g_container_alv."带参数的构造函数

    CREATE OBJECT g_grid_alv
      EXPORTING
        i_parent = g_custom_container_alv."带参数的构造函数

    CALL METHOD g_grid_alv->set_table_for_first_display
      EXPORTING
        is_layout            = gw_layout_alv
        it_toolbar_excluding = gt_exclude_alv
        i_save               = 'A'
        is_variant           = lw_variant
      CHANGING
        it_fieldcatalog      = gt_fieldcat_alv
        it_outtab            = git_stu[].

    SET HANDLER lo_event_handler_alv->handle_toolbar_alv FOR g_grid_alv.

    CALL METHOD g_grid_alv->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_modified.

*用户操作
    SET HANDLER lo_event_handler_alv->handle_user_command_alv FOR g_grid_alv.
    SET HANDLER lo_event_handler_alv->handle_data_changed_alv FOR g_grid_alv.

*ALV双击
    SET HANDLER lo_event_handler_alv->handle_double_click FOR g_grid_alv.
    CALL METHOD g_grid_alv->set_toolbar_interactive.
  ELSE.
    CALL METHOD g_grid_alv->refresh_table_display.
    CALL METHOD cl_gui_cfw=>flush.
  ENDIF.
ENDFORM.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新能源汽车充电基础设施短板问题多,如何实现高效、综合、智能化管理?

随着城市经济的发展&#xff0c;人民生活水平的提升&#xff0c;新能源汽车保有量快速增长&#xff0c;而日益增长的新能源汽车需求与充电基础设施建设不平衡的矛盾日益突出。由于停车泊位充电基础设施总量不足、布局待优化、利用效率低、建设运营存在短板问题等原因&#xff0…

LeetCode:19.删除链表倒数第N个节点

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;19.删除链表倒数第N个节点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表…

vscode可以编译通过c++项目,但头文件有红色波浪线的问题

1、打开 VSCode 的设置&#xff0c;可以通过快捷键 Ctrl Shift P 打开命令面板&#xff0c;然后搜索并选择 “C/C: Edit Configurations (JSON)” 命令&#xff0c;这将在 .vscode 文件夹中创建或修改 c_cpp_properties.json 文件 {"configurations": [{"name…

Windows远程连接桌面报错“由于没有远程桌面授权服务器可以提供许可证,远程会话连接已断开。请跟服务器管理员联系

摘要 windows server配置了多用户登录&#xff0c;默认自动生成的连接许可证有效日期为120天&#xff0c;超过了这个时间后&#xff0c;用户将不能远程连接服务器。 需要配置多用户服务器&#xff0c;进行获取许可 问题 解决方法 1、win键R打开运行器&#xff0c;使用mstsc …

Qt程序发布及打包成exe安装包

参考:Qt之程序发布以及打包成exe安装包 目录 一、简述 Qt 项目开发完成之后,需要打包发布程序,而因为用户电脑上没有 Qt 配置环境,所以需要将 release 生成的 exe 文件和所依赖的 dll 文件复制到一个文件夹中,然后再用 Inno Setup 打包工具打包成一个 exe 安装包,就可以…

受天鹅绒蠕虫启发:软胶机器人如何实现刚度可调的粘附控制

大家好&#xff01;今天来了解一篇微型机器人研究——《Stiffness-tunable velvet worm–inspired soft adhesive robot》发表于《SCIENCE ADVANCES》。大家想想&#xff0c;在人体内部这样复杂的环境中&#xff0c;微型机器人要稳定操作&#xff0c;粘附控制是多么关键啊&…

Flink--API 之 Source 使用解析

目录 一、Flink Data Sources 分类概览 &#xff08;一&#xff09;预定义 Source &#xff08;二&#xff09;自定义 Source 二、代码实战演示 &#xff08;一&#xff09;预定义 Source 示例 基于本地集合 基于本地文件 基于网络套接字&#xff08;socketTextStream&…

typescript基础入门

在官网的页页https://www.typescriptlang.org/可以调试。 &#xff03;类型推断 let str: string abclet str1: string str1a&#xff03;数组及类型断言let numArr [1, 2, 3]const result numArr.find(item > item >2) as numberresult * 5&#xff03;基础类型和…

SenseVoice 音频转文字情绪识别 - python 实现

具体代码实现如下&#xff1a; from funasr import AutoModel from funasr.utils.postprocess_utils import rich_transcription_postprocesspath_audio "emo/happy.mp3"# 音频文件 # 加载模型 model_dir "iic/SenseVoiceSmall" model AutoModel(model…

Java学习笔记--继承方法的重写介绍,重写方法的注意事项,方法重写的使用场景,super和this

目录 一&#xff0c;方法的重写 二&#xff0c;重写方法的注意事项 三&#xff0c;方法重写的使用场景 四&#xff0c;super和this 1.继承中构造方法的特点 2.super和this的具体使用 super的具体使用 this的具体使用 一&#xff0c;方法的重写 1.概述:子类中有一个和父类…

深入浅出摸透AIGC文生图产品SD(Stable Diffusion)

hihi,朋友们,时隔半年(24年11月),终于能腾出时间唠一唠SD了🤣,真怕再不唠一唠,就轮不到SD了,技术更新换代是在是太快! 朋友们,最近(24年2月)是真的没时间整理笔记,每天都在疯狂的学习Stable Diffusion和WebUI & ComfyUI,工作实在有点忙,实践期间在飞书上…

OSI七层模型和TCP/IP五层模型详细介绍

这里写目录标题 一.OSI含义二.OSI七层模型1.应用层2.表示层3.会话层4.传输层5.网络层6.数据链路层7.物理层 TCP/IP五层协议1.应用层2.运输层运行在TCP上的协议运行在UDP上的协议 3.网络层IP协议配套使用的协议 4.数据链路层 四.网络协议分层的好处 一.OSI含义 OSI即是开放式通…

360推出全新的生成式 AI 搜索产品:纳米搜索,要重塑搜索产品

【大力财经】直击互联网最前线&#xff1a;360 集团在 2024 年 11 月 27 日开发布会&#xff0c;重磅推出了一款全新的生成式 AI 搜索产品——纳米搜索&#xff0c;并且已经上架到苹果 App Store 以及应用宝等安卓应用商店&#xff0c;直接与百度、阿里夸克、秘塔 AI、Perplexi…

【超全】目标检测模型分类对比与综述:单阶段、双阶段、有无锚点、DETR、旋转框

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

c#:winform引入bartender

1、vs新建项目 ①选择Windows窗体应用&#xff08;.NET Framework&#xff09; 2、将bartender引入vs中 ①找到bartender的安装目录&#xff0c;复制Seagull.BarTender.Print.dll文件 ②粘贴到项目->bin->Debug文件&#xff0c;并可创建Model文件夹&#xff1a;为了存放…

vue 实现关键字高亮效果

vue 实现关键字高亮效果 这是啥子意思呢&#xff0c;就是类似于百度搜索&#xff0c;根据关键词搜索结果&#xff0c;搜索结果中&#xff0c;与关键词相同的字显示红色&#xff0c;仅此而已&#xff0c;没有什么大的功能。简单写一下demo。 环境 我使用的是 vue3 ts 的语法来…

初始Python篇(7)—— 正则表达式

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; Python 目录 正则表达式的概念 正则表达式的组成 元字符 限定符 其他字符 正则表达式的使用 正则表达式的常见操作方法 match方法的…

[DL]深度学习_扩散模型正弦时间编码

1 扩散模型时间步嵌入 1.1 时间步正弦编码 在扩散模型按时间步 t 进行加噪去噪过程时&#xff0c;需要包括反映噪声水平的时间步长 t 作为噪声预测器的额外输入。但是最初与图像配套的时间步 t 是数字&#xff0c;需要将代表时间步 t 的数字编码为向量嵌入。嵌入时间向量的宽…

【Linux】网络基本配置命令

一、使用网络配置命令 1.常用网络配置文件 1.1. /etc/hosts “/etc/hosts”文件保存着IP地址和主机名或域名的静态映射关系。当用户使用一个主机名或域名时&#xff0c;系统会在该文件中查找与它对应的IP地址。 [rootlocalhost ~]# cat /etc/hosts 127.0.0.1 localhost l…

如何搭建一个小程序:从零开始的详细指南

在当今数字化时代&#xff0c;小程序以其轻便、无需下载安装即可使用的特点&#xff0c;成为了连接用户与服务的重要桥梁。无论是零售、餐饮、教育还是娱乐行业&#xff0c;小程序都展现了巨大的潜力。如果你正考虑搭建一个小程序&#xff0c;本文将为你提供一个从零开始的详细…