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进行了解释,并对常用的页面元素进行了演示。后续会更新下拉框和涉及到对于数据进行处理、处理用户指令的内容。

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

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

相关文章

Anaconda升级的解决方法

文章目录 关于conda升级问题1. 在原Anaconda版本上进行更新升级2. 就是重装Anaconda 镜像源配置的参数解释&#xff1a;1. conda-forge2. bioconda3. menpo 关于conda升级问题&#xff0c; Anaconda各种版本镜像下载地址&#xff1a; 关于conda升级问题 1. 在原Anaconda版本上…

服务路由和服务发现区别是什么?

要快速学习服务路由和服务发现的区别&#xff0c;以下是这个领域最重要的20%的知识&#xff1a; 服务路由&#xff08;Service Routing&#xff09; 定义&#xff1a;服务路由是微服务架构中的一个关键概念&#xff0c;涉及将客户端的请求路由到合适的服务实例上。在分布式系…

青训营-豆包MarsCode技术训练营试题解析二十七

介绍 ‌豆包青训营‌是由字节跳动和稀土掘金社区共同发起的技术培训和人才选拔项目。该项目的目标是培养具有职业竞争力的优秀开发工程师&#xff0c;并提供全程免费的课程&#xff0c;不收取任何费用‌。 课程内容和方向 豆包青训营的课程涵盖前端、后端和AI方向。在这个飞…

网络安全之信息收集

1、大纲 基本信息收集  网站后台查找 域名查找    整站分析 敏感目录    Googlehacker 端口扫描    URL采集 旁站C段    信息分析 CDN绕过方法 2、域名信息 对应IP收集 相关域名对应IP 站长之家-->站长工具 nslookup&#xff08;在cmd里面使用&…

人工智能学习用的电脑安装cuda、torch、conda等软件,版本的选择以及多版本切换

接触人工智能的学习三个月了&#xff0c;每天与各种安装包作斗争&#xff0c;缺少依赖包、版本高了、版本低了、不兼容了、系统做一半从头再来了。。。这些都是常态。三个月把单位几台电脑折腾了不下几十次安装&#xff0c;是时候总结一下踩过的坑和积累的经验了。 以一个典型的…

乐橙云小程序插件接入HbuilderX

乐橙插件使用&#xff1a; 1.配置app.json文件&#xff0c;uniapp中在mainfest.json中配置 https://uniapp.dcloud.net.cn/collocation/manifest.html#mp-weixin ** 2、集成插件页面.json文件 ** uniapp在 pages.json 对应页面的 style -> usingComponents 引入组件&…

华为关键词覆盖应用市场ASO优化覆盖技巧

在我国的消费者群体当中&#xff0c;华为的品牌形象较高&#xff0c;且产品质量过硬&#xff0c;因此用户基数也大。与此同时&#xff0c;随着影响力的增大&#xff0c;华为不断向外扩张&#xff0c;也逐渐成为了海外市场的香饽饽。作为开发者和运营者&#xff0c;我们要认识到…

C#白盒测试(二)

在前两篇关于 C#白盒测试的学习博客中&#xff0c;我们已经对基础概念、常见结构测试以及一些工具的使用有了一定了解。今天&#xff0c;我们将聚焦于白盒测试中的数据驱动测试、测试替身以及如何优化测试套件&#xff0c;进一步提升我们的白盒测试能力。 一、数据驱动测试 在…

K8S疑难概念理解——容器运行时。CRI实现从Docker切为containerd历史

早期版本的k8s直接使用了docker部分功能&#xff0c;比如容器的创建、运行、监控、停止、销毁等&#xff0c;这一些与容器生命周期相关的逻辑实现就可称之为容器运行时。k8s意识到docker过于笨重&#xff0c;如docker-cli,docker swarm等组件k8s都用不上&#xff0c;那么能不能…

Vue+Vite 组件开发的环境配置(超级简单)

vite是什么 Vite 是一个现代化的前端构建工具和开发服务器&#xff0c;它特别适用于构建大型的单页面应用&#xff08;SPA&#xff09;。Vite 旨在提供极快的冷启动速度&#xff0c;并且能够即时地&#xff08;几乎实时地&#xff09;更新模块&#xff0c;这得益于其利用原生 …

vue拖拽图片

这是我封装的组件大家直接用就好 我的gitee仓库地址 拖拽(父子) 刘志辉/vue功能 - 码云 - 开源中国 //使用页面参考文档 //标签内 :imgSrc"../img/tibet-1.jpg" <!-- 设置图片路径 --> dragstart"handleDragStart" <!-- 监听拖拽开始…

GNU/Linux - make 60s介绍

Learn make in 60 seconds. A programmer needs a build system. 想想你要手动输入编译命令编译每一个源文件&#xff0c;而且要正确添加和管理各个option&#xff0c;是很麻烦的。有各种用来帮助你build的工具&#xff0c;比如ant、make、maven、rake等。Make就是最通用的一…

C05S01-Web基础和HTTP协议

一、Web基础 1. Web相关概念 1.1 URL URL&#xff08;Uniform Resource Locator&#xff0c;统一资源定位符&#xff09;&#xff0c;是一种用于在互联网上标识和定位资源的标准化地址&#xff0c;提供了一种访问互联网上特定资源的方法。URL的基本格式如下所示&#xff1a;…

Spring+Mybatis 整合所需准备

文章目录 SpringMybatis SpringMybatis 准备pom.xml 项目所需jar文件 <spring.version>4.0.2.RELEASE</spring.version> <!-- spring框架包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</a…

Spring中Bean的作用域深入剖析与技术实践

前言 Spring框架作为Java企业级应用开发中的中流砥柱&#xff0c;提供了强大的依赖注入&#xff08;DI&#xff09;和面向切面编程&#xff08;AOP&#xff09;等功能。在Spring框架中&#xff0c;Bean的作用域&#xff08;Scope&#xff09;是一个非常重要的概念&#xff0c;…

从仪表盘探索 MongoDB 关键指标

这是 MongoDB 监控系列文章的第七篇&#xff0c;前面几篇文章的链接如下&#xff1a; MongoDB 监控&#xff08;一&#xff09;MongoDB 监控&#xff08;二&#xff09;MongoDB 监控&#xff08;三&#xff09;MongoDB 监控&#xff08;四&#xff09;MongoDB 监控&#xff08…

mac安装php和xdebug调试

要在Mac上安装PHP 7.4&#xff0c;你可以通过几种方式来完成&#xff0c;但鉴于PHP7.4官方已不再维护&#xff0c;并且Homebrew默认仓库中不再提供此版本&#xff0c;我们需要从第三方仓库或直接从源代码进行安装。本文以brew方式安装&#xff0c;如果安装的是8.0以上&#xff…

UIlicious - 自动化端到端测试

在现代软件开发中&#xff0c;测试自动化已然成为产品交付质量的基石。而端到端测试&#xff08;E2E&#xff09;&#xff0c;作为验证整个应用流畅运行的关键&#xff0c;常常是测试工作中最具挑战性的一环。这时&#xff0c;一款简单高效的自动化测试工具——UIlicious&#…

新一代零样本无训练目标检测

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月2日21点02分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅h…

Python_Flask01

所有人都不许学Java了&#xff0c;都来学Python&#xff01; 如果不来学的话请网爆我的老师---蔡老师 Flask的前世姻缘 我不知道&#xff0c;没啥用&#xff0c;要学好这个框架&#xff0c;其实多读书&#xff0c;多看报就行了&#xff0c;真心想了解的话&#xff01; Welcom…