首页 > 编程语言 >ABAP DIALOG屏幕编程2

ABAP DIALOG屏幕编程2

时间:2024-12-11 16:59:16浏览次数:6  
标签:zvia SCREEN 编程 sex ABAP DIALOG 按钮 屏幕 跳转

在上一篇博客ABAP DIALOG屏幕编程1中阐述了DIALOG、PBO、PAI的概念并且对常用页面元素怎么用进行了演示。在这一篇博文中会讲述怎么添加下拉框、搜索帮助,怎么创建表控件、屏幕跳转等。会用到上一篇里面的内容。

有关程序包含文件结构如下。


一、响应用户指令

如上一篇博文中提到的,因为有时候会涉及到清空指令的情况,为了保证程序正常运行,我们一般不直接使用SY-UCOMM这个系统变量处理用户指令,而是用OK_CODE(自定义的变量名)来接收用户指令进行处理

1、声明全局变量OK_CODE

在zvia_screen_d01中添加变量声明,TYPE SY-UCOMM

2、 在屏幕的元素清单处添加变量

不知道怎么展开的点击显示对象列表。有多个屏幕可以使用同一个变量名,只需要声明一次。但记住需要在每个屏幕的元素清单添加变量。

3、演示点击按钮操作

上篇文章演示过给按钮添加功能码的操作。给按钮添加功能码的方法与 HTML 中的 id 或 name 属性相似,主要是通过 屏幕(Dynpro)设计ABAP 代码中的命令 来绑定按钮的功能。在 SAP GUI 中,按钮的功能码用于定义按钮点击时的行为。

a、这里我们画了一个按钮,并给它的功能码设置成BUTTON。

 b、因为点击功能码是用户输入的一种,所以对用户指令的响应应该放在PAI中。

点击到屏幕的逻辑流处可以看到注释的地方存在一个处理用户指令的模块,解开注释双击创建。

 因为是PAI模块,根据之前的模块划分,给它放在zvia_screen_i01中。

 c、使用CASE来对OK_CODE进行分情况操作

WHEN + 操作名(这里是按钮的功能码).

                 需要进行的处理/PERFORM子例程/不处理.

MODULE user_command_0100 INPUT.
  CASE ok_code.
    WHEN 'BUTTON'."与按钮对应的功能码保持一致
      MESSAGE s013(zvia_dialog_msg)."之前创建的消息类
      "WHEN '按钮名'.
      "PERFORM OR 其他操作。
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.

点击按钮后,左下角显示信息。这里可以进行更复杂的处理,最好使用子例程,使代码更加简洁、结构更清楚。 

4、菜单栏的指令响应

菜单栏应该在屏幕显示之前就进行定义,所以应该在PBO模块中进行声明。

a、点击到屏幕的逻辑流处可以看到注释的地方存在一个定义菜单栏的模块,解开注释双击创建。

因为是PBO模块,根据之前的模块划分,给它放在zvia_screen_o01中。

 b、在每次通过以上步骤创建的PBO模块时都会出现如下被注释的两句话。解开注释,填写名称,双击创建。

MODULE status_0100 OUTPUT.
 SET PF-STATUS 'PFSTATUS01'.
 SET TITLEBAR 'TITLEBAR01'.
ENDMODULE.
 c、双击PFSTATUS01创建菜单栏。这里的标准工具条的命名是在进行处理的时候会用到的,可以直接使用标准的进行定义,也可以自己定义。填写功能码,需要用到什么就给什么按钮填,功能码不能相同,建议按照常识或者SAP的习惯定义按钮。记得激活。

使用标准的:附加->调整模板     程序SAPLKKBL 状态STANDARD_FULLSCREEN。

d、双击 TITLEBAR01填写标题。
e、两者创建完成之后的页面如下。这里我是直接使用了标准的,但实际上不需要这么多按钮,可以自己添加。填写对应的功能键的功能码之后就能亮起来了,但是现在点击是没有用的,我们还没有实现功能。

f、实现功能。

使用标准的的按钮的功能码如下。

 跟上面的按钮一样。我们在user_command_0100模块进行功能实现。这里我们只是演示绑定过程,具体实现的功能自己进行书写。比如我们这里实现点击保存按钮。看到定义的功能码是&DATA_SAVE(如果自己定义的按照自定义的进行)。

这里因为一般我们的保存操作涉及到很多语句,所以创建子例程编写。双击创建。

MODULE user_command_0100 INPUT.
  CASE ok_code.
    WHEN 'BUTTON'."与按钮对应的功能码保持一致
      MESSAGE s013(zvia_dialog_msg)."之前创建的消息类 TCODE:SE91
    WHEN '&DATA_SAVE'.
      PERFORM frm_data_save.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.

保存至 zvia_screen_f01中。

在子例程里面进行处理。这里其他部分都注释掉了,只留一个MESSAGE显示,尝试点击看能否响应。 

*&---------------------------------------------------------------------*
*& Form frm_data_save
*&---------------------------------------------------------------------*
*& 保存数据子例程
*&---------------------------------------------------------------------*
FORM frm_data_save .
  "数据判断、处理
  "数据库处理
*  IF sy-subrc = 0."如果成功则
  MESSAGE s014(zvia_dialog_msg).
*  ELSE."失败的话
*   MESSAGE e015(zvia_dialog_msg).
*  ENDIF.
ENDFORM.

点击之后显示消息。 


二、添加下拉框

ABAP下拉框可替代多个RADIO,不需要画多个单选进行分组。有Listbox和Listbox with key两种。

1、下拉框分类

a、Listbox
1)用途

  Listbox 主要用于显示一组 简单的文本项,用户可以从这些文本中选择一个。

2)显示内容

      在 Listbox 中,列出的每一项通常只显示文本,不包含与之关联的其他信息。

3)返回值

       当用户做出选择时,Listbox 仅返回所选项的 索引值,即该选项在列表中的位置(从 0 开始)。这意味着你只能通过索引来识别选中的项。

b、Listbox with key
1)用途

  Listbox with Key 用于显示带有 文本和值(Key)对 的列表。在这种情况下,每一项都不仅包含 显示的文本,还包含与之关联的 键值(Key)。用户选择一个文本项时,系统返回的是这个项的 键值(而不是索引)。

2)显示内容

      显示内容与 Listbox 类似,都是文本列表,但每项文本背后都有一个与之关联的键(Key

3)返回值

       当用户选择某一项时,Listbox with Key 返回的是该选项对应的 键值,而不仅仅是索引。这个键值通常是实际存储或用于处理的标识符。


举例:我们在表ZVIA_STU中存有学生信息,现在依据学生性别属性做下拉框。

2、使用表中的字段作为选项

a、先在变量处声明类型为表的结构体和内表。

先激活!一定要先激活,后面才可以读到数据。

b、在屏幕布局处点击如下图按钮——字典/程序字段窗口。

点击从程序中获取,这里如果获取不到的话,请检查变量定义包含程序有没有激活。 

选中对应字段点击确认,这里可以看到后面有文本/复选框/单选的选项,我们选择文本。

在需要位置拖选出范围。双击,点击下拉的下拉框,可以看到有Listbox和Listbox with key两种 。我们这里需要的返回值是代表性别的F或者M,所以选择Listbox with key。

完成之后可以看到出现下拉框按钮。因为取的值就是数据库里面的,所以这里不需要再赋值。

 3、通过内表给下拉框值

用函数VRM_SET_VALUES

a、设置下拉框应该在屏幕显示之前,所以应该放在PBO中。双击创建模块,具体的实现放在zvia_screen_o01中。

b、具体的代码如下,先定义一个类型为vrm_values的内表和类型为它的结构体。往内表中插入选项,一个值为key一个为对应的text。调用函数 VRM_SET_VALUES 传入参数 id 是屏幕上的输入框对应的名称,如图所示,一定要保持一致才可以关联起来。另一个传入参数是定义的选项内表。

*&---------------------------------------------------------------------*
*& Module SET_SEX_LIST OUTPUT
*&---------------------------------------------------------------------*
*& 设置性别下拉列表 用函数VRM_SET_VALUES
*&---------------------------------------------------------------------*
MODULE set_sex_list OUTPUT.
  DATA : lt_sex TYPE vrm_values,"函数参数类型
         ls_sex LIKE LINE OF lt_sex."其中行项目的类型
  CLEAR lt_sex.
  ls_sex-key  = 'F'."放在数据库的key值
  ls_sex-text = '女'."描述值
  APPEND ls_sex TO lt_sex."插入内表

  ls_sex-key  = 'M'."放在数据库的key值
  ls_sex-text = '男'."描述值
  APPEND ls_sex TO lt_sex.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = 'GS_STU-SEX' "屏幕上的字段名
      values = lt_sex."将存放list的内表作为数据传入
ENDMODULE.

显示的效果: 

 c、后续需要获取其值直接用输入框的名称即可。

三、添加搜索帮助

添加搜索帮助一共有两种方式。

(1)若之间对使用的字段或者创建过专门的搜索帮助,直接使用。

(2)调用函数F4IF_INT_TABLE_VALUE_REQUEST创建搜索帮助。

下面将分别演示怎么使用。

1、使用之前创建过的搜索帮助。

先建一个输入框,双击,在搜索帮助处填写创建过的搜索帮助名。

完成之后会有个小角标。

完成之后可以看到搜索帮助按钮。

2、使用函数创建搜索帮助。

使用PAI中的关键字PROCESS ON VALUE-REQUEST。

FILED后的字段需要和屏幕上对应的字段保持一致。双击创建。放在zvia_screen_i01里。

PROCESS AFTER INPUT.
PROCESS ON VALUE-REQUEST."用于响应搜索帮助的过程 
  FIELD gv_stu-stuid MODULE zstuid_f4."给学号添加搜索帮助

 zvia_screen_i01中调用函数F4IF_INT_TABLE_VALUE_REQUEST。

这里好像有点问题,但是相同的代码在其他屏幕能够实现,在这个屏幕实现不了,要是发现错误麻烦私信我一下。

MODULE zstuid_f4 INPUT.
* 1、得到学生ID的数据 ID 和 NAME *
  TYPES : BEGIN OF ty_stuid,
            stuid   TYPE zde_via_stuid,
            stuname TYPE zde_via_stuname,
          END OF ty_stuid.
* 2、用类型定义一个内表 *
  DATA : lt_stuid TYPE TABLE OF ty_stuid.
* 3、将所有学生ID,NAME信息查询出来放到内表里,等会函数用 *
  SELECT stuid stuname
    FROM  zvia_stu
    INTO  TABLE lt_stuid.
* 4、调用函数 F4IF_INT_TABLE_VALUE_REQUEST *
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield     = 'STUID' "显示于屏幕的主字段,内表中的字段
      value_org    = 'S' "必要的 表示数据来源是内表
      dynpprog     = sy-cprog "调用的程序
      dynpnr       = sy-dynnr "调用的屏幕
      dynprofield  = 'GS_STU-STUID' "给屏幕上的哪个字段添加搜索帮助 GV_TRAIN-ZCODE
      window_title = '学生学号的搜索帮助'
    TABLES
      value_tab    = lt_stuid.
  IF sy-subrc <> 0.
    MESSAGE e006(zvia_dialog_msg).
  ENDIF.
ENDMODULE.

3、日期的搜索帮助。

 日期的搜索帮助有专门的函数。可按照下面的代码进行调用。

*&---------------------------------------------------------------------*
*&      Module  ZCRDT_F4  INPUT
*&---------------------------------------------------------------------*
*       给日期添加搜索帮助 FUNCTION:F4_DATE
*----------------------------------------------------------------------*
MODULE zcrdt_f4 INPUT.
  CALL FUNCTION 'F4_DATE'
    EXPORTING
      date_for_first_month = sy-datum "当前时间的月份作为打开的默认页 
    IMPORTING
      select_date          = gv_train-zcrdt."返回值,变量名
  IF sy-subrc <> 0.
    MESSAGE e006(zvia_dialog_msg).
  ENDIF.
ENDMODULE.

四、屏幕跳转

屏幕跳转常和菜单栏里的返回、退出键或者屏幕中的其他查询页面关联。

一般一个屏幕默认的下个屏幕是自己。在屏幕属性处可以看到。可以更改。

1、LEAVE TO SCREEN '屏幕编号'。

LEAVE TO SCREEN '屏幕编号' 用于跳转到指定的屏幕编号。该命令在当前屏幕(Dynpro)上执行后,系统会立即跳转到另一个指定的屏幕。

若是使用 LEAVE TO SCREEN 0.会跳转至当前屏幕序列的第一个屏幕。


2、SET SCREEN '屏幕编号'.  &   LEAVE SCREEN。

SET SCREEN 用于设置目标屏幕的编号,但不会立即跳转LEAVE SCREEN 用来离开当前屏幕并跳转到目标屏幕。通常,这两个命令一起使用,先使用 SET SCREEN 设置目标屏幕,再用 LEAVE SCREEN 执行跳转。两者一起使用相当于LEAVE TO SCREEN '屏幕编号'

因为默认下一个屏幕是自己,若不使用SET SCREEN,只使用LEAVE SCREEN会跳转至当前屏幕(无任何输入的初始状态),也可以直接在屏幕属性处进行更改。


3、CALL SCREEN '屏幕编号'。

CALL SCREEN 用于显示指定的屏幕编号,且会在当前屏幕的上下文中启动目标屏幕。调用后,立即跳转至目标屏幕,控制会传递到目标屏幕,且该屏幕被视为一个嵌套屏幕(Subscreen)。

使用CALL SCREEN时会开启一个新的屏幕序列,而同时存在的屏幕序列是有限制的,所以一般不建议使用。


4、LEAVE PROGRAM。

LEAVE PROGRAM 用于退出当前的程序(或事务)。它不仅会结束当前屏幕,也会结束整个 ABAP 程序的执行,通常会回到 SAP GUI 或返回到上一个程序或事务。


5、CALL TRANSACTION  '事务码'。

CALL TRANSACTION 允许你在当前程序中启动另一个事务,跳转至该事务码的界面。这与屏幕跳转不同,它是在后台启动另一个事务的处理,并将控制权交给新事务。


6、CALL DIALOG '对话框'。

CALL DIALOG 用于调用一个对话框(如一个自定义的弹出窗口)。它并不是标准的屏幕跳转,而是显示一个对话框作为弹出窗口,可以在当前屏幕的上下文中执行额外的操作。


7、在代码中的实现。

比如在菜单栏我们需要进行返回的时候。这里第三个按钮对应的功能码的实现。

标签:zvia,SCREEN,编程,sex,ABAP,DIALOG,按钮,屏幕,跳转
From: https://blog.csdn.net/qq_55411102/article/details/144354925

相关文章

  • ABAP DIALOG屏幕编程3
    在DIALOG屏幕编程1中阐述了DIALOG、PBO、PAI的概念并且对常用页面元素怎么用进行了演示。在DIALOG屏幕编程2中演示了响应用户指令、怎么添加下拉框、搜索帮助,实现屏幕跳转等。在这篇文章中会演示怎么创建表控件和标签条。一、创建新屏幕在同一个MODULE模块池中可以创建多块......
  • 在CodeBolcks+wxWidgets下的C++编程教程——用向导创建一个Windows GUI项目
    0.前言我想通过编写一个完整的游戏程序方式引导读者体验程序设计的全过程。我将采用多种方式编写具有相同效果的应用程序,并通过不同方式形成的代码和实现方法的对比来理解程序开发更深层的知识。了解我编写教程的思路,请参阅体现我最初想法的那篇文章中的“1.编程计划”:学习编程......
  • 编程题-最长公共前缀
    题目:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例1:输入:strs=["flower","flow","flight"]输出:"fl"示例2:输入:strs=["dog","racecar","car"]输出:""解释:输入不存在公共前缀。解题:依......
  • GitHub 正式收录 MoonBit 作为一门通用编程语言!核心用户突破三万!
    MoonBit 编程语言正式被Github收录!这对于一个仅有两年发展时间的编程语言来说是一种高度认可,期待未来由MoonBit编写的项目数量快速增长,早日成为首个由国人研发迈进10万➕用户的编程语言。最近用户数已经接近3万(数据统计来源综合VisualStudioMarketplac......
  • Python异步编程(上):协程和任务
    原文链接:https://mp.weixin.qq.com/s/dQOocc7wHaGv7_cf476Ivg介绍了解异步编程前先了解一些概念:协程(coroutine)、任务(task)和事件循环(eventloop),在3.7以前还需要关心Future这个东西,不过之后提供的高级API弱化了这个概念,你基本不需要关心Future是什么。协程协程等于一个......
  • 奇奇怪怪的编程语言:Malbolge
    Malbolge除了我们日常使用的Python、Java、C等主流编程语言外,还存在这么一类极为晦涩难懂的编程语言,被称为深奥的编程语言(Esotericprogramminglanguage,简称Esolang)。它们被设计用于测试计算机语言表达的极限,所以不会考虑它们的实用性。今天我们来看其中一个非常典型的例......
  • ChatGPT的“超能力“升级!AI写作、编程、审阅样样行
    点击访问chatTools免费体验GPT最新模型,包括o1推理模型、GPT4o和Claude等模型!在科技圈,OpenAI再次掀起了一阵惊涛骇浪。就在今天,他们推出了全新的Canvas功能,直接颠覆了我们与AI交互的传统方式。全新协作模式:不只是聊天Canvas不再是简单的对话工具,而是一个真正的协作......
  • AlertDialog组件的用法
    文章目录1概念介绍2使用方法3示例代码我们在上一章回中介绍了DismissibleWidget相关的内容,本章回中将介绍AlertDialogWidget.闲话休提,让我们一起TalkFlutter吧。1概念介绍我们介绍的AlertDialog是指程序中弹出的确认窗口,其实我们在上一章回中删除Lis......
  • ABAP开发-批量导入BAPI和BDC_1
    系列文章目录文章目录系列文章目录@[TOC](文章目录)前言一、概念二、BDC和BAPI数据导入1、BDC数据导入(录屏)2、BAPI数据导入三、实例1、BAPI2、BDC总结前言一、概念SAP中,对一个事务码反复操作并且达到批量处理数据的效果,即批量导入,重复操作一类数据,从而用程序模......
  • Python 网络编程
    Python提供了两个级别访问的网络服务:低级别的网络服务支持基本的Socket,它提供了标准的BSDSocketsAPI,可以访问底层操作系统Socket接口的全部方法。高级别的网络服务模块SocketServer,它提供了服务器中心类,可以简化网络服务器的开发。什么是Socket?Socket又称"套接......