ABAP OO ALV模板(Docking 容器)

2023-10-11 19:40
文章标签 模板 容器 abap docking alv oo

本文主要是介绍ABAP OO ALV模板(Docking 容器),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

来了新入职的开发同事,因为之前双方都来自不同的乙方公司,所以开发习惯上有挺大的差异
我之前的公司是使用的LVC函数进行的报表开发,另一位同事是公司是使用的OO ALV进行开发,借此机会拓展一下知识面,再补补报表开发的基础
感觉Docking容器的应用应该比Custome Control来的多一些,毕竟不需要在屏幕上固定划出一块区域作为ALV展示的自定义容器,用户还能通过拖拽自定义容器的大小
开发步骤如下:

新建屏幕

开发Docking 容器的OO ALV只需要新建一个屏幕即可
在这里插入图片描述
OO ALV中常用的是ALV的tool bar,所以会把应用程序工具栏隐藏掉,勾选【无应用程序工具栏】即可
在这里插入图片描述
在屏幕流逻辑中新建module
在这里插入图片描述

新建GUI 状态 & GUI 标题

新建的GUI状态是空白的,标准工具栏的功能大多数都没有,至少把退出的几个功能先实现出来,否则用户进入ALV之后就无法退出
在这里插入图片描述
新建GUI标题,代码中可以用占位符&填充自定义文本
在这里插入图片描述

代码实现

********************************************************************
* 事务代码:                                                       *
* 程序名称:                                                       *
* 程序目的:OO ALV Docking容器                                     *
* 设 计 人:                                                       *
* 开 发 人:                                                       *
* 设计时间:2023-05-30                                             *
* 程序类型: ABAP/4 程序 ,报表程序                                 *
* 应用类型: XX                                                     *
* 描    述:                                                        *
*(修改日志)--------------------------------------------------------*
*                                                                  *
* 日志号   修改人  修改时间       修改说明              传输号码   *
*  ----    ----    ------         -----------
*   001    Seele   2023-05-29     创建报表程序                     *
********************************************************************REPORT zdemo_seele10.
*----------------------------------------------------------------------*
* 数据库表声明/Database table declaration
*----------------------------------------------------------------------*
TABLES:mkpf,  " 物料凭证抬头mara,mseg.  " 物料凭证行项目*----------------------------------------------------------------------*
* 结构声明类型/Structure type declaration
*----------------------------------------------------------------------*
*&---主表数据/master table data
TYPES:BEGIN OF ty_output,matnr TYPE makt-matnr           , " 物料maktx TYPE makt-maktx           , " 物料描述spras TYPE makt-spras           , " 语言代码box   TYPE c                    , " 选择框END OF ty_output.*----------------------------------------------------------------------*
* 全局变量定义/Global variable definition
*----------------------------------------------------------------------*
*&---全局内表定义
DATA:gt_output TYPE TABLE OF ty_output.  " 主数据表*&---全局结构定义
DATA:gs_output TYPE ty_output.           " 主数据结构*&---全局变量定义
DATA:gv_lines TYPE string.  " 统计行数*&---------------------------------------------------------------------*
*& 字段串定义/Field-symbols                                            *
*&---------------------------------------------------------------------*
FIELD-SYMBOLS:<fs_output> TYPE ty_output.*&---------------------------------------------------------------------*
*& 类定义/Class                                                        *
*&---------------------------------------------------------------------*
CLASS cl_events DEFINITION.PUBLIC SECTION." ALV工具栏按钮METHODS: handle_toolbar       FOR EVENT toolbar      OF cl_gui_alv_gridIMPORTING e_object e_interactive,handle_user_command  FOR EVENT user_command OF cl_gui_alv_gridIMPORTING e_ucomm.ENDCLASS.*&---------------------------------------------------------------------*
*& 类实现/Class Implementation                                                        *
*&---------------------------------------------------------------------*
CLASS cl_events IMPLEMENTATION." ALV工具栏按钮METHOD handle_toolbar.PERFORM frm_handle_toolbar CHANGING e_object e_interactive.ENDMETHOD." ALV工具栏事件METHOD handle_user_command.PERFORM frm_handle_command CHANGING e_ucomm.ENDMETHOD.ENDCLASS.*&---------------------------------------------------------------------*
*& 对象定义/Object                                                     *
*&---------------------------------------------------------------------*
DATA: go_events TYPE REF TO cl_events,go_alv    TYPE REF TO cl_gui_alv_grid,go_dctn   TYPE REF TO cl_gui_docking_container.*&---------------------------------------------------------------------*
*&  ALV TYPE/ALV 类型定义
*&---------------------------------------------------------------------*
*&---ALV数据组,类型池
TYPE-POOLS:slis,vrm.*&---定义ALV显示的字段列及其描述等属性
DATA:gt_fieldcat TYPE TABLE OF lvc_s_fcat, " ALV 控制: 字段目录gs_fieldcat TYPE lvc_s_fcat,          " ALV 控制: 字段目录gs_layout   TYPE lvc_s_layo.          " ALV 控制: 布局结构*&---------------------------------------------------------------------*
*&  Macro 宏定义
*&---------------------------------------------------------------------*
DEFINE mcr_set_catalog.gs_fieldcat-fieldname  = &1. " 字段技术名称gs_fieldcat-coltext    = &2. " 显示名称gs_fieldcat-ref_table  = &3. " 参照表gs_fieldcat-ref_field  = &4. " 参照表字段gs_fieldcat-qfieldname = &5. " 参考计量单位的字段名称gs_fieldcat-key        = &6. " key 值gs_fieldcat-edit       = &7. " 可编辑APPEND gs_fieldcat TO gt_fieldcat.CLEAR  gs_fieldcat.
END-OF-DEFINITION.*&---------------------------------------------------------------------*
*& Selection Screen/选择屏幕
*&---------------------------------------------------------------------*
*&---选择屏幕块
SELECTION-SCREEN BEGIN OF BLOCK blk01 WITH FRAME TITLE TEXT-101.*&---范围
SELECT-OPTIONS:s_matnr FOR mara-matnr .            " 物料凭证SELECTION-SCREEN END OF BLOCK blk01.*&---------------------------------------------------------------------*
*& Start-of-selection/开始选择屏幕                                     *
*&---------------------------------------------------------------------*
START-OF-SELECTION.
*&---内表数据获取PERFORM frm_get_data.IF gt_output IS INITIAL.MESSAGE s000(zmm001) DISPLAY LIKE 'E'.EXIT.ENDIF.*&---------------------------------------------------------------------*
*& end-of-selection/结束选择屏幕(程序结束处理,输出等)               *
*&---------------------------------------------------------------------*
END-OF-SELECTION.CALL SCREEN '9001'.*&---------------------------------------------------------------------*
*&      Form  frm_get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_10     text
*----------------------------------------------------------------------*
FORM frm_get_data.DATA:lv_tabix TYPE i,lv_atinn TYPE ausp-atinn.FREE:gt_output.SELECTmatnr,  " 物料编码maktx,  " 物料描述spras   " 语言代码FROM maktWHEREmatnr IN @s_matnrINTO CORRESPONDING FIELDS OF TABLE @gt_outputUP TO 100 ROWS.gv_lines = lines( gt_output ).gv_lines = gv_lines && TEXT-t01.ENDFORM.                    " frm_get_data*&---------------------------------------------------------------------*
*& Form FRM_INIT_SCREEN_9001
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_init_screen_9001 .
*&===ALV 输出
*&---设置ALV对象PERFORM frm_init_object.
*&---注册ALV事件PERFORM frm_register_event.
*&---设置ALV输出格式PERFORM frm_init_layout.
*&---设置ALV输出字段PERFORM frm_set_fieldcat.
*&---ALV 显示PERFORM frm_display_alv.
ENDFORM.*&---------------------------------------------------------------------*
*&      Form  frm_init_object
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_init_object ." 容器对象CREATE OBJECT go_dctnEXPORTINGrepid     = sy-repid      " 当前程序名dynnr     = sy-dynnr      " 当前屏幕号extension = 2000.   " 当前长宽" GRID对象CREATE OBJECT go_alvEXPORTINGi_parent = go_dctn." 事件对象CREATE OBJECT go_events.ENDFORM.                    " frm_init_object*&---------------------------------------------------------------------*
*& Form FRM_REGISTER_EVENT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_register_event .SET HANDLER go_events->handle_toolbar      FOR go_alv.SET HANDLER go_events->handle_user_command FOR go_alv.
ENDFORM.*&---------------------------------------------------------------------*
*&      Form  frm_init_layout
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_init_layout .CLEAR gs_layout.gs_layout-zebra      = 'X' .    " 斑马线gs_layout-cwidth_opt = 'X' .    " 自动调整ALVL列宽
*  gs_layout-no_toolbar = 'X' .    " 隐藏工具栏gs_layout-sel_mode   = 'A'.     "选择模式gs_layout-box_fname  = 'BOX'.   "选择字段
ENDFORM.                    " frm_init_layout
*&---------------------------------------------------------------------*
*&      Form  frm_fieldcat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_set_fieldcat .
*&---ALV 输出字段目录,涉及字段必须大写mcr_set_catalog: 'MATNR'       TEXT-a01    'MAKT'      'MATNR'       '' ''  '', " 物料'MAKTX'       TEXT-a02    'MAKT'      'MAKTX'       '' ''  '', " 物料描述'SPRAS'       TEXT-a03    'MAKT'      'SPRAS'       '' ''  ''. " 语言代码ENDFORM.                    " frm_fieldcat*&---------------------------------------------------------------------*
*&      Form  frm_display_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_display_alv .
*&---ALV 显示函数IF go_alv IS BOUND.CALL METHOD go_alv->set_table_for_first_displayEXPORTING
*        is_variant      = ls_variantis_layout       = gs_layouti_save          = 'A'i_default       = 'X'CHANGINGit_outtab       = gt_outputit_fieldcatalog = gt_fieldcat.ENDIF.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.
ENDFORM.                    " frm_display_alv
*&---------------------------------------------------------------------**&---------------------------------------------------------------------*
*& Form FRM_HANDLE_TOOLBAR
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- E_OBJECT
*&      <-- E_INTERACTIVE
*&---------------------------------------------------------------------*
FORM frm_handle_toolbar  CHANGING pe_object       TYPE REF TO cl_alv_event_toolbar_setpe_interactive  .DATA ls_toolbar TYPE stb_button." 设置竖线以区分按钮区域ls_toolbar-butn_type = 3.APPEND ls_toolbar TO pe_object->mt_toolbar.CLEAR ls_toolbar." 自定义功能按钮ls_toolbar = VALUE #( function  = 'PRT'icon      = icon_printtext      = '打印'quickinfo = 'Print' ).APPEND ls_toolbar TO pe_object->mt_toolbar.ENDFORM.*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND_9001
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_user_command_9001 .CASE sy-ucomm.WHEN 'BACK'.LEAVE TO SCREEN 0.WHEN 'EXIT'.LEAVE PROGRAM.WHEN OTHERS.ENDCASE.ENDFORM.*&---------------------------------------------------------------------*
*& Form FRM_HANDLE_COMMAND
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- E_UCOMM
*&---------------------------------------------------------------------*
FORM frm_handle_command  CHANGING pe_ucomm.CASE pe_ucomm.WHEN 'PRT'.MESSAGE '点击打印' TYPE 'S'.WHEN OTHERS.ENDCASE.
ENDFORM.*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9001 OUTPUT.SET PF-STATUS 'STATUS_9001'.SET TITLEBAR 'TITLE_9001' WITH gv_lines.PERFORM frm_init_screen_9001.
ENDMODULE.*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9001  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9001 INPUT.PERFORM frm_user_command_9001.
ENDMODULE.

效果图

在这里插入图片描述
参考文档:大佬夜猫君的博客

这篇关于ABAP OO ALV模板(Docking 容器)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/190376

相关文章

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

最大流、 最小费用最大流终极版模板

最大流  const int inf = 1000000000 ;const int maxn = 20000 , maxm = 500000 ;struct Edge{int v , f ,next ;Edge(){}Edge(int _v , int _f , int _next):v(_v) ,f(_f),next(_next){}};int sourse , mee

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle