1. 概要
1.1目的
该文档定义了在开发与维护ABAP程序过程中必须遵守的规范与标准。该文档应当被视为一个动态的文档,该文档会根据需要进行增补和修订。
开发规范的重要作用在于保持整个开发团队的开发风格一致,提高程序质量,降低维护压力。
1.2适用范围
所有ABAP开发及系统配置人员。
2. 程序命名规范Naming Rule
2.1.目的
系统设计及开发过程中,需要遵守的命名规则规定的相关标准。
2.2.命名规范标准
制作Naming Rule时根据以下制作标准编写。
2.2.1.命名规范基本结构
命名规范的基本结构如下所示:
'Z' + (模块标识符) + (标识符:一至两个字母) +(序号四位)。
命名一个对象的时候以 'Z'开头。
模块标识符,用来指明所属模块。
标识符,用来区分该对象的类别。
使用这种基本结构为Naming Rule的原则,无法应用Naming Rule的情况可以使用其他例外结构。
2.2.2.流程模块命名
流程模块命名为2至4位字符,以按业务流程来区分,跨业务流程模块的以服务提供方作为流程模块命名。
(1)模块命名规则
流程模块 | 名称 |
---|---|
SD | 销售 |
PP | 生产 |
FI | 财务 |
MM | 后勤 |
HR | 人事 |
PM | 设备 |
MDM | 主数据 |
PS | 项目管理 |
…… | …… |
2.2.3.Package 开发包
(1)Z + 流程模块名(各流程模块用一个)
EX:ZFI、ZPM。。。。
Package由开发负责人统一创建,需要的可以提出申请。
²注意:S4/HANA中所有接口及增强都放在Package:ZNT下面
²国贸个性化需求放ZGM包下
2.2.4.ABAPDictionaryObject
(2)Object 类型
标识 | 类型 | 含义 |
---|---|---|
T | Table | 数据库表 |
V | View | 数据库视图 |
S | Structure | 结构 |
LT | Table Type | 使用Line Type来定义表的时候使用 |
TG | Type Group | 类型组 |
SH | Search Help | 搜索帮助 |
(3)Tables Name
1)字段的定义必须用Data Element,不能使用原始类型。
对象 | Table | |
---|---|---|
命名规范 | Z + FI + T + NNNN | |
说明 | Z | 表示自建 |
FI | 流程模块 | |
T | 表示Table | |
NNNN | 4个数字的组合,数字的递增是1为单位,表的编号XXXX应和该表所对应的主程序的编号保持一致。ex:ZFIT0001 当后期业务需要加入跟该表有关联的新表时,在后面加入字母A/B/C。。。来区分 ex:ZFIT0001A | |
范例 | ZFIT0001 : FICO模块的第一张自建表 ZFIT0001A: FICO 模块的第一张自建表的关联表 | |
描述 | [流程模块] + 该表用途的描述(尽量详细明了) |
(4) Configuration table
对象 | Table | |
---|---|---|
命名规范 | Z + FI + T + _ + CFG + NNN | |
说明 | Z | 表示自建 |
FI | 流程模块 | |
T | 表示Table | |
NNN | 3个数字的组合,数字的递增是1为单位,表的编号XXXX应和该表所对应的主程序的编号保持一致。ex:ZFIT_CFG001 | |
范例 | ZFITCFG001 : FICO模块的第一张配置表 | |
描述 | [流程模块] + 该表用途的描述(尽量详细明了) |
(5)Structure Name
所有字段的Data Element中,没有特殊原因一定要分配Data Element。(不使用Predefined type .)
对象 | Structure | |
---|---|---|
命名规则 | Z + FI + S + NNNN | |
说明 | Z | 表示自建 |
FI | 流程模块 | |
S | Structure | |
NNNN | 4个数字的组合,数字的递增是1为单位 | |
举例 | ZFIS0001 | |
Description | [流程模块] + Structure 用途描述(尽量详细明了) |
对于增强结构,以ZAS开头,后加有意义的字符区分,即:ZAS+ 有意义的字符
(6)View Name
无法复制加载中的内容
Table type
无法复制加载中的内容
(7)Search Help Name
无法复制加载中的内容
(8)Type Group Name
无法复制加载中的内容
2.2.5.Class Definition & Implementation
(9)Class Name
无法复制加载中的内容
(10)Interface
无法复制加载中的内容
(11)BADI Enhancement Spot Name
无法复制加载中的内容
(12)BADI Name
无法复制加载中的内容
(13)BAdI Implementation Name
无法复制加载中的内容
2.2.6.ABAP Programming Object
(14)概要
对于与ABAP 程序相关的Object规定命名规则。
- 命名规则使用重复的情况(例:是BDC,是 Report 程序的情况命名规则):
按DialoguE (第1级), Interface (第2级), Report(第3级) , BDC(第4级),Conversion(第5级),Form(第6级)的顺序,依次套用命名规则。
无法复制加载中的内容
(15)Dialog Program Name
无法复制加载中的内容
(16)Report Program Name
无法复制加载中的内容
(17)Interface Program Name
无法复制加载中的内容
(18)Includes programs
主程序ID + TOP/FRM/_screen No.
(19)Function Group Name
无法复制加载中的内容
(20)Function Module Name
无法复制加载中的内容
(21)Screen Name
无法复制加载中的内容
(22)Menu Name( GUI-Status (PF-Status) )
无法复制加载中的内容
(23)GUI title
无法复制加载中的内容
(24)Subroutines
无法复制加载中的内容
(25)Transaction Code
与程序名称相同。(Module Pool 程序的情况'SAPM'除外)
(26)Form Name
无法复制加载中的内容
2.2.7.其他命名规范
(27)消息类开发需遵循以下开发规范:
a) 必须使用预定义的MESSAGE(SE91定义),不得直接抛出硬编码的text消息,或不使用消息类抛出消息;
b) 新建消息类须遵循消息类命名规则,Z+FI(流程模块)+XX;
c) 板块消息类和跨板块(全局)消息类需严格区分,避免板块和全局消息类传输时相互覆盖。
(28)Message Class Name
无法复制加载中的内容
Message Text 使用时Parameter有两个以上的情况,在 Parameter上可以区分顺序。
例) session&1正被用户 &2处理中
(29)Project Name
用户自定义的User Exit,适用本标准。
无法复制加载中的内容
(30)Number Ranges (Object)
Number Range Object按各模块使用序列号并创建。
无法复制加载中的内容
(31)权限对象命名规范
Authorization Fields
无法复制加载中的内容
Authorization Object Classes
无法复制加载中的内容
Authorization Objects
无法复制加载中的内容
(32)传输请求号
传输请求理论上对应开发清单,一个功能模块创建一个传输请求,不允许一个请求号嵌套多人子请求号。
无法复制加载中的内容
3. Coding Convention
3.1.变量声明
通常在定义变量的时候,冒号后面要用一个空格。
例: DATA:MATNR LIKE VBAP-MATNR,
WERKS LIKE VBAP-WERKS.
在多个程序中共同使用的变量和类型,使用Type Group或者Include文件来减少重复的定义。
如果可能,尽量使用本地变量以减少全局变量的定义个数。
如果可能,尽量不让变量持续的运行在程序中。
3.2.变量的命名规范
一般规则:变量范围(g/l)+变量类型(v/s/t)+'_'+ xx.xxx
如:
全局变量 gv+_+xx.xxxeg: data gv_count type i.
全局结构 gs+_+xx.xxx
全局内表 gt+_+xx.xxx
本地变量 lv+_+xx.xxxeg:data lv_count type i.
本地结构 ls+_+xx.xxx
本地内表 lt+_+xx.xxx
n全局变量的定义
无法复制加载中的内容
n本地变量的定义
无法复制加载中的内容
nTypes 定义
-
Program 内部 Global Types 定义
-
User Predefined Types
-
Refer to Existing types
-
Reference Types
-
Structured Types
-
Table Types
-
Ranges Table Types
无法复制加载中的内容
n全局内表的定义
无法复制加载中的内容
n本地内表的定义
无法复制加载中的内容
n Perform Parameter 定义
无法复制加载中的内容
n User Interface定义
-
Selection Screen的user interface中要使用的parameters/select-options的相关定义
-
各个相关的Label text:利用相关 program的text elements tool进行管理
nParameters
无法复制加载中的内容
n Select-Options
无法复制加载中的内容
nConstant常量定义
无法复制加载中的内容
n Range变量 公布
无法复制加载中的内容
n集的定义
无法复制加载中的内容
nText Symbols
所有program 内的 text一定要使用Text Symbol
Hard conding text时一定要进行向text symbol的变化。在 program中使用的所有text要使用ABAP Text Element tool进行管理。
无法复制加载中的内容
nField Symbols
Field Symbols区分Global/Local。
要指定Type,指定特别type困难的情况使用'TYPE ANY'。
无法复制加载中的内容
n Table Control
Table Control作Global定义.
无法复制加载中的内容
nCustom Control
Control Object使用通过Container Screen Layout的Custom Control
无法复制加载中的内容
nLocal Class Definition (Program 内部)
与通过Class Builder创建的global class object不同,是在程序内部定义。
无法复制加载中的内容
n参考变量(Reference Variables for Class/Interfaces)
无法复制加载中的内容
4. 程序注释的命名规范
以下定义注释相关的标准事项。
4.0一般规则
注释分为程序 main header 注释, Line注释, Block注释三种。
①一定要在适当的位置上进行注释.
②注释基本上使用中文。
③所有程序上都要附上main header 注释。
④所有子模块routine上都要附上注释。
⑤程序的所有注释,为了方便第三者理解都要进行详细描述。
⑥有效代码行与注释的比例不得低于100:7
4.1注释的格式
无法复制加载中的内容
4.1.1标题/程序头的注释
所有程序要包含与以下信息相关的注释。
main header 注释的位置位于main Include的上端。
程序修改时与变更编号一起管理变更内容,并且在程序coding部份也要通过注释描述变更编号,便于后期管理。
无法复制加载中的内容
4.1.2修改程序的注释
程序修改时程序下端的程序main header 注释中一定要描述变更历史,修改的子模块 routine也要注释,需要增加 **** XX BY 用户名 AT 日期 For 申请者 Begin***;
**** Add BY 用户名 AT 日期 For 申请者 End ***。
XX:新增Add 修改 Modify 删除 Delete,
删除时直接注释源代码,不需要物理删除。
无法复制加载中的内容
5. 程序结构
主程序结构应该简洁明了。
主程序应该至少采用:
XXXTOP
XXXXFRM的模式。
XXXX表示主程序ID。
程序主体逻辑部分应该至少分为:
FRM_GET_DATA
FRM_PRC_DATA两部分。
²ALV输出保持统一风格,参考示例如下:
²修改内表行时不使用MODIFY关键字,而是使用FIELD-SYMBOLS指针:
LOOP AT gt_ ASSIGNING FIELD-SYMBOLS(<g_acdoca>).
<g_acdoca >-hslalt = 1000.
<g_acdoca >-kslalt = 2000.
<g_acdoca >-oslalt = 3000.
<g_acdoca >-vslalt = 4000.
<g_acdoca >-bslalt = <g_acdoca >-oslalt + <g_acdoca >-vslalt.
ENDLOOP.