博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ABAP项目砖家之旅-screen和表单项目实战
阅读量:4091 次
发布时间:2019-05-25

本文共 6918 字,大约阅读时间需要 23 分钟。

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


前言

直接上一个screen表单的需求来实战下,需求顾问提供fs-功能说明书,一般会描述下想要什么界面,录入什么数据,录入后如何使用等。我们按照需求整理成我们编程人员能否理解的即可

上需求:sap用户比较贵,我们有大堆的销售人员需要录入简单的资料,于是业务提了需要新建一个销售人员管理界面,需要用户、姓名、密码、截止日期、可选区域、根据区域可选门店。

一、需求解析(abaper)

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

注意:abap对象新建和程序命名都有一套规则,上一篇有截图,欢迎大家查看下

二、功能实现和开发计划

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

1.表结构

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

字段 描述 元素 类型 长度 小数 备注
zname 用户 zename zmname char 10 0
zdesc 姓名 zedesc zmdesc char 20 0
zdate 截止日期 zedate zmdate dats 8 0 yyyymmdd格式
zpsw 密码 zepsw zmpsw char 10 0 暂不加密
zarea 区域 zearea zmarea char 2 0
zwerks 门店 zename zm char 4 0

元素较简单重复使用概率不大,故暂不使用数据元素和域,注意主键,不然容易覆盖

在这里插入图片描述

插入数据:

在这里插入图片描述

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:
LIKE LINE OF LT_ZTTEST. "指针(行)

2.4 在开始选择事件写入sql

START-OF-SELECTION .  select * from zttest_01 into TABLE LT_ZTTEST    where zname in s_zname    and 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 
. IF
-ZDATE ge sy-datum. WRITE icon_green_light AS ICON . ELSE. WRITE icon_red_light AS ICON . ENDIF. WRITE:
-ZNAME,
-zdesc ,
-ZDATE,
-ZAREA,
-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:
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
. IF
-ZDATE ge sy-datum. WRITE icon_green_light AS ICON . ELSE. WRITE icon_red_light AS ICON . ENDIF. WRITE:
-ZNAME,
-zdesc ,
-ZDATE,
-ZAREA,
-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_ZTTEST where zname in s_zname and 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.

总结

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

转载地址:http://uvcii.baihongyu.com/

你可能感兴趣的文章
不要买铝合金机架的无人机,不耐摔,易变形弯曲。
查看>>
ACfly也是基于FreeRTOS的
查看>>
我发现七月在线的GAAS课程基本都讲到了
查看>>
电机堵转
查看>>
carzepony也在想往FreeRTOS上迁移
查看>>
可以买个好点的电烙铁
查看>>
ACfly调参记录(包括ACfly-F330和ACfly-T265)
查看>>
一定记得每飞几次或者隔一天要把螺丝和浆帽拧一次,确实会松的
查看>>
《多旋翼无人飞行器嵌入式飞控开发指南》里基于FreeRTOS的无人机软件框架
查看>>
思岚A1的SDK其实很好读懂,每个函数清晰明了,可以直接调用
查看>>
pixhawk(PX4)的一些论坛网站(包括中文版的PX4用户手册和PX4开发手册)
查看>>
串级 PID 为什么外环输出是内环的期望?(和我之前对串级PID的总结一样)
查看>>
我刚刚才完全清楚GPS模块的那根杆子是怎么固定安装好的
查看>>
去github里面找找也没有别人无人机+SLAM的工程
查看>>
现在明白为什么无名博客里好几篇文章在讲传感器的滞后
查看>>
Pixhawk解锁常见错误
查看>>
ROS是不是可以理解成一个虚拟机,就是操作系统之上的操作系统
查看>>
用STL algorithm轻松解决几道算法面试题
查看>>
ACfly之所以不怕炸机因为它觉得某个传感器数据不安全就立马不用了
查看>>
我发觉,不管是弄ROS OPENCV T265二次开发 SDK开发 caffe PX4 都是用的C++
查看>>