ABAP 之ALV展示及下钻弹窗数据页面

news2024/11/17 12:46:52

HELLO, 这里是百里一个学习中的ABAPER,这里记录工作学习中遇到的bug,知识内容等内容.今天讲的是在工作中经常会使用的数据下钻,通过跳出小界面的方式展示关联数据.今天结合工作经验这里做下技术总结.

下钻简介

在ALV报表展示中.会出现关键字段下钻,展示某个界面或者系统自带界面.此时需要给增加 user_command 事件. 下钻内容包括,展示具体某个界面,系统界面,与关键字对应的ALV界面.

技术介绍

下钻弹窗数据展示的关键技术为调用函数 cl_salv_table=>factory 展示一个新的ALV容器数据. 首先先跟本身第一层开发ALV方式一样, 定义默认基础数据集,权限检查,定义ALV layout ,fieldcat 等相关属性内容. 同时设定对应的staus 及usercommd 方便操作用户事件.设定第一层ALV展示数据的基础上,设定hot字段,在按照关键字段关联对应下一级ALV展示数据.

TRY.
cl_salv_table=>factory(
IMPORTING r_salv_table = go_alv "导出ALV的容器对象
CHANGING t_table = lt_item[] ). "内容表 
CATCH cx_root INTO cxroot. 
excmsg = cxroot->get_text( ). 
MESSAGE e000(oo) WITH excmsg. 
ENDTRY.
go_funlst = go_alv->get_functions( ). 
go_funlst->set_all( 'X' ). 

实例展示

此例子第一层为VBAK 表 VBELN 字段,第二层内容为对应VBELN 单号对应的 料号数据及料号长描述例子.

创建数据集

设定ALV 定义相关结构,工作区内表.同时定义必要字段如ALV展示相关变量.usercomed 变量.格式及样式变量字段.

TYPE-POOLS: slis.TYPE-POOLS: kcde.*&---------------------------------------------------------------------* 
*&      TABLES*&---------------------------------------------------------------------* 
TABLES: vbap,vbak.*----------------------------------------------------------------------* 
* GLOBAL INTERNAL TABLES DECLARATION*----------------------------------------------------------------------* 
DATA: gt_file TYPE filetable.*----------------------------------------------------------------------* 
* GLOBAL VARIANTS DECLARATION*----------------------------------------------------------------------* 
DATA: g_repid TYPE sy-repid.DATA: gt_field TYPE slis_t_fieldcat_alv.*定义读入EXCEL的内表TYPES : BEGIN OF typ_alv ,          vbeln TYPE vbak-vbeln,          erdat TYPE vbak-erdat, "创建日期          vkorg TYPE vbak-vkorg, "销售组织          vkbur TYPE vbak-vkbur, "销售办事处          ernam TYPE vbak-ernam, "创建人          sel   TYPE c , "    复选框        END OF typ_alv .DATA : gs_alv   TYPE typ_alv,       gt_print TYPE TABLE OF typ_alv,       gt_alv   TYPE TABLE OF typ_alv.* ALV 用DATA:  gs_layout   TYPE lvc_s_layo,  gv_repid    TYPE repid,  gt_fieldcat TYPE lvc_t_fcat,  ls_fieldcat TYPE lvc_s_fcat.DATA: g_grid TYPE REF TO cl_gui_alv_grid.*创建字段宏定义DEFINE add_field.  ls_fieldcat-fieldname = '&1' .  "字段名称  ls_fieldcat-ref_table = &2. "关联表格  ls_fieldcat-ref_field = &3."参考字段  ls_fieldcat-coltext = &4. "描述文本  APPEND ls_fieldcat TO gt_fieldcat.  CLEAR ls_fieldcat.END-OF-DEFINITION. 

设定选择屏幕

筛选关键字段,where 条件.

*--------选择条件 
SELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE TEXT-001.  SELECT-OPTIONS:                    s_vkorg  FOR     vbak-vkorg OBLIGATORY,"销售组织                    s_vkbur  FOR     vbak-vkbur ,"销售办公室                    s_ernam  FOR     vbak-ernam."创建人SELECTION-SCREEN END OF BLOCK bl01. 

获取数据内容

INITIALIZATION .AT SELECTION-SCREEN OUTPUT .*----------------------------------------------------------------------* 
* EVENT OCCURS AFTER THE SELECTION SCREEN HAS BEEN PROCESSED*----------------------------------------------------------------------* 
START-OF-SELECTION.  PERFORM frm_auth_check.  "权限检查  PERFORM frm_getdata .    "获取数据  --GETTING DATA 
  PERFORM frm_display_data.  "展示ALVEND-OF-SELECTION.*&------------------


FORM frm_getdata .  SELECT vbak~vbeln,         vbak~erdat,"创建日期         vbak~vkorg,"销售组织         vbak~vkbur, "销售办事处         vbak~ernam    FROM vbak   WHERE vbak~vkorg IN @s_vkorg    AND  vbak~vkbur IN @s_vkbur    AND  vbak~ernam IN @s_ernam    INTO CORRESPONDING FIELDS OF TABLE @gt_alv.ENDFORM. 

ALV展示内容

FORM frm_display_data .  DATA : lv_html_header TYPE slis_formname  .*定义输出模式  CLEAR:gs_layout,gt_fieldcat.  gs_layout-cwidth_opt         = 'X'.  gs_layout-zebra              = 'X'.  gs_layout-box_fname              = 'SEL'.  gv_repid = sy-repid.  PERFORM frm_set_fieldcat.  .*  TRY .  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'    EXPORTING      i_callback_program       = gv_repid      i_callback_user_command  = 'FRM_USER_COMMAND'      i_callback_pf_status_set = 'FRM_PF_STATUS'      is_layout_lvc            = gs_layout      it_fieldcat_lvc          = gt_fieldcat      i_save                   = 'A'    TABLES      t_outtab                 = gt_alv    EXCEPTIONS      program_error            = 1      OTHERS                   = 2.  IF sy-subrc <> 0.    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.  ENDIF.ENDFORM.
FORM frm_set_fieldcat .  add_field:          vbeln   'VBAK'   'VBELN' '销售订单',          erdat   'VBAK'   'ERDAT' '创建日期',          vkorg   'VBAK'   'VKORG' '销售组织',          vkbur   'VBAK'   'VKBUR' '销售办事处',          ernam   'VBAK'   'ERNAM' '创建人'.ENDFORM.FORM frm_pf_status USING extab TYPE slis_t_extab.  DATA: fcode TYPE TABLE OF sy-ucomm.  CLEAR:fcode[].  SET PF-STATUS 'STANDARD' EXCLUDING fcode[] .ENDFORM.*&---------------------------------------------------------------------**&      FORM  FRM_USER_COMMAND*&---------------------------------------------------------------------**       自定义用户动作*----------------------------------------------------------------------**  -->  P1        TEXT*  <--  P2        TEXT*----------------------------------------------------------------------**自定义用户动作FORM frm_user_command USING p_ucomm TYPE sy-ucomm rs_selfield TYPE slis_selfield.  DATA : l_ucomm TYPE sy-ucomm  .  IF g_grid IS INITIAL.    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'      IMPORTING        e_grid = g_grid.  ENDIF.  "失去焦点触发更新内表  CALL METHOD g_grid->register_edit_event    EXPORTING      i_event_id = cl_gui_alv_grid=>mc_evt_modified.  CALL METHOD g_grid->check_changed_data.  rs_selfield-refresh     = 'X'.  rs_selfield-col_stable  = 'X'.  rs_selfield-row_stable  = 'X'.  l_ucomm = p_ucomm .  CLEAR p_ucomm .  DATA : l_uname TYPE sy-uname,         l_datum TYPE sy-datum,         l_uzeit TYPE sy-uzeit.  CASE l_ucomm.    WHEN '&IC1'. "双击      READ TABLE gt_alv INDEX rs_selfield-tabindex INTO DATA(wa_sel_temp).  "双击行      IF sy-subrc = 0 .*        SET PARAMETER ID 'VL' FIELD WA_SEL_TEMP-VBELN .*        CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN ."SKIP FIRST SCREEN 忽略SELECTION SCREEN        PERFORM displat_item USING wa_sel_temp-vbeln.      ENDIF.      CLEAR:wa_sel_temp.    WHEN OTHERS.  ENDCASE.ENDFORM.*&---------------------------------------------------------------------**&---------------------------------------------------------------------**&---------------------------------------------------------------------**& FORM DISPLAT_ITEM*&---------------------------------------------------------------------**& TEXT*&---------------------------------------------------------------------**& -->  P1        TEXT*& <--  P2        TEXT*&---------------------------------------------------------------------*FORM displat_item  USING p_vbeln.  DATA: go_alv    TYPE REF TO cl_salv_table,        go_funlst TYPE REF TO cl_salv_functions_list.  DATA: cxroot TYPE REF TO cx_root,        excmsg TYPE c.  CLEAR:go_alv,go_funlst.  SELECT vbap~vbeln,         vbap~posnr,         vbap~matnr,         vbap~ZMENG,         makt~maktx    FROM vbap    LEFT JOIN makt ON makt~matnr EQ vbap~matnr AND makt~spras = '1'   WHERE vbeln = @p_vbeln    INTO TABLE @DATA(lt_item).  IF sy-subrc = 0.    TRY.        cl_salv_table=>factory(        IMPORTING        r_salv_table = go_alv   "导出ALV的容器对象        CHANGING        t_table = lt_item[] ).  "内容表      CATCH cx_root INTO cxroot.        excmsg = cxroot->get_text( ).        MESSAGE e000(oo) WITH excmsg.    ENDTRY.    go_funlst = go_alv->get_functions( ).    go_funlst->set_all( 'X' ).    "重新设置列名称    go_alv->get_columns( )->get_column( 'MAKTX' )->set_long_text( 'TES删除' )."    IF go_alv IS BOUND."设置窗口大小与位置-      go_alv->set_screen_popup(      start_column = 30      end_column = 160      start_line = 5      end_line = 20 ).      go_alv->display( ).    ENDIF.  ENDIF.ENDFORM. 

结果展示

如图展示内容结果,一级对应的字段为,VBAK 表中的 销售订单,创建日期,销售组织,销售办事处,创建人等字段, 通过usercomed ,双击数据VBELN下钻到下一层ALV数据. 下层ALV数据展示内容为 销售订单凭证,行号,料号,目标数量,同时可以使用 go_alv->get_columns( )->get_column( 'MAKTX' )->set_long_text( 'TES删除' )." 给对应的字段附加更换列名.

技术总结

ALV数据下钻是在工作中经常使用的必要内容.能够熟练使用ALV下钻并按照关键字展示下级相关ALV数据是一个ABAPER 必会内容. 此文详细讲解了必要技术.希望能够帮助大家 .

贵有恒何必三更起五更睡,最无益只怕一日曝十日寒。 这里是百里,一个年近30的中年程序员.希望能够帮到您.

最后

最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

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

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

相关文章

C语言基础--操作符详解

文章目录一、操作符1. 算数操作符2. 移位操作符&#xff08;1&#xff09;右移操作符举例补充&#xff08;2&#xff09;左移操作符举例分析&#xff08;3&#xff09;警告3.位操作符&#xff08;1&#xff09;按位与&#xff08;2&#xff09;按位或&#xff08;3&#xff09;…

小程序之后台交互--个人中心

目录一、微信登录流程简介二、微信用户信息获取1、index.js2、index.wxml三、微信登录流程代码详解1、后台准备①导入微信小程序SDK②application.yml③WxProperties④WxConfig⑤WxAuthController1、登录-小程序①login.js②user.js③util.js四、emoji的存储1、修改配置文件my.…

ArcGIS基础实验操作100例--实验24提取栅格独立格网面

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验24 提取栅格独立格网面 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;…

VMware 中 克隆多台虚拟机 快速创建虚拟机集群

我们在实际开发中可能会涉及到多台虚拟机&#xff0c;所以我们这里就模仿企业的方式进行多台虚拟机的操作方法&#xff1a; 我们现在就来学习一下如何用一台已有的虚拟机克隆出多台虚拟机。 我们第一步先来进行虚拟机的克隆&#xff1a; 我们现在就有了3太虚拟机了。 启动第一…

excel超链接应用:快速生成目录的几个方法-下

在上篇文章中&#xff0c;我们说到了基本的制作目录的方法&#xff0c;以及用宏表函数和超链接函数制作目录、用快捷键CTRLF制作目录的方法。今天我们要分享的另外三种方法&#xff0c;保证小伙伴们闻所未闻见所未见&#xff0c;一个公式都不用&#xff0c;就能完成目录的制作&…

镜头分辨率的计算和理解

镜头分辨力 计算和理解 1、镜头分辨率 镜头的分辨率是指在成像平面上 1 毫米间距内能分辨开的黑白相间的线条对数&#xff0c;单位是“线对/毫米”&#xff08; lp/mm&#xff0c;line-pairs/mm &#xff09; 最小能分辨的尺寸是线对数的2倍倒数。 例如&#xff1a;镜头分辨率…

Spark 3.0 - 16.ML SVD 奇异值分解理论与实战

目录 一.引言 二.奇异值分解理论 1.行矩阵 RowMatrix 2.奇异值分解算法 三.奇异值分解实战 1.构建 RowMatrix 2.奇异值分解 SVD 四.总结 一.引言 奇异值分解是矩阵分解计算的一种常用方法&#xff0c;矩阵分解主要用于数据降维&#xff0c;通过将高维的数据映射到低维…

Navicat 16 中改进了的协同合作

几年前&#xff0c;当 Navicat 团队加入 Navicat Cloud 协同合作工具时&#xff0c;几乎没有人知道一个全球大流行的疫情会使协同合作成为大多数组织的重要组成部分&#xff0c;尤其是那些提供任何信息技术&#xff08;IT&#xff09;相关服务的组织。在 2021 年的最后几天&…

ArcGIS基础实验操作100例--实验26创建多分辨率DEM

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验26 创建多分辨率DEM 目录 一、实验背景 二、实验数据 三、实验步骤 方法一&#xff…

嵌入式C语言设计模式 --- 关于工厂模式的总结

前面三篇关于工厂模式的文章,主要介绍了三种工厂模式,分别是:简单工厂模式、工厂方法模式、抽象工厂模式。 关于这三种工厂模式,都各有利弊,应该根据不同的业务开发场景进行选择使用。 图片来源:网络 简单工厂模式 是最容易理解的一种设计模式,简单工厂模式不属于23种…

Spring循环依赖探究

1. 前言 Spring在较新版本中已经默认不允许bean之间发生「循环依赖」了&#xff0c;如果检测到循环依赖&#xff0c;容器启动时将会报错&#xff0c;此时可以通过配置来允许循环依赖。 spring.main.allow-circular-referencestrue什么是循环依赖&#xff1f; 循环依赖也叫循环…

【Python百日进阶-数据分析】Day143 - plotly箱线图:px.box()实例

文章目录四、实例4.1 plotly.express箱线图4.1.1 基本箱线图4.1.2 为 x的每个值绘制一个箱线图4.1.3 显示基础数据4.1.4 选择计算四分位数的算法4.1.5 四分位数算法之间的区别4.1.6 风格箱线图4.1.7 Dash中的箱线图四、实例 箱线图是变量通过其四分位数分布的统计表示。盒子的…

并发编程——3.共享模型之管程

目录3.共享模型之管程3.1.共享带来的问题3.1.1.Java中的体现3.1.2.问题分析3.1.3.临界区 (Critical Section)3.1.4.竞态条件 (Race Condition)3.2.synchronized 解决方案3.3.方法上的 synchronized3.4.变量的线程安全分析3.4.1.成员变量和静态变量是否线程安全&#xff1f;3.4.…

SpringBoot+VUE前后端分离项目学习笔记 - 【07 SpringBoot实现增删改查】

增删改查代码编写 UserController.java package com.zj.demo.controller;import com.zj.demo.entity.User; import com.zj.demo.mapper.UserMapper; import com.zj.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.sp…

CVPR 2017|Deep Feature Flow for Video Recognition论文复现(pytorch版)

&#x1f3c6;引言&#xff1a;深度卷积神经网络在图像识别任务中取得了巨大的成功。然而&#xff0c;将最先进的图像识别网络转移到视频上并非易事&#xff0c;因为每帧评估速度太慢且负担不起。我们提出了一种快速准确的视频识别框架——深度特征流DFF。它只在稀疏关键帧上运…

数据结构与算法_五大算法之--回溯算法

1 回溯算法 回溯算法具有通用性&#xff0c;但是算法的效率不高&#xff0c;通常可以通过剪枝等操作提高算法的效率。 算法思想&#xff1a; 在包含问题的所有解空间树中&#xff0c;按照深度优先搜索的策略&#xff0c;从根节点出发&#xff0c;深度搜索解空间树。当搜索到某…

APSIM作物生长模型学习

由于研究需要&#xff0c;将对APSIM模型使用进行一定学习&#xff0c;特做此笔记&#xff0c;也供该模型的初学者共同进步。 首先是版本选择&#xff0c;这个模型发展较长&#xff0c;有经典的classic版本和次世代版本&#xff0c;而经过实际验证&#xff0c;次世代版本和经典版…

RHCSA 第六天笔记

网络配置 1&#xff0c;ip 命令 ip a 2,修改配置文件&#xff08;不推荐&#xff09; 3&#xff0c;nmcli命令 4&#xff0c;nmtui命令 5&#xff0c;cockpit 网络接口是指网络中的计算机或网络设备与其他设备实现通讯的进出口。这里&#xff0c;主要是指计算机的网络接口即网…

学习笔记之Vue组件化编程(二)

Vue组件化编程&#xff08;二&#xff09;Vue组件化编程一、模块与组件&#xff0c;模块化与组件化1.1 对组件的理解1.2 模块1.3 组件1.4 模块化1.5 组件化&#xff08;二&#xff09;Vue组件化编程 一、模块与组件&#xff0c;模块化与组件化 1.1 对组件的理解 在传统式编写…

Centos7下mysql8.0读写分离的配置

1.前言 1.关于读写分离的原理&#xff0c;这里不做太多赘述。主要从服务器去读取主服务的binlog日志&#xff0c;完成数据同步的过程。 这里我在mac开启了2个虚拟机&#xff0c;ip分别为192.168.31.109 ,192.168.31.208系统为centos 2.配置主从分离之前&#xff0c;需要安装…