ABAP动态编程-动态生成报表、动态屏幕

2023-11-19

目录

前言

一、动态生成报表并调用

二、动态生成屏幕并调用

总结

前言

        本文主要讲述ABAP编程中根据逻辑自动生成报表及屏幕(依托语句GENERATE DYNPRO)的实现示例及简单说明。

一、动态生成报表并调用
        代码示例:

  " Create report
  INSERT REPORT lv_program FROM lt_codes STATE 'A'.
  COMMIT WORK AND WAIT.
  " Execute
  SUBMIT (lv_program) WITH SELECTION-TABLE lt_rsparams AND RETURN.
  " Delete
  DELETE REPORT lv_program.
        PS: 该种方式生成报表不会刷新所用处清单,可临时生成报表并调用来执行动态逻辑,缺点是和主程序交互麻烦。lv_program为程序名,lt_code 为代码,注意每行代码长度。

二、动态生成屏幕并调用
        代码示例:

DATA: lv_tabname TYPE tabname VALUE 'T001'.
 
DATA: ls_dynpro_header TYPE d020s,
      lt_feild_list    TYPE TABLE OF d021s,
      ls_feild_list    TYPE d021s,
      lt_flow_logic    TYPE TABLE OF d022s,
      ls_flow_logic    TYPE d022s,
      lt_matchcode     TYPE TABLE OF d023s,
      ls_matchcode     TYPE d023s,
      lv_message       TYPE text240,
      lv_lines         TYPE i,
      lv_word          TYPE char72.
 
DATA: BEGIN OF ls_dynp_id,
        prog LIKE d020s-prog,
        dnum LIKE d020s-dnum,
      END OF ls_dynp_id.
 
ls_dynp_id-prog = sy-repid.
ls_dynp_id-dnum = 9001.
 
CLEAR: ls_dynpro_header.
ls_dynpro_header-prog = sy-repid.
ls_dynpro_header-dnum = 9001.
ls_dynpro_header-fnum = 9001.
ls_dynpro_header-mili = 192.
ls_dynpro_header-mico = 37.
ls_dynpro_header-noli = 27.
ls_dynpro_header-noco = 121.
ls_dynpro_header-cuan = 'G'.
ls_dynpro_header-spra = '1'.
ls_dynpro_header-dgen = sy-datum.
ls_dynpro_header-tgen = sy-uzeit.
 
CLEAR ls_feild_list.
ls_feild_list-fnam = 'TEXT001'.
ls_feild_list-fmb1 = '30'.
ls_feild_list-leng = '0A'.
ls_feild_list-line = '02'.
ls_feild_list-coln = '02'.
ls_feild_list-type = 'CHAR'.
ls_feild_list-ityp = 'C'.
ls_feild_list-stxt = 'Table Name'.
APPEND ls_feild_list TO lt_feild_list.
 
CLEAR ls_feild_list.
ls_feild_list-fnam = 'lv_tabname'.
ls_feild_list-flg1 = '80'.
ls_feild_list-flg3 = '80'.
ls_feild_list-line = '02'.
ls_feild_list-leng = '10'.
ls_feild_list-coln = '0F'.
ls_feild_list-type = 'CHAR'.
ls_feild_list-ityp = 'C'.
ls_feild_list-stxt = '________________'.
APPEND ls_feild_list TO lt_feild_list.
 
CLEAR ls_feild_list.
ls_feild_list-fnam = ''.
ls_feild_list-flg1 = '80'.
ls_feild_list-flg2 = '10'.
ls_feild_list-line = 'FF'.
ls_feild_list-leng = '14'.
ls_feild_list-coln = '01'.
ls_feild_list-type = 'CHAR'.
ls_feild_list-ltyp = 'O'.
ls_feild_list-stxt = '________________'.
APPEND ls_feild_list TO lt_feild_list.
 
" 逻辑流代码
lt_flow_logic = VALUE #( ( line = `PROCESS BEFORE OUTPUT.`       )
                         ( line = `  MODULE STATUS_9001.`        )
                         ( line = `  `                           )
                         ( line = `PROCESS AFTER INPUT.`         )
                         ( line = `  MODULE USER_COMMAND_9001.`  )
                        ).
" 屏幕参数
lt_matchcode = VALUE #( ( type = '' content = '' ) ).
 
DELETE DYNPRO ls_dynp_id.
 
GENERATE DYNPRO ls_dynpro_header lt_feild_list lt_flow_logic lt_matchcode ID ls_dynp_id
             MESSAGE lv_message
             LINE lv_lines WORD lv_word.
             
CALL SCREEN ls_dynp_id-dnum.
DELETE DYNPRO ls_dynp_id.
          效果:

 

        可动态生成屏幕,即用即生成,用完即弃.该代码生成的屏幕缺点是不会关联所用处清单,即在SE80中无法查看,如果要永久生成使用如下代码.

DATA: lv_tabname TYPE tabname VALUE 'T001'.
 
DATA: ls_dynpro_header TYPE d020s,
      lt_feild_list    TYPE TABLE OF d021s,
      ls_feild_list    TYPE d021s,
      lt_flow_logic    TYPE TABLE OF d022s,
      ls_flow_logic    TYPE d022s,
      lt_matchcode     TYPE TABLE OF d023s,
      ls_matchcode     TYPE d023s,
      lv_message       TYPE text240,
      lv_lines         TYPE i,
      lv_word          TYPE char72.
 
DATA: BEGIN OF ls_dynp_id,
        prog LIKE d020s-prog,
        dnum LIKE d020s-dnum,
      END OF ls_dynp_id.
 
DATA: lv_obj_name TYPE e071-obj_name.
 
ls_dynp_id-prog = sy-repid.
ls_dynp_id-dnum = 9001.
 
CLEAR: ls_dynpro_header.
ls_dynpro_header-prog = sy-repid.
ls_dynpro_header-dnum = 9001.
ls_dynpro_header-fnum = 9001.
ls_dynpro_header-mili = 192.
ls_dynpro_header-mico = 37.
ls_dynpro_header-noli = 27.
ls_dynpro_header-noco = 121.
ls_dynpro_header-cuan = 'G'.
ls_dynpro_header-spra = '1'.
ls_dynpro_header-dgen = sy-datum.
ls_dynpro_header-tgen = sy-uzeit.
 
CLEAR ls_feild_list.
ls_feild_list-fnam = 'TEXT001'.
ls_feild_list-fmb1 = '30'.
ls_feild_list-leng = '0A'.
ls_feild_list-line = '02'.
ls_feild_list-coln = '02'.
ls_feild_list-type = 'CHAR'.
ls_feild_list-ityp = 'C'.
ls_feild_list-stxt = 'Table Name'.
APPEND ls_feild_list TO lt_feild_list.
 
CLEAR ls_feild_list.
ls_feild_list-fnam = 'lv_tabname'.
ls_feild_list-flg1 = '80'.
ls_feild_list-flg3 = '80'.
ls_feild_list-line = '02'.
ls_feild_list-leng = '10'.
ls_feild_list-coln = '0F'.
ls_feild_list-type = 'CHAR'.
ls_feild_list-ityp = 'C'.
ls_feild_list-stxt = '________________'.
APPEND ls_feild_list TO lt_feild_list.
 
CLEAR ls_feild_list.
ls_feild_list-fnam = ''.
ls_feild_list-flg1 = '80'.
ls_feild_list-flg2 = '10'.
ls_feild_list-line = 'FF'.
ls_feild_list-leng = '14'.
ls_feild_list-coln = '01'.
ls_feild_list-type = 'CHAR'.
ls_feild_list-ltyp = 'O'.
ls_feild_list-stxt = '________________'.
APPEND ls_feild_list TO lt_feild_list.
 
" 逻辑流代码
lt_flow_logic = VALUE #( ( line = `PROCESS BEFORE OUTPUT.`       )
                         ( line = `  MODULE STATUS_9001.`        )
                         ( line = `  `                           )
                         ( line = `PROCESS AFTER INPUT.`         )
                         ( line = `  MODULE USER_COMMAND_9001.`  )
                        ).
" 屏幕参数
lt_matchcode = VALUE #( ( type = '' content = '' ) ).
 
DELETE DYNPRO ls_dynp_id.
 
CALL FUNCTION 'RPY_DYNPRO_INSERT_NATIVE'
  EXPORTING
    header             = ls_dynpro_header
    dynprotext         = 'Generated dynpro'
  TABLES
    fieldlist          = lt_feild_list
    flowlogic          = lt_flow_logic
    params             = lt_matchcode
  EXCEPTIONS
    cancelled          = 1
    already_exists     = 2
    program_not_exists = 3
    not_executed       = 4
    OTHERS             = 5.
IF sy-subrc <> 0.
 
ENDIF.
 
GENERATE DYNPRO ls_dynpro_header lt_feild_list lt_flow_logic lt_matchcode ID ls_dynp_id
             MESSAGE lv_message
             LINE lv_lines WORD lv_word.
 
CALL FUNCTION 'RS_WORKING_AREA_ACTIVE_CHECK'
  EXCEPTIONS
    nok    = 1
    OTHERS = 2.
IF sy-subrc = 0.
  lv_obj_name = ls_dynp_id.
  CALL FUNCTION 'RS_WORKING_AREA_INIT'.
  CALL FUNCTION 'RS_DELETE_FROM_WORKING_AREA'
    EXPORTING
      object   = 'DYNP'
      obj_name = lv_obj_name
    EXCEPTIONS
      OTHERS   = 1.
ENDIF.

        生成屏幕展示:

 

         可以使用如下代码获取屏幕参数参考

DATA: ls_dynpro_header TYPE d020s,
      lt_feild_list    TYPE TABLE OF d021s,
      lt_flow_logic    TYPE TABLE OF d022s,
      lt_matchcode     TYPE TABLE OF d023s.
 
DATA: BEGIN OF ls_dynp_id,
        prog LIKE d020s-prog,
        dnum LIKE d020s-dnum,
      END OF ls_dynp_id.
 
ls_dynp_id-prog = sy-repid.
ls_dynp_id-dnum = 9001.
IMPORT DYNPRO  ls_dynpro_header lt_feild_list lt_flow_logic lt_matchcode ID ls_dynp_id.
         PS: 屏幕生成可以选择动态生成,临时使用,也可以选择永久生成,自动化编程,参考SM30。注意动态屏幕生成和选择动态选择屏幕时两回事。

总结
        1. 报表和屏幕的动态生成,可以作为实现代码的动态效果的一种方式,每次执行都动态生成,也可以作为自动化编程的一种,生成永久的代码,这部分可参考SM30.

        2. 其它永久生成abap开发对象的方式可以参考abapgit源码。
————————————————
版权声明:本文为CSDN博主「Fireworks_me」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiefireworks/article/details/123143289

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ABAP动态编程-动态生成报表、动态屏幕 的相关文章

  • c语言中+ =和=+有什么区别

    点击上方蓝字关注我 了解更多咨询 c语言中 和 有什么区别 区别在于 是简写 a 1就是a a 1 并不是简写 a a直接对a的赋值 符号代表的是正负 完全可以省略不写 即a b其实就是a b 在用C 编程时 我经常混淆 和 前者实际上是我
  • 数学建模之灰色关联分析(GRA)

    本文参考的是司守奎 孙兆亮主编的数学建模算法与应用 第二版 灰色关联分析不仅能够用做关联分析 也能够用于评价 其具体分析步骤如下 第一步 需要确定评价对象和参考数列 评价对象一般指的就是待分析的各个特征组 例如需要评价一个同学的成绩 那么他
  • 山东理工大学第十五届ACM程序设计竞赛 R - Zyn的超能力

    Description Zyn 需要能量提高自己的超能力 有两种能量存在 超级能量和小能量 对于超级能量 Zyn 绝对不可以错过 而且努力的 Zyn 希望得到更多的小能量 但是 Zyn 每天最多可以获得 k 次能量 而且每个能量都会在第 x
  • 2020年高教社建模国赛真题A题--炉温曲线

    2020年高教社杯全国大学生数学建模竞赛题目 请先阅读 全国大学生数学建模竞赛论文格式规范 A题 炉温曲线 在集成电路板等电子产品生产中 需要将安装有各种电子元件的印刷电路板放置在回焊炉中 通过加热 将电子元件自动焊接到电路板上 在这个生产
  • 数学建模(三)—— 自动化车床管理

    一 题目要求 二 相关的基础知识 2 1 正态分布的假设检验 2 2 正态分布的概率 三 问题分析 四 模型的建立与求解 4 1 数据处理及分析 4 2 问题一模型的建立与求解 4 2 1 问题一模型的建立 4 2 2 问题一模型的求解 4
  • Matlab:从文本文件中读取数值数据到矩阵

    Matlab 从文本文件中读取数值数据到矩阵 在Matlab中 我们常常需要将保存在文本文件中的数值数据读取到程序中 以便进行数据处理和分析 本文将介绍如何使用Matlab将文本文件中的数值数据导入到矩阵中 首先 我们需要创建一个文本文件
  • 一个参数一张Excel表,玩转Pandas的read_excel()表格读取

    作者 黄伟呢 来源 数据分析与统计学之美 我觉得很有必要讲述这个文章 进行数据处理的第一步就是Python数据读取 但是你可能没想到 在进行数据读取的同时 我们其实可以配合相关参数做很多事儿 这对于后续的数据处理都是极其有帮助 read e
  • 碳排放混合预测模型(Matlab代码实现)

    个人主页 研学社的博客 欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 二氧化碳排放力争于
  • MATLAB实现函数拟合

    目录 一 理论知识 1 拟合与插值的区别 2 几何意义 3 误差分析 二 操作实现 1 数据准备 2 使用cftool 拟合工具箱 三 函数拟合典例 四 代码扩展 一 理论知识 1 拟合与插值的区别 通俗的说 插值的本质是根据现有离散点的信
  • 时间序列预测之ARMA、ARIMA序列及季节性序列matlab实现

    ARMA是一种平稳时间序列模型 即均值和协方差不随时间的平移而改变 ARMA有三种类型 AR序列 MA序列 ARMA序列 但是由于ARMA只能处理平稳序列 而现实中的问题往往有趋势性或周期性等 为了得到平稳序列 我们对数据进行差分运算 使得
  • 美国大学生数学建模竞赛赛题特点

    美国大学生数学建模竞赛赛题特点 赛题灵活度高 内容广泛 反恐 防灾 环境 健康医疗 交通 新能源等等 开放性大 评价类问题多且复杂 离散型优化问题多 除A题 如 2016B太空碎片的处理 2018D电动车充电桩的优化 2019D卢浮宫疏散路
  • 数学建模的LINGO基础

    LINGO是Linear Interactive and General Optimizer的缩写 即 交互式的线性和通用优化求解器 由美国LINDO系统公司 Lindo System Inc 推出的 可以用于求解非线性规划 也可以用于一些
  • 数学建模的六个步骤

    一 模型准备 了解问题的实际背景 明确其实际意义 掌握对象的各种信息 以数学思路来解释问题的精髓 数学思路贯彻问题的全过程 进而用数学语言来描述问题 要求符合数学理论 符合数学习惯 清晰准确 理解实际问题后 搜集资料 快速阅读和理解参考文献
  • 数学建模--Seaborn库绘图基础的Python实现

    目录 1 绘图数据导入 2 sns scatterplot绘制散点图 3 sns barplot绘制条形图 4 sns lineplot绘制线性图 5 sns heatmap绘制热力图 6 sns distplot绘制直方图 7 sns p
  • 【数学建模】线性规划模型基本原理与案例分享

    1 1 线性规划问题 在人们的生产实践中 经常会遇到如何利用现有资源来安排生产 以取得最大经济效益的问题 此类问题构成了运筹学的一个重要分支 数学规划 而线性规划 Linear Programming 简记LP 则是数学规划的一个重要分支
  • 2020美赛A题解题方法

    题目 问题A 向北移动 全球海洋温度影响某些海洋生物的栖息地质量 当温度变化太大 它们无法继续繁荣时 这些物种就会迁移到其他更适合它们现在和未来生活和繁殖成功的栖息地 其中一个例子就是美国缅因州的龙虾种群 它们正缓慢地向北迁移到加拿大 那里
  • 数模培训第二周——图论模型

    图论中最短路算法与程序实现 图论中的最短路问题 包括无向图和有向图 是一个基本且常见的问题 主要的算法有Dijkstra算法和Floyd算法 Floyd算法 简介 Floyd Warshall算法 英语 Floyd Warshall alg
  • 开关电容转换器的合成器研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码实现
  • 开关电容转换器的合成器研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码实现
  • 2024年华数杯国际赛B题:光伏发电功率 思路模型代码解析

    2024年华数杯国际赛B题 光伏发电功率 Photovoltaic Power 一 问题描述 中国的电力构成包括传统能源发电 如煤 油和天然气 可再生能源发电 如水电 风能 太阳能和核能 以及其他形式的电力 这些发电模式在满足中国对电力的巨

随机推荐

  • http协议学习系列

    1 基础概念篇 1 1 介绍 HTTP是Hyper Text Transfer Protocol 超文本传输协议 的缩写 它的发展是万维网协会 World Wide Web Consortium 和Internet工作小组IETF Inte
  • 数据集加载--load_digits

    目录 主要参数 n class return X y as frame 返回值 return X y True return X y False Bunch对象的属性 data target feature names list targe
  • 100天精通Python(爬虫篇)——第47天:selenium自动化操作浏览器(基础+代码实战)

    文章目录 一 Selenium框架环境搭建 1 下载模块 2 安装浏览器驱动WebDriver 二 基础操作 1 打开浏览器 2 无界面模式 3 元素定位 4 元素操作 5 前进后退 6 执行js 7 页面等待 隐式等待 常用 显式等待 了
  • SPI、I2C、UART、CAN

    一 简介 1 SPI SPI Serial Peripheral Interface 串行外设接口 是Motorola公司提出的一种同步串行数据传输标准 在很多器件中被广泛应用 接口 SPI接口经常被称为4线串行总线 以主 从方式工作 数据
  • Go内存管理及性能观测工具

    内存管理 TCMalloc Golang内存分配算法主要源自Google的TCMalloc算法 TCMalloc将内存分成三层最外层Thread Cache 中间层Central Cache 最里层Page Heap Thread Cach
  • 利用hbase api在本地访问并操作服务器的hbase数据库

    最近因为实验室项目需要 开始研究了hbase 然后想一次性往集群服务器上写入大量的数据 并存到hbase中 考虑到在hbase shell下只能单个数据put 这样对于批量插入数据的要求完全不合适 于是就研究起hbase的java api
  • 只要 3 个注解,优雅的实现微服务鉴权!

    原创 不才陈某 码猿技术专栏 2023 04 17 08 50 发表于山东 大家好 我是不才陈某 前面的文章中介绍了网关集成Spring Security实现网关层面的统一的认证鉴权 有不清楚的可以看之前的文章 实战干货 Spring Cl
  • Java面向对象编程(建议收藏)

    面向对象编程是一种方法 被广泛引用与Java中 接下来我将从 包 继承 组合 多态 抽象类和接口这几个方面进行全面的讲解 一 包 包是组织类的一种方式 包从直观上看就是一个文件夹 jar包中包含的都是字节码文件 包一般分为导入默认包 静态导
  • obs 之 OBSObj

    从实例学习c 之 1 内联构造 虚构2 移动构造 移动赋值3 禁用拷贝构造和赋值4 该类虚构不为 virtual 5 使用实例 using OBSDisplay OBSObj
  • 【一键卸载mysql-5.7.38数据库+dos命令bat脚本】

    一键彻底卸载mysql 5 7 38数据库 echo off color 0e echo Start Delete MySQL Process echo Author LSJ echo echo 删除注册表开始 Regedit echo r
  • smali语法及参考说明

    smali语法可以参考官方说明 因为google服务器经常无法访问 这里把重要点摘抄出来 文章挺浅显的 就不翻译了 TypesMethodsAndFields Some general information about how types
  • 计算机数据的存储-编码(补码,移码)

    在计算机系统中 补码是最重要的编码 数值一律用补码来表示 存储 主要原因 使用补码 可以将符号位和其它位统一处理 同时 减法也可按加法来处理 另外 两个用补 码表示的数相加时 如果最高位 符号位 有进位 则进位被舍弃 2 补码与原码的转换过
  • Hive order by,sort by,distribute by,cluster by 区别

    假设有一个表a 结构如下 par id c 3 c 7 b 8 b 6 a 1 a 4 a 5 c 9 a 10 b 2 order by 全排序 只会启动一个reduce执行任务 select from a order by id 在hd
  • 【C++】怎么接受未知数量的参数?

    2023年9月8日 周五下午 目录 第一种方式 可变参数函数 Variadic Function 头文件 使用方法 详解va start宏 详解va arg宏 示例程序 第一种方式 可变参数函数 Variadic Function 可变参数
  • 第2讲 Hi3861的WiFi实验-Station模式

    引言 在本文中 带大家编写一个程序 测试Hi3861的WiFi Station模式 进一步熟悉相关API的使用 请先按照本专栏第一讲中的第四部分准备好实验环境 一 编写程序 首先 打开 DevEco Device Tool 在鸿蒙项目 hi
  • Mysql JDBC Driver参数配置

    1 建立连接配置 1 user 连接的用户 默认值 无 2 Password 连接时使用的密码 默认值 无 3 socketFactory 驱动程序用于创建与服务器套接字连接的类的名称 该类必须实现了接口 com mysql jdbc So
  • 问题解决:io.lettuce.core.RedisCommandTimeoutException: Command timed out after

    环境 spring boot starter 2 x 和 sprig data starter data redis 2 x 在使用 connection bRPop timeout rawKey 方法时 如果这里的timeout大于spr
  • 飞桨AI Studio(星河社区)推出文心大模型的SDK功能

    随着大模型的涌现 我们喜悦于其远远超越小模型的性能 但又不得不面临大模型开发难的困境 训练难 微调难 部署难 开发者难以将其投入实际生产 不仅面临资源的限制 更面临高精数据难寻 时间成本过高等问题 为了让平台更多开发者可以进行大模型开发 体
  • 有序顺序表的插入

    下面看问题场景 如图是一个有序表 有序表是用数组承载的 然后我想把 元素 8插入到有序表 怎么实现呢 下面开始用人脑模拟 要把 8 插入到有序表 先从有序表的第一个元素和8进行比较 依次看到了7 下一个元素9大于8 停止遍历 我们就把 8
  • ABAP动态编程-动态生成报表、动态屏幕

    目录 前言 一 动态生成报表并调用 二 动态生成屏幕并调用 总结 前言 本文主要讲述ABAP编程中根据逻辑自动生成报表及屏幕 依托语句GENERATE DYNPRO 的实现示例及简单说明 一 动态生成报表并调用 代码示例 Create re