ABAP DIALOG屏幕编程1

一、DIALOG屏幕编程

DIALOG屏幕编程是SAP ABAP中用于创建用户交互界面的一种技术,主要用于开发事务性应用程序。它允许用户通过屏幕输入或操作数据,程序根据用户的操作执行逻辑处理。

1、DIALOG编程的主要组件

a、屏幕 (Screen)

DIALOG程序的核心部分,由多个屏幕组成。每个屏幕都有一个编号(Screen Number)和对应的屏幕流逻辑(Screen Flow Logic)。

b、屏幕流逻辑 (Flow Logic)

定义屏幕的行为,例如输入验证、模块调用。常见的流逻辑关键字:

1)PROCESS BEFORE OUTPUT (PBO):输出屏幕前执行的逻辑。

2)PROCESS AFTER INPUT (PAI):用户输入后执行的逻辑。

c、模块 (MODULE)

在屏幕流逻辑中使用的逻辑块,用于处理具体的程序逻辑。例如:输入验证、数据更新等。

d、状态栏 (GUI Status)

定义屏幕上的菜单和功能按钮(SY-UCOMM 用于捕获用户动作)。

2、DIALOG编程的核心概念

a、PBO和PAI的执行流程

PROCESS BEFORE OUTPUT输出屏幕前执行逻辑以及PROCESS AFTER INPUT用户输入后执行逻辑。

b、数据传输

使用全局变量或结构在程序和屏幕之间传递数据,屏幕字段绑定程序变量(方法:屏幕字段和程序变量名相同),PBO用于显示变量值,PAI用于接收用户输入。

c、屏幕跳转

LEAVE TO SCREEN <screen_number>.返回到指定屏幕。

LEAVE TO SCREEN 0.返回到上一屏幕。

CALL SCREEN <screen_number>.跳转到新屏幕。

d、功能码 (SY-UCOMM)

捕获用户操作(如点击按钮、选择菜单项)。但一般在编程过程中,不会直接使用SY-UCOMM,因为会涉及到需要清空功能码的语句,直接清空SY-UCOMM可能会影响程序的正常逻辑,因此我们通常会定义一个变量OK_CODE TYPE SY-UCOMM

二、PBO与PAI

PBO和PAI是DIALOG开发中最重要的两个概念,是ABAP DIALOG开发的核心。可在关键字之后添加模块,进行功能实现。

1、PBO(PROCESS BEFORE OUTPUT

PBO 是在屏幕显示之前执行的事件。这个事件的主要任务是准备好在屏幕上显示的数据和界面元素。

a、初始化数据

        给输入字段等赋初值,准备好屏幕上需要展示的数据。

b、修改屏幕元素的属性

        你可以在 PBO 事件中修改屏幕上元素的属性,控制哪些字段需要禁用或只读。

c、动态调整界面

        在 PBO 中,你可以根据特定条件控制屏幕中字段的显示、隐藏或只读等属性。根据用户角色或权限动态改变屏幕布局。

2、PAI(PROCESS AFTER INPUT

PAI 是在用户在屏幕上输入数据后,提交(如点击按钮)时触发的事件。这个事件主要用于处理用户输入的验证、保存或更新数据等操作。PAI 事件的主要任务是:

a、验证用户输入

        检查用户在屏幕上输入的数据是否符合业务规则。

b、更新数据

        处理输入的数据,将其更新到相应的工作区(Work Area)或内表(Internal Table)。

c、控制用户交互

        根据用户的输入结果,决定是否跳转到其他屏幕或显示错误消息。处理表单提交或按钮点击事件。

三、创建 ABAP Dialog(Dynpro)屏幕

1、使用事务码SE38创建 注意:这里的类型需要选择模块池!后续选择包保存即可。

模块池程序是 SAP 提供的一种专门用于屏幕处理的程序类型,支持 Dynpro 的开发。

a、Dialog 屏幕需要和事件处理逻辑(PBO 和 PAI)结合,而模块池程序的结构专门为这种交互设计。

b、它允许你将每个屏幕的逻辑(包括输入、输出、用户事件等)通过模块(MODULE)进行组织和管理。

创建好之后,是PROGRAM不是之前选择可执行程序时的REPORT。

 2、创建屏幕

a、点击显示对象列表

b、右键->创建->屏幕。

c、输入屏幕编号。
 d、输入简短描述。

 可以在逻辑流里面看到前文提到的PBO和PAI,后续会在此创建各模块。

 3、创建事务码

为了更好的查看写的屏幕效果,最好先创建事务码,通过事务码来查看屏幕效果。

a、右键->创建->事务。

 b、输入事务码,短文本。
 c、 输入程序名字(即创建屏幕的时候的程序名),和显示的屏幕(刚刚创建的屏幕),下面的GUI支持全部勾选,点击保存。可以运行尝试一下看是否成功创建。

 屏幕中还没有添加任何的元素,所以还没有任何显示。

4、创建一个INCLUDE程序,用于定义所有的变量。双击创建。

其中的变量定义。

*&---------------------------------------------------------------------*
*& 包含               ZVIA_SCREEN_D01
*&---------------------------------------------------------------------*
DATA :
   gv_date TYPE sy-datum,"当前日期格式
   gv_time TYPE sy-uzeit."当前时间格式

5、创建一个初始化变量的模块,方便后续演示。

初始化数据是在屏幕输出前,所以应该在 PBO 处。

a、输入如下模块创建语句。双击创建。

b、创建一个INCLUDE程序,将所有PBO模块放至此程序中。 
 c、其中的定义语句。
*&---------------------------------------------------------------------*
*& Module INIT_DATA OUTPUT
*&---------------------------------------------------------------------*
*& 初始化数据
*&---------------------------------------------------------------------*
MODULE init_data OUTPUT.
  gv_date = sy-datum."当前日期
  gv_time = sy-uzeit."当前时间
ENDMODULE.

四、页面元素

点击布局就可以前往编辑页面。

左边为页面元素。

1、文本字段

点击选择之后,长按拖动。点击即可输入文本(显示的文字),和名称(取一个字段名称)。双击可添加属性,后面会涉及到,自己可以尝试看看效果。

 查看效果。一定记得先保存,可以不在此激活,在程序中激活。

2、输入/输出字段

点击选择之后,长按拖动。点击和名称(取一个字段名称,这里的字段名称需要和对应的变量名保持一致,才能在后续的获取用户输入或者对输出字段进行处理的时候绑定到对应的数据)。

a、输入字段

这里将其设定成学生学号。具体的表可以看博文:学生表中提到的学生表。

注意:

1)双击后,词典->格式处请和自己定义变量的时候的TYPE保持一致。 
 2)程序->INPUT处可以编辑输入状态。

NOT POSSIBLE:不可输入

POSSIBLE:允许输入

3)可以给多个元素添加组,方便对他们一并进行处理。一个元素可以属于多个组,但注意字段处理的时候的字段名称。

 查看效果。

b、仅输出字段 

演示设置一个输入/输出框来显示当前时间。程序处选择仅输出。

格式一定要进行修改,和定义变量的时候保持一致。 

这里的日期用的input not possible,时间用的仅输出,可以看看两者的区别。 

 3、复选框

需要填写名称,这里的名称也需要和定义的变量保持一致。 

 双击可填写功能码。填写功能码才可用,功能码随便取,只要不撞就行。

 还需要增加变量定义。勾选的时候 = 'X'。

gv_check TYPE flag."FLAG = C LENGTH 1

4、单选框

需要添加名称。 

一个单选是没有意义的,单选默认直接选,不可以取消,所以需要创建组。 

按住CTRL点要组合的按钮。

点击编辑-> 分组-> 单选按钮组-> 定义。完成。

实现的效果。

 5、按钮

点击后,长按拖选长度,输入名称文本。发现还是红色。 

双击,在功能码处填写功能码。会在用户指令处用到该功能码,下一篇会涉及到。 

实现的效果。

6、框

类似于REPORT可执行程序中的BLOCK。

 

点击,框选住需要在一个框中的元素,输入文本(即框的标题)和名称。

 显示的效果。

五、总结

这一篇主要是对于DIALOG的概念和最重要的PBO和PAI进行了解释,并对常用的页面元素进行了演示。后续会更新下拉框和涉及到对于数据进行处理、处理用户指令的内容。

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

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

相关文章

Shell免交互

Shell免交互 一. 变量配置1.1 在E0F外面的变量可以直接传入使用1.2 EOF的输入内容可以直接赋值给变量 二. expect语句2.1 转义符2.2 expect的语法2.3 格式2.4 脚本外传参2.5 嵌套 三. 访问其它主机 交互&#xff1a;当我们使用程序时&#xff0c;需要进入程序发出对应的指令&am…

清风数学建模学习笔记——Topsis法

数模评价类&#xff08;2&#xff09;——Topsis法 概述 Topsis:Technique for Order Preference by Similarity to Ideal Solution 也称优劣解距离法&#xff0c;该方法的基本思想是&#xff0c;通过计算每个备选方案与理想解和负理想解之间的距离&#xff0c;从而评估每个…

【认证法规】安全隔离变压器

文章目录 定义反激电源变压器 定义 安全隔离变压器&#xff08;safety isolating transformer&#xff09;&#xff0c;通过至少相当于双重绝缘或加强绝缘的绝缘使输入绕组与输出绕组在电气上分开的变压器。这种变压器是为以安全特低电压向配电电路、电器或其它设备供电而设计…

喆塔科技携手国家级创新中心,共建高性能集成电路数智化未来

集创新之力成数智之塔 近日&#xff0c;喆塔科技与国家集成电路创新中心携手共建“高性能集成电路数智化联合工程中心”并举行签约揭牌仪式。出席此次活动的领导嘉宾包含&#xff1a;上海市经济和信息化委员会、上海市集成电路行业协会、复旦大学微电子学院、国家集成电路创新中…

OpenCV-图像阈值

简单阈值法 此方法是直截了当的。如果像素值大于阈值&#xff0c;则会被赋为一个值&#xff08;可能为白色&#xff09;&#xff0c;否则会赋为另一个值&#xff08;可能为黑色&#xff09;。使用的函数是 cv.threshold。第一个参数是源图像&#xff0c;它应该是灰度图像。第二…

手游和应用出海资讯:怪物猎人AR手游累计总收入已超过2.5亿美元、SuperPlay获得迪士尼纸牌游戏发行许可

NetMarvel帮助游戏和应用广告主洞察全球市场、获取行业信息&#xff0c;以下为12月第一周资讯&#xff1a; ● 怪物猎人AR手游累计总收入已超过 2.5 亿美元 ● SuperPlay获得迪士尼纸牌游戏发行许可 ● 腾讯混元大模型上线文生视频能力 ● 网易天下事业部一拆三&#xff0c;蛋仔…

ARINC 标准全解析:航空电子领域多系列标准的核心内容、应用与重要意义

ARINC标准概述 ARINC标准是航空电子领域一系列重要的标准规范&#xff0c;由航空电子工程委员会&#xff08;AEEC&#xff09;编制&#xff0c;众多航空公司等参与支持。这些标准涵盖了从飞机设备安装、数据传输到航空电子设备功能等众多方面&#xff0c;确保航空电子系统的兼…

代码随想录Day35 本周小结动态规划,动态规划:01背包理论基础,动态规划:01背包理论基础(滚动数组),416. 分割等和子集。

1.本周小结动态规划 周一 动态规划&#xff1a;不同路径 (opens new window)中求从出发点到终点有几种路径&#xff0c;只能向下或者向右移动一步。 我们提供了三种方法&#xff0c;但重点讲解的还是动规&#xff0c;也是需要重点掌握的。 dp[i][j]定义 &#xff1a;表示从…

tomcat+jdbc报错怎么办?

1. 虽然mysql8.0以上的不用手动添加driver类&#xff0c;但是一旦加上driver类&#xff0c;就要手动添加了 不然会报找不到driver类的错误 2. java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:xXX?serverTimezoneU…

【电子仪器】蓝牙测试仪的使用

大家好&#xff0c;我是山羊君Goat。 蓝牙测试仪是专门对于蓝牙信号&#xff0c;RF射频等进行综合测试的电子仪器。 掌握蓝牙测试仪是部分硬件工程师&#xff0c;特别是RF射频硬件工程师一个必备的技能了。 那要如何操作蓝牙测试仪呢&#xff1f; 这里以一款以前市场上比较流…

ansible基础教程(上)

一、介绍&#xff1a; Ansible是一款用于软件配置、配置管理和软件部署的开源自动化和编排工具。相比于其它的工具&#xff0c;Ansible的安装更加简单、易于使用。通过SSH到客户端的方式进行连接&#xff0c;因此它不需要在客户端有特殊的代理&#xff0c;并且通过将模块推送到…

典型常见的知识蒸馏方法总结一

来源&#xff1a;https://github.com/HobbitLong/RepDistiller收录的方法 NeurIPS2015: Distilling the Knowledge in a Neural Network 知识蒸馏开山之作&#xff0c;从logits中蒸馏知识&#xff0c;KL散度损失 ICLR2015&#xff1a;FitNets: Hints for Thin Deep Nets A h…

挑战用React封装100个组件【010】

Hello&#xff0c;大家好&#xff0c;今天我挑战的组件是这样的&#xff01; 今天这个组件是一个打卡成功&#xff0c;或者获得徽章后的组件。点击按钮后&#xff0c;会弹出礼花。项目中的勋章是我通过AI生成的&#xff0c;还是很厉害的哈&#xff01;稍微抠图直接使用。最后面…

【Liunx篇】基础开发工具 - yum

文章目录 &#x1f335;一.Liunx下安装软件的方案&#x1f43e;1.源代码安装&#x1f43e;2.rpm包安装&#x1f43e;3.包管理器进行安装 &#x1f335;二.软件包管理器-yum&#x1f335;三.yum的具体操作&#x1f43e;1.查看软件包&#x1f43e;2.安装软件包&#x1f43e;3.卸载…

MongoDB的简单使用

MongoDB(文档数据库)的简单使用 MongoDB最好的学习资料就是他的官方文档&#xff1a;SQL 到 MongoDB 的映射图表 - MongoDB 手册 v8.0 1.MongoDB CRUD操作 1.1Insert操作 基本方法&#xff1a; db.collection.insertOne() 将单个文档(document)插入集合中 db.collectio…

【射频IC进阶实践教程】2.6 LNA版图设计及DRC/LVS验证

射频集成电路的版图设计非常关键&#xff0c;他对寄生参数非常敏感&#xff0c;需要使其最小化。还需要注意相互耦合的方式本次课程主要介绍射频IC的一些相关布局和连线方面的考虑。 一、版图设计 1. 版图的元件布局 首先打开对应的原理图 点击进行版图设计 由于已经有做好的…

go语言的sdk项目搭建与git 操作标签tag并推送至远程仓库

在搭建 SDK 项目并结合 Git 操作标签&#xff08;Tag&#xff09;时&#xff0c;通常会涉及项目初始化、版本管理、Git 标签的创建与管理等内容。以下是一个完整的步骤指南&#xff0c;帮助您搭建 SDK 项目并学习如何使用 Git 标签。 ### 1. **搭建 SDK 项目** 首先&#xff…

超融合承载 PostgreSQL 数据库和 AI 系统的性能评测|金融行业实践

随着人工智能技术的日渐成熟&#xff0c;不少金融用户也开发了自己的 AI 应用系统&#xff0c;协助实际业务中诸如文字识别、图像转换、信息录入等工作&#xff0c;提升业务效率。不过&#xff0c;AI 应用系统普遍依赖 GPU 提供强大算力&#xff0c;对底层存储的性能也有较高的…

数据结构代码归纳

线性表 线性表的顺序表示 定义与初始化 typedef struct SqList{ElemType data[MaxSize];//ElemType *data 开动态数组 int length; }Sqlist; void InitList(SqList &L){L.length0;//若静态数组//若动态数组 //L.data(ElemType*)malloc(sizeof(ElemType)*MaxSize); } …

华为的USG6000为什么不能ping通

前言&#xff1a; 防火墙usg6000v的镜像 链接: https://pan.baidu.com/s/1uLRk0-hnHRTLYLx1Pnplow?pwdtymp 提取码: tymp 看了好多毒文章&#xff0c;感觉写作业更有意思&#xff0c;可以了解新的知识 内容&#xff1a; 首先看毒文章是这样说的&#xff0c;华为的防火墙是…