文章目录
前言
SAP屏幕开发也就是Dialog程序是我们作为一名ABAP程序员必会的技能之一,今天这篇文章给大家讲解一个SAP屏幕开发的一个小案例,如果没有屏幕开发基础的可以查看作者的另外一篇文章SAP屏幕开发基础,这个小案例不会讲的那么细致只会讲大致的开发流程以及功能实现。
一、案例介绍
我们要实现的效果就是创建一个Dialog程序,然后自己绘制界面,用户在界面中输入学生数据信息点击保存后将数据存入数据库表中。下图是我们的数据库设计创捷透明表的步骤本文省略。创建数据库表的时候呢记得要又MANDT字段和自己创建DATAELEMENT我这边就随意创建了。
二、屏幕绘制
我们先看一下要绘制的控件以及大致的效果图
a.
参考变量绘制输入框
我们所有的控件都根据程序中声明的变量来参考绘制,这样不容易出错绘制的效率也高。
参考结构可以声明完所有的输入框,描述文本需要手动创建绘制。单选框和复选框我们需要再单独创建变量参考绘制。
运行效果
后期再慢慢调整
b.
绘制单选 复选框
运行效果
c.
使用BOX控件分组
先调整一下布局位置,并给培训时间两个输入框设置不可输入属性,并给单选框复选框设置FCTCODE。
使用BOX分组
运行效果
三、逻辑代码功能实现
a.
完善基础按钮 标题
运行效果
功能代码编写
*& Include ZTEST_SCREEN_GLYN001I01
MODULE user_command_0100 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
LEAVE to SCREEN 0."返回上个界面
WHEN 'EXIT' or 'CANCEL'.
LEAVE PROGRAM.
when 'SAVE'.
PERFORM save_data."保存数据
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*& Include ZTEST_SCREEN_GLYN001O01
MODULE status_0100 OUTPUT.
SET PF-STATUS '0100'.
SET TITLEBAR '0100'.
ENDMODULE. " STATUS_0100 OUTPUT
b.
自动设置日期时间
*&---------------------------------------------------------------------*
*& Module SET_DATE_DATA INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE set_date_data INPUT.
gs_school-zcrdt = sy-datum."日期
gs_school-zcrtm = sy-uzeit."时间
ENDMODULE. " SET_DATE_DATA INPUT
c.
设置培训信息隐藏
首先将文本描述与输入框分为一组,这样在判断的时候可以简化代码。判断名称的时候一定要注意大小写。
MODULE study_info_display OUTPUT.
IF checkbox <> 'X'.
LOOP AT SCREEN.
IF screen-group1 = 'PXX'.
screen-invisible = '1'.
screen-input = '0'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
ENDMODULE. " STUDY_INFO_DISPLAY OUTPUT
运行效果
c.
保存功能实现
*&---------------------------------------------------------------------*
*& Include ZTEST_SCREEN_GLYN001F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form SAVE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM save_data .
IF radm = 'X'.
gs_school-zsex = 'M'."男
ELSE.
gs_school-zsex = 'F'."女
ENDIF.
SELECT SINGLE zschool
INTO gs_school-zschool
FROM zdialogschool
WHERE zschool = gs_school-zschool
AND zcode = gs_school-zcode.
IF sy-subrc = 0.
MESSAGE '已存在相同信息' TYPE 'S' DISPLAY LIKE 'E'.
ELSE.
INSERT INTO zdialogschool VALUES gs_school.
IF sy-subrc = 0.
MESSAGE '保存成功' TYPE 'S'.
ELSE.
MESSAGE '保存失败' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
ENDIF.
ENDFORM. " SAVE_DATA
最终我将自动设置时间的MODULE放在了最上面,因为如果先执行了SAVE的MODULE的话我的时间并没有先一步设置,而是保存行为完成之后才触发这个MODULE设置了时间。
四、总结
以上就是今天要讲的内容,本文仅仅简单介绍了sap中Dialog程序的一个小案例,如果有说错或者不好的地方还望大家提出来见谅。感觉笔者写的好的别忘了关注点赞加评论哦,也欢迎大家一起来讨论。谢谢!