ABAP开发规范V1.0

news/2024/11/27 17:23:48/文章来源:https://www.cnblogs.com/amadeuslee/p/18572720

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输出保持统一风格,参考示例如下:
img

²修改内表行时不使用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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/842378.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何保证RocketMQ消息不丢失

如何保证RocketMQ消息不丢失 目录如何保证RocketMQ消息不丢失背景什么情况下RokectMQ消息会丢失解决RocketMQ消息丢失问题消息生产防止消息丢失Broker端消息丢失消费端处理消息总结 背景 在金融系统中MQ消息的消息丢失是不允许的,消息的丢失会导致支付状态订单状态出现混乱。接…

优化服务入口设立:提升用户满意度的全方位指南

一、引言 在数字化浪潮的席卷下,企业服务质量与服务入口设立的合理性、便捷性紧密相连。一个出色的服务入口能成为企业与用户之间的高效桥梁,不仅方便用户获取服务,还能提升企业运营效率,进而对用户满意度产生深远影响。然而,现实中不少企业从IT部门角度构建的服务流程和工…

postgres数据库大版本升级

Postgres数据库大版本升级1.升级的介绍当前PostgreSQL版本号由主要版本号和次要版本号组成。 10之前的版本由三部分组成,10开始只有两部分数字组成。例如,在版本号10.1中,10是主要版本号,1是次要版本号,这意味着这将是主版本10的第一个次要版本。 对于PostgreSQL版本10.0之…

通过本地私有的镜像仓库harbor解决网络原因导致的jdk无法加载而造成的docker打包错误

​各种网络原因,或是docker.io无法访问,或是阿里的镜像源故障,导致java打包发布的时候报错,很影响代码发布的质量。解决思路:墙出去把jdk下载下来,代码使用本地的harbor库进行引用,一劳永逸。此解决方法也适用于国外优质不频繁变动的镜像源的本地化使用。解决方法 1. 墙…

过路车辆识别智慧矿山一体机行人不行车违章识别:安防摄像头中的宽动态如何测量?

在安防监控领域,宽动态技术是衡量摄像头性能的重要指标之一,它直接影响到摄像头在不同光照条件下捕捉图像的能力。随着技术的发展,宽动态技术已经从模拟时代的初步探索,发展到网络高清时代的成熟应用。 一、安防摄像头中的宽动态如何测量? 1、实现方式 模拟时代,实现宽动…

CS3231 Theory of Computation 错题集 归档

埃癸斯 (Aegis) 虽然是高性能的反暗影压制兵装 (Anti-Shadow Suppression Weapon),但她在逻辑推理方面并未得到特殊强化。在辰巳人工岛的月光馆学园插班入学后,埃癸斯常常感觉自己跟不上课程进度。埃癸斯尤其不擅的学科是计算理论 (Theory of Computation);她认为,作为人工…

CS3231 Theory of Computation 归档

计算理论 (Theory of Computation) 当之无愧是计算机科学王冠上的明珠;考虑到我贫瘠的智商,以后估计不会朝 TCS 方向来走;但对这些优雅的理论有一个最基本的了解应当是 CS 学生的素养。 讽刺的是,你坑近二十年前就没有开设这门课了 [1],只得留待交换来上。老师是印度人,口…

vxe-table 实现表格数据分组,按指定字段数据分组

实现表格数据分组,按指定字段数据分组,使用树结构来实现分组功能。 官网:https://vxetable.cn<template><div><vxe-grid v-bind="gridOptions"></vxe-grid></div> </template><script> import XEUtils from xe-utils c…

基于SVG的jquery手势密码解锁插件

这是一款仿安卓的基于SVG的jquery手势密码解锁插件。你可以设置手势密码,以及验证手势密码,使用非常方便。在线演示 下载使用方法 在页面中引入jquery和patternlock.js文件,以及patternlock.css文件。< link href="patternlock.css" rel="stylesheet&qu…

Vmware虚拟机Ubuntu忘记密码怎么办?

适用于VirtualBox和VMWare, 其他虚拟机软件未尝试,理论上其他的虚拟机软件和操作系统也适用。虚拟机的Ubuntu忘记密码后,我们可以尝试进入恢复模式,登录超级用户(root)来修改原用户的密码。进入recovery mode 启动ubuntu,当有进度条时就长按shift,出现以下界面 选择进入 …

机房环境配置指北

机房环境配置指北 Dev-Cpp 谁用这个 /oh VSCode 确保有在官网上下载最新版本的 VSCode。 插件安装C/C++:;Code Runner:;cph(选用):;Python(如有需要):;Latex Workshop(编辑 .tex 文件):。配置编译器 使用 VSCode 需要用户自己提供 C++ 语言的编译器,可以从 win…

AI 助力汽车电子测试:落地应用的六大挑战

引言:AI 的机遇与挑战自从 ChatGPT 横空出世以来,人工智能似乎一夜之间变得无处不在。在日常使用中,我们常常在惊艳与失望之间徘徊:它有时能展现出令人惊叹的能力,洞察深刻、对答如流,有时却又犯下令人哭笑不得的错误。正如 ChatGPT 官方页面的警示语所说:“ChatGPT 也可…