ABAP项目砖家之旅-基础篇

  • 前言
  • 一、ABAP简介
  • 二、ABAP开发工具
    • 1.SAPgui
    • 2.eclipse和HANA studio
  • 三、相关搬砖经验
    • 1.必须还是熟悉语法
    • 2.复制粘贴写注释
    • 3.代码摘录和分片段
  • 总结

前言

作为一个IT搬砖人,搬了十年的砖。回顾起来,只要公司项目要求换新砖就要短期搬得起来的生活不容易,于是从c#到.net到java,身边人专门做一门语言的成了专家,我们跟项目做的杂的也不能输,不能成为专家也要成为“砖家”搬的容易点。这里一一分享下转做ABAP项目如何短期成为“砖家”的经验,希望对大家项目临时搬砖有帮助


一、ABAP简介

Advanced Business Application Programming,俗称ABAP。SAP二次开发的一门语言,对比之前学过的C# java等,个人感觉类似JAVA多一点。项目中主要用来做人力、财务、供应链、销售分销等模块的报表、表单、屏幕增强和接口等开发。其他文科生写语言介绍就不重复写了,毕竟项目不太相关,大家吹水需要的话可以问度娘。

二、ABAP开发工具

1.SAPgui

sapGUI有较多的开发工具,其中最常用的有:
SE11——数据结构创建事务代码
SE38——abap程序编辑工具
SE80——类似资源管理器,里面可以查看所有的ABAP开发对象,并可以修改和新建开发等
ST22——查看ABAP dump,罪证储存场所
当然还有后台job日志等后面介绍到再说

2.eclipse和HANA studio

想直接贴网址…
eclipse下载abap工具插件,然后使用sap账号建立连接(跟GUI连接一样),最后使用ABAP开发视图来开发abap代码。不太好用,不是hana可以忽略。这里不介绍

三、相关搬砖经验

项目过程其实较少系统培训,一般都是乙方顾问丢一份资料过来,然后做些语法培训和简单代码注释讲解,最后提供些网址论坛什么的让参与项目的新手去边了解边接任务来熟悉。
个人经验来说:

1.必须还是熟悉语法

所有开发语言都有共性,拿到资料有经验的开发者一般都会想:
(1)变量怎么定义
TYPES:定义类型
DATA: 定义变量
range:abap特殊区间,结构为 SIGN OPTION LOW HIGH
TABLE:内表,sap内存表,这个是比较重要的变量
like type :指定变量的类型,如定义内表后面可以指定table of ,如定义工作区则接line of等
field-symbol:定义指针,一般循环时候使用,loop asign
来一个定义内表的范例:

*1.通过类型定义内表
types:begin of ty_header,sign type char1,option type char2,low type char10,heigh type char10,endof ty_header.
data:gt_header type ty_header occurs 0 ."使用自定义的内表类型type作为结果,直接定义内表
*2.直接定义等同于下面的快速定义方法:
data:begin of lt_header occurs 0,"occurs指针容量,0表示无限制sign type char1,option type char2,low type char10,heigh type char10,endof lt_header.
*3.直接参考数据表建立内表
tables:mara."引入mara物料基础资料表
data lt_mara type table of mara with head line ."是否带表头,带表头在循环时候不需要工作区,但性能慢点
*4.定义工作区方便loop时候存一行数据
data:wa_header like line of lt_header .
*5.指针的定义
field-symbol:<fs> like line of lt_header .

(2)循环、条件语句怎么写
常用的循环LOOP…ENDLOOP. FOR whilt
常用条件:IF…ELSEIF…ELSE.ENDIF.

*接上面的定义
wa_head-sign = 'I'.
wa_head-option = 'EQ'.
wa_head-low = '8888888888' .
wa_head-high = ''.
append wa_head to lt_headerwa_head-sign = 'I'.
wa_head-option = 'EQ'.
wa_head-low = '9999999999' .
wa_head-high = ''.
append wa_head to lt_headerloop at lt_header .write:'low :',lt_header-low  ,/. "/表示换行
endloop.

(3)控件怎么使用
ABAP控件不多,主要有工具栏、select-OPTION 类定义的搜索条件类控件和SCREEN类控件

*1. block line 等selection-screen屏幕块
SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME TITLE TEXT-t05 ..SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN POSITION 5.PARAMETERS:p_srqr TYPE c RADIOBUTTON GROUP rad2  MODIF ID rpt.SELECTION-SCREEN COMMENT 45(10) TEXT-p13 FOR FIELD p_srqr MODIF ID rpt.SELECTION-SCREEN POSITION 10.SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK blk.SELECTION-SCREEN BEGIN OF BLOCK blks WITH FRAME TITLE TEXT-t02.
SELECT-OPTIONS:s_zxszz    FOR ztsd_zt_header-zxszz,   "销售组织s_status   FOR ztsd_zt_header-zsapclzt NO INTERVALS NO-EXTENSION MODIF ID dtl,s_hzstat   FOR ztsd_hz_header-zsapclzt NO INTERVALS NO-EXTENSION MODIF ID pst,
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS:s_zcjrq FOR ztsd_hz_header-zcjrq OBLIGATORY DEFAULT sy-datlo.SELECTION-SCREEN END OF BLOCK blks.*2.按钮
SELECTION-SCREEN PUSHBUTTON /1(82) psb_alv USER-COMMAND psbcom.
SELECTION-SCREEN PUSHBUTTON /1(82) psb_proj USER-COMMAND PSBCOM2.
SELECTION-SCREEN PUSHBUTTON /1(82) psb_tr USER-COMMAND PSBCOM3.*3.按键等方法
FORM init_selscreen. "INITIALIZATION."(初始化) 执行,只能用于报表,赋值MOVE 'alv报表分析界面' TO psb_alv.MOVE 'abap项目开发清单' TO psb_proj.MOVE 'abap开发TR一览' TO psb_tr.
ENDFORM.
FORM action_of_selscreen.IF SSCRFIELDS-ucomm EQ 'PSBCOM' . "选择屏幕自定义按键PERFORM get_maindataforalv.CALL SCREEN 9020.ELSEIF SSCRFIELDS-ucomm EQ 'PSBCOM2'.CALL TRANSACTION  'ZRICEF'.ELSEIF SSCRFIELDS-ucomm EQ 'PSBCOM3'.CALL TRANSACTION  'ZXQBG_TR'.ELSE.ENDIF.
ENDFORM.FORM frm_modify_sel_screen . "根据相关参数设置屏幕块是否可见LOOP AT SCREEN.IF screen-group1 = 'FCN' "屏幕有三组,可以定义AND ( gv_pcode = 'RPT' OR  gv_pcode = 'ARCH' ).screen-active = 0.ENDIF.IF screen-group1 = 'RPT'AND ( gv_pcode = 'FCN' OR  gv_pcode = 'ARCH' ).screen-active = 0.ENDIF.ENDLOOP.
ENDFORM.FORM frm_tcode ."通过T-CODE判断IF sy-tcode = 'ZFIR010'.gv_pcode = 'RPT'.SET TITLEBAR '1000_RPT'.ELSEIF sy-tcode = 'ZFID010'.gv_pcode = 'FCN'.SET TITLEBAR '1000_FCN'.ELSEIF sy-tcode = 'ZFID010_ARCHIVE'.gv_pcode = 'ARCH'.SET TITLEBAR '1000_ARCH'.ENDIF.
ENDFORM.

(4)数据库数据如何提取和展示
abap有opensql作为sql语言,语法类似sql,但有很多细节,可以作为另一个章节讲了。
(5)abap程序的事件

*1.屏幕screen控件的事件
*PBO 状态 初始化界面 alv数据output到屏幕
PROCESS BEFORE OUTPUT."pbo事件MODULE INI_TABLE.MODULE STATUS_9200. "会提示生成,添加按钮,把备注的SET 代码设置生效 ,双击生成状态,最后在pai ucomm写入方法即可*PAI
PROCESS AFTER INPUT. "PAI事件
***1.表头
CHAIN .FIELD ZTRE_YZ_HEADER-ZYZMS  MODULE CHECK_YZMS ON INPUT.
"on input 只要输入就可以校验,可以校验表头单个控件
ENDCHAIN.
***2.表行项目
LOOP AT gt_main.CHAIN. FIELD gt_main-字段 MODULE check_字段 ON requested .MODULE check_字段 ON CHAIN-INPUT."输入任意值符合条件都检测MODULE check_字段 ON INPUT-REQUEST."输入任意值改变都检测  ENDCHAIN.
ENDLOOP.MODULE USER_COMMAND_9020.MODULE CANCEL AT EXIT-COMMAND.  "删除命令,优先屏幕必填 共用的PROCESS ON VALUE-REQUEST. "F4值 POV事件FIELD 字段 MODULE f4_value_字段.
PROCESS ON HELP-REQUEST. "POH事件FIELD 字段 MODULE f1_value_字段.    "F1帮助值略MODULE f4_value_zkfry INPUT.CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' "F4函数EXPORTINGretfield        = 'ZNAME'dynpprog        = 'ZDMD001'dynpnr          = '9100'dynprofield     = 'ZTDM_KFJD_MAIN-ZKFRY'value_org       = 'S'TABLESvalue_tab       = gt_lxfsEXCEPTIONSparameter_error = 1no_values_found = 2OTHERS          = 3.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.
ENDMODULE.MODULE USER_COMMAND_9020 INPUT.CASE SY-UCOMM.WHEN '&EXIT'.CLEAR sy-ucomm.LEAVE PROGRAM....ENDCASE.
ENDMODULE.MODULE CANCEL INPUT. "AT USER-EXIT COMMAND 在屏幕设置的必填等PBO标准执行模块之前执行,优先度最高CASE sy-ucomm .WHEN 'BACK' .PERFORM get_maindata .LEAVE TO SCREEN 0 .WHEN 'UP' OR 'EXIT' .leave PROGRAM.WHEN 'ADDUSER'.IF sy-mandt ne '200'.MESSAGE '检测到客户端不是200,请在200维护内外开发员联系方式' TYPE 'W'.
*MESSAGE w000(zmsg) WITH '填入的资产号不正确,请检查' DISPLAY LIKE 'E'.ENDIF.CALL FUNCTION 'ABAP4_CALL_TRANSACTION'STARTING NEW TASK 'A'EXPORTINGTCODE = 'ZXQBG_USER'.WHEN OTHERS.ENDCASE.
ENDMODULE.MODULE check_字段 INPUT.
...IF iv_anln1 IS NOT INITIAL.MESSAGE w000(zmsg) WITH '填入的资产号不正确,请检查' DISPLAY LIKE 'E'.RETURN.ENDIF.****PAI:    FIELD ZFIR002_PRC_CF-VALUE  MODULE zmd_pov ON REQUEST .
MODULE ZMD_POV INPUT.IF ZFIR002_PRC_CF-VALUE EQ 'RC' OR ZFIR002_PRC_CF-VALUE EQ 'DD' OR ZFIR002_PRC_CF-VALUE EQ 'ACCT'.LOOP AT SCREEN.IF screen-name eq 'ZFIR002_PRC_CF-PAQJ'.screen-input = '1' ."0代表不能输入 1代表可以输入!ENDIF.MODIFY SCREEN.ENDLOOP.MESSAGE '选择单值可以填写区间和单值条件' type 'W' .ELSE.MESSAGE '选择汇总字段只能支持单值条件,请不要填写区间条件' type 'W' . ENDIF.
ENDMODULE.
ENDMODULE.*2.report类abap程序的事件:SELECTION-SREEN OUT ."控件操作/填写时候执行
INITIALIZATION."初始化,类似onload
AT SELECTION-SCREEN   ON VALUE-REQUEST FOR S_S1-low.*另一种POH和POH在main的写法 点击F4后执行
AT SELECTION-SCREEN   ON HELP-REQUEST FOR S_S1-low."点击F1后执行
START-OF-SELECTION. "开始点击F8(F8代表执行按键)
END-OF-SELECTION. "操作F8后执行

在这个基础上其实可以对比自己之前学的java等,找一篇别人总结出来的语法进行对比。这样容易快速入手,否则花了几个月看了整本书,估计项目都做完了。

2.复制粘贴写注释

没错,就是要把别人的代码复制过来,关键是自己要在别人的基础上写代码注释,这样才能熟悉,不然难以理解,每次都只能复制

3.代码摘录和分片段

在复制粘贴的基础上,做好注释,然后分解代码片段,单独保存起来,下次使用时候,如果打不出来,可以保存到sap的模式中,直接在模式里面选择该代码片段。

总结

先说这么多,得空整理下之前项目文档和代码片段放上来。下一篇应该先介绍下ABAP语法语句等

ABAP项目砖家之旅-基础篇相关推荐

  1. ABAP项目砖家之旅-语法和开发对象篇

    ABAP项目砖家之旅-语法和开发对象篇 前言 一.基本语法 二.开发对象及其语法 1.底层数据类型 2.数据表.视图.数据元素.数据域.数据类型 1.1数据类型dataTypes 1.2数据域data ...

  2. ABAP项目砖家之旅-ABAP对象命名规则

    ABAP项目砖家之旅-ABAP对象命名规则 前言 一.总则 二.变量命名细则 总结 前言 ABAP项目开发前,如果是新项目,一般乙方公司都会咨询甲方公司是否有自己的abap程序命名规范,他们按照要求做 ...

  3. ESP8266 Non-OS SDK 开发之旅 基础篇① 初识 Non-OS SDK,史上超级详细手把手教小白20分钟快速搭建SDK软件开发环境,完成第一个例子Hello World!

    文章目录 1.前言 2. SDK概述 2.1 SDK使用流程 2.2 ESP8266 HDK -- 硬件开发工具 2.3 ESP8266 SDK -- 软件开发工具包 2.3.1 Non-OS SDK ...

  4. ESP32 MicroPython开发之旅 基础篇② —— MicroPython 执行过程

    文章目录 MicroPython 执行过程 1. MicroPython ESP32文件系统 1.1 我如何查看文件系统有多大空间? 1.2 我如何查看当前占用了多大空间? 1.3 我如何知道里面已经 ...

  5. Python学习之旅 —— 基础篇(二)数据类型、运算、while循环

    本篇要点: 常量定义 数据类型(重点是字符串的各种操作.列表和字典) 各种运算 while 循环 一.常量定义 虽然叫做常量,但是python中的常量是可修改的.(c语言中的常量不可修改.)常量的定义 ...

  6. 提权学习之旅——基础篇

    首发于先知社区 https://xz.aliyun.com/t/8054 前言: 无论是CTF赛题还是渗透测试,有很多时候拿到WebShell的权限并不高,没有办法继续深入,所以需要进行提权操作,方便 ...

  7. ESP8266开发之旅 基础篇⑥ Ticker——ESP8266定时库

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... 共同学习成长QQ群 622368884,不喜勿 ...

  8. python第一个发行版本由c语言实现_1 晓白的python逆袭之旅基础篇---第一章

    第一章 来自晓白的困惑 1人物介绍晓白:一位即将毕业,踏入社会的大学生,对自己的前途充满了困惑,对计算机编程感兴趣,想以后进入互联网行业,从事开发工作,但是不知如何开始. 老袁:晓白的学长,同时也是晓 ...

  9. ESP8266开发之旅 基础篇③ ESP8266与Arduino的开发说明

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... 共同学习成长QQ群 622368884,不喜勿 ...

最新文章

  1. iphone系统更新 3002错误
  2. 学习Kali Linux必须知道的几点
  3. python使用for循环打印99乘法表-Python用for循环实现九九乘法表
  4. 安卓 sharedpreferences可以被其它activity读取_【安卓逆向】“一份礼物”之我要o泡逆向分析...
  5. Spark SQL之jdbc方式访问
  6. python路径拼接os.path.join()函数和os.makedirs的用法
  7. Java 8 CompletableFuture 教程 1
  8. 大数据 java 代码示例_Java变量类型与示例
  9. 重学java基础第八课:硬件和冯洛伊曼系统
  10. 简书自动生成目录小工具
  11. TikTok全球月活突破10亿
  12. android常用开源库分享
  13. Mac-VMware-分辨率修改
  14. python获取图片曲线数据_从图片中提取曲线坐标数据
  15. CAN总线控制器配置说明
  16. OPPOWatch3什么时候发布 OPPOWatch3配置如何
  17. 力扣(441.26)补8.24
  18. Unity数据可视化 温度图效果(一)
  19. Failed connect to github-production-release-asset-2e65be.s3.amazonaws.com:443问题
  20. EBS中导入xdf出现错误Error during upload of Fnd_Columns

热门文章

  1. java计算机毕业设计后勤管理系统(附源码、数据库)
  2. C语言程序设计谭浩强(第四版)部分课后习题作答——第七章——7.8,7.10,7.16
  3. 蚂蚁上市,估值超2000亿美元!想数字化转型?先搞清楚这些问题
  4. 【百度网盘安装不了怎么办】
  5. 面试常问集锦——分布式系列
  6. python解决迅雷下载限制的方法
  7. Mac上如何安装Mysql5以及可视化工具navicat
  8. Eclipse 安装ADT
  9. html5 tcp控制硬件,搭建自己的硬件植入工具
  10. 集成elastic-job分布式调度定时任务