ABAP项目砖家之旅-screen和表单项目实战

2023-11-09 13:21

本文主要是介绍ABAP项目砖家之旅-screen和表单项目实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ABAP项目砖家之旅-screen和表单项目实战

  • 前言
  • 一、需求解析(abaper)
  • 二、功能实现和开发计划
    • 1.表结构
    • 2.显示界面和查询条件
      • 2.1 se38新建report程序
      • 2.2 添加搜索界面控件
      • 2.3 定义内表和其他变量方便抽取数据
      • 2.4 在开始选择事件写入sql
      • 2.5 在结束选择事件写输出列表
    • 3.编辑界面
      • 3.1在显示界面添加0100屏幕
      • 3.2 修改0100屏幕
      • 3.3 添加新增按钮
  • 总结


前言

直接上一个screen表单的需求来实战下,需求顾问提供fs-功能说明书,一般会描述下想要什么界面,录入什么数据,录入后如何使用等。我们按照需求整理成我们编程人员能否理解的即可
上需求:sap用户比较贵,我们有大堆的销售人员需要录入简单的资料,于是业务提了需要新建一个销售人员管理界面,需要用户、姓名、密码、截止日期、可选区域、根据区域可选门店。

一、需求解析(abaper)

直接看字段:用户、姓名、密码、截止日期、区域、门店。直接得出是需要建立透明表了,再看用户要输入信息肯定需要一个屏幕输入;虽然没有提要不要列表,但还是要考虑他们怎么查看和管理建立的销售人员;那就做个简单的显示界面吧(alv更好,后面alv实战再做);显示界面还不行,人家用上了肯定还要搜索的,提一送三没办法。都来吧做全套,一条龙吧。
注意:abap对象新建和程序命名都有一套规则,上一篇有截图,欢迎大家查看下

二、功能实现和开发计划

分为表结构、管理界面(显示界面)、编辑界面,开发计划是几分钟做好表结构,然后做显示界面,最后做编辑界面

1.表结构

直接SE11,新建表,错!必须先统计下字段、数据元素、长度等,业务不提供的话,我们abaper自己搞个表吧

字段描述元素类型长度小数备注
zname用户zenamezmnamechar100
zdesc姓名zedesczmdescchar200
zdate截止日期zedatezmdatedats80yyyymmdd格式
zpsw密码zepswzmpswchar100暂不加密
zarea区域zeareazmareachar20
zwerks门店zenamezmchar40

元素较简单重复使用概率不大,故暂不使用数据元素和域,注意主键,不然容易覆盖
在这里插入图片描述

插入数据:
在这里插入图片描述

2.显示界面和查询条件

2.1 se38新建report程序

代码如下(示例):
在这里插入图片描述

2.2 添加搜索界面控件

可以使用parameters(单值)或者select-option(区间)

select-OPTIONS:s_zname for zttest_01-zname,s_zdesc for zttest_01-zdesc .

保存,然后点击:转到——文本元素,点击选择文本(上面定义控件的文本),勾选“数据字典参考”,自动带出文本,也可不勾选自己写
在这里插入图片描述

2.3 定义内表和其他变量方便抽取数据

DATA:LT_ZTTEST TYPE TABLE OF zttest_01 , "跟透明表一致的内表WA_ZTTEST LIKE LINE OF LT_ZTTEST . "工作区(行)
FIELD-SYMBOLS:<FS> LIKE LINE OF LT_ZTTEST. "指针(行)

2.4 在开始选择事件写入sql

START-OF-SELECTION .select * from zttest_01 into TABLE LT_ZTTESTwhere zname in s_znameand zdesc in s_zdesc .

2.5 在结束选择事件写输出列表

END-OF-SELECTION ."不一定在这个事件,也可以跟2.4一起WRITE:'搜索条件——用户:',s_zname,';姓名:',s_zdesc .ULINE.WRITE:TEXT-000,TEXT-001,TEXT-002,TEXT-003,TEXT-004,TEXT-005.ULINE.IF LT_ZTTEST[] is not INITIAL.LOOP AT LT_ZTTEST ASSIGNING <fs>.IF <fs>-ZDATE ge sy-datum.WRITE icon_green_light AS ICON .ELSE.WRITE icon_red_light AS ICON .ENDIF.WRITE: <FS>-ZNAME,<FS>-zdesc ,<FS>-ZDATE,<FS>-ZAREA,<FS>-ZWERKS . ULINE.ENDLOOP.ENDIF.

界面显示:
在这里插入图片描述

3.编辑界面

3.1在显示界面添加0100屏幕

在这里插入图片描述

3.2 修改0100屏幕

双击点开0100屏幕,点击“字典”按键,然后输入需要维护的表名字,点击“从字典获取”按键,然后选定需要维护的行,点击确定(绿勾)
在这里插入图片描述
然后鼠标遇到屏幕适当位置,点击一下即可定位所有字段控件
在这里插入图片描述
美化下,添加描述(sap标准数据元素-域组成的字段会自动带出,用char等定义的字段需要自己添加文本控件)
在这里插入图片描述
保存,然后修改屏幕的代码:

PROCESS BEFORE OUTPUT.MODULE STATUS_0100."写状态栏(工具栏)和加载数据的代码
*
PROCESS AFTER INPUT.MODULE USER_COMMAND_0100. "写按键保存、返回

再双击MODULE STATUS_0100的“”STATUS_0100“”,提示不存在是否新建,则新建include程序命名为“ZTEST_DYNPRO_MOD”,添加获取双击行和GUI状态(工具栏)按键的代码:

MODULE STATUS_0100 OUTPUT. "pbo 事件SET PF-STATUS 'ZTEST_DYNPROSTA0100'."双击,新建一个0100屏幕的GUI状态,才能使用保存按键SET TITLEBAR '二级用户编辑界面'.IF SY-LISEL IS NOT INITIAL.READ TABLE LT_ZTTEST INTO WA_ZTTEST INDEX SY-TABIX .IF sy-subrc = 0.ZTTEST_01 = WA_ZTTEST .ENDIF.ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT. "pai事件CASE SY-UCOMM.WHEN 'BACK' OR '&BACK'.LEAVE TO SCREEN 0 .WHEN '%EX' OR '&UP' .leave PROGRAM .WHEN 'RW' OR '&EXIT'.leave PROGRAM .WHEN 'SAVE' OR '&SAVE'.MODIFY zttest_01 FROM zttest_01 .IF sy-subrc = 0.MESSAGE '保存成功' type 'S'.ELSE.MESSAGE '保存失败' type 'E'.ENDIF.WHEN OTHERS.ENDCASE.
ENDMODULE.

当然添加个GUI状态这样保存按键才能使用:
在这里插入图片描述
最后测试一下:保存已经提示成功,但是数据貌似没刷新。封装sql获取数据和write的方法,重新执行下即可,代码如下:

MODULE USER_COMMAND_0100 INPUT.CASE SY-UCOMM.WHEN 'BACK' OR '&BACK'.LEAVE TO SCREEN 0 .WHEN '%EX' OR '&UP' .leave PROGRAM .WHEN 'RW' OR '&EXIT'.leave PROGRAM .WHEN 'SAVE' OR '&SAVE'.MODIFY zttest_01 FROM zttest_01 .IF sy-subrc = 0.MESSAGE '保存成功' type 'S'.PERFORM GET_DATA."更新数据ELSE.MESSAGE '保存失败' type 'E'.ENDIF.WHEN OTHERS.ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Report ZTEST_DYNPRO
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_DYNPRO   .
TABLES:zttest_01 .DATA:LT_ZTTEST TYPE TABLE OF zttest_01 ,WA_ZTTEST LIKE LINE OF LT_ZTTEST .
FIELD-SYMBOLS:<FS> LIKE LINE OF LT_ZTTEST.select-OPTIONS:s_zname for zttest_01-zname,s_zdesc for zttest_01-zdesc .INITIALIZATION.AT SELECTION-SCREEN .AT LINE-SELECTION.CALL SCREEN '0100' .
START-OF-SELECTION .PERFORM GET_DATA.END-OF-SELECTION .PERFORM WRRTEOUT.TOP-OF-PAGE.
END-OF-PAGE .INCLUDE ztest_dynpro_mod.
*&---------------------------------------------------------------------*
*&      Form  WRRTEOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM WRRTEOUT .WRITE:'搜索条件——用户:',s_zname,';姓名:',s_zdesc .ULINE.WRITE:TEXT-000,TEXT-001,TEXT-002,TEXT-003,TEXT-004,TEXT-005.ULINE.IF LT_ZTTEST[] is not INITIAL.LOOP AT LT_ZTTEST ASSIGNING <fs>.IF <fs>-ZDATE ge sy-datum.WRITE icon_green_light AS ICON .ELSE.WRITE icon_red_light AS ICON .ENDIF.WRITE: <FS>-ZNAME,<FS>-zdesc ,<FS>-ZDATE,<FS>-ZAREA,<FS>-ZWERKS . ULINE.ENDLOOP.ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .REFRESH  LT_ZTTEST.select * from zttest_01 into TABLE LT_ZTTESTwhere zname in s_znameand zdesc in s_zdesc .
ENDFORM.

3.3 添加新增按钮

回到主程序ZTEST_DYNPRO。
引入icon和添加按键

TYPE-POOLS icon."使用icon库
TABLES:zttest_01 ,sscrfields. "选择屏幕上的字段结构
DATA:bttxt TYPE smp_dyntxt . "菜单、按键
SELECTION-SCREEN: FUNCTION KEY 1 . "添加f8同行按键
INITIALIZATION."按键初始化BTTXT-ICON_ID = ICON_ADD_ROW .bttxt-ICON_TEXT = '新增'.sscrfields-FUNCTXT_01 = bttxt .
AT SELECTION-SCREEN .CASE sscrfields-ucomm.WHEN 'FC01'.CALL SCREEN 0100. "新增界面WHEN OTHERS.ENDCASE.

当然也要在0100屏幕添加按钮
在这里插入图片描述

MODULE USER_COMMAND_0100 INPUT.CASE SY-UCOMM.WHEN 'BACK' OR '&BACK'.LEAVE TO SCREEN 0 .WHEN '%EX' OR '&UP' .leave PROGRAM .WHEN 'RW' OR '&EXIT'.leave PROGRAM .WHEN 'SAVE' OR '&SAVE'.MODIFY zttest_01 FROM zttest_01 .IF sy-subrc = 0.MESSAGE '保存成功' type 'S'.PERFORM GET_DATA."更新数据ELSE.MESSAGE '保存失败' type 'E'.ENDIF.WHEN '&ADDNEW'. "新增按键REFRESH LT_ZTTEST.CLEAR zttest_01.CALL SCREEN 0100.WHEN OTHERS.ENDCASE.
ENDMODULE.

总结

今天内容到此为止,相信通过这个简单实战,大家可以在项目写简单的录入界面了。当然还有打印、复制、删除、切换修改编辑等功能,这里不一一列举了

这篇关于ABAP项目砖家之旅-screen和表单项目实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/376362

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

nginx-rtmp-module构建流媒体直播服务器实战指南

《nginx-rtmp-module构建流媒体直播服务器实战指南》本文主要介绍了nginx-rtmp-module构建流媒体直播服务器实战指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. RTMP协议介绍与应用RTMP协议的原理RTMP协议的应用RTMP与现代流媒体技术的关系2

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时