《2022年ABAP开发编码规范V[定 .pdf》由会员分享,可在线阅读,更多相关《2022年ABAP开发编码规范V[定 .pdf(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、ABAP 编码规范2009年 12 月国际商业机器全球服务( 中国) 有限公司名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 12 页 - - - - - - - - - ABAP 编码规范机密 Confidential 第 2 页 共 12 页1前言 .32程序对象 .32.1程序组件: .32.2程序属性: .32.3程序结构 .42.4消息 .52.5文本元素 .62.6菜单 .62.7子程序和函数 .62.8日期 .62.9使用 NATIVE SQL 来执行 SQ
2、L .73命名规范 .73.1PACKAGE 开发类 .73.2传输请求号描述.83.3SAP 程序对象 .83.3.1程序.83.3.2事务代码 .93.3.3Message Class 应用区域.93.3.4程序内的数据的声明.93.4数据字典 .93.5打印格式 .103.6其他对象 .104程序性能 .114.1SQL 语句 .114.1.1SELECT 语句.114.1.2数据库更新.114.2内部表 (INTERNAL TABLE ) .11名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - -
3、 - - - 第 2 页,共 12 页 - - - - - - - - - ABAP 编码规范机密 Confidential 第 3 页 共 12 页1 前言制定任何标准的明确目的都是提供一致性。只有通过一致性,才可能提高性能和维护效率,否则这一点是很难实现的。开发用于本公司的任何ABAP程序,都应遵守并贯彻下文提及的ABAP标准。本文档编写参照了以下的文档。. BC 名称领域和命名规则 ,SAP Online Help 6.0,SAP AG SAP delivers afew system objects with names that fallwithin the customername
4、 range. These objects already existed when the customer name range was extended from YY*/ZZ* to Y*/Z*. These objects are listed in table TDKZ. 2 程序对 象可 使用事务代码SE38 或SE80 来创建新的ABAP 程序。程序 名参考本规范 的命名规则。2.1 程序组件:初始 界面包括一 个对象组件 的列表,包括 :源代码(Source Code )、变量 (Variants )、属性( Attributes )、文 档(Documentation)、文
5、本元 素(Text Elements)。2.2 程序属性 :程序 属性窗口记 录了程序相 关的一些基本 信息。首先应 该输入是标题(Title),需输入 程序功能的描述性标题。 属性由很多 项组成,包括 :类 型(Type ):这个属性 指明了程序 类型,可以通 过F4键来获取有 效值,必须指 定。身份 (Status ):这个属 性指明了程 序是系统程序 还是客户程 序还是测试程序,可以通过F4键 来获取有效 值,一般指定 为,K? 。应用 (Application ):这一属 性确认了程序 与SAP 中的那个模块 相关,可以通 过F4键来获取有效 值,一般不指 定。权 限组(Authori
6、zation Group ):这是 一个8字符 字段,将程 序与权限相关联,系统通 过它来检查用 户是否具有执行该程序的 权限,可以通过 F4键来 获取有效值 ,非特 殊需求,一 般不指定。开发 类(Packages ):开发类 确定了传输层 ,即对象的 传输属性。需严格按所属模块归属到个模块的开发类别下,使得程序对象清晰便于管理和查找。逻 辑数据库(Logical database): 这项标示了 程序使用的 逻辑数据库, 可以通过F4键来获取有效 值,如在程序 里使用逻辑数据库的话, 必须指定。选择 屏幕(Selection screen):这 个属性指明 了逻辑数据 库的选择屏幕 号码,
7、在指定 逻辑数据库后可 以通过F4键来获取 有效值,而 且必须指定 。锁定 编辑(Editor Lock ):这是个 可选字段, 可以开启或关 闭。通过单击该字段来设 定其值。当设置 为开启时,只有将其设置 为开启的用 户才允许修改 ,直到该名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 12 页 - - - - - - - - - ABAP 编码规范机密 Confidential 第 4 页 共 12 页字段重新设 置为关闭为 止。在锁定状 态下,仍可 被其他用户执行。
8、一般不启用。定点运算 (Fixed Point Arithmetic):这 是个可选字段,可以开启 或关闭。通 过单击该字段来设定其 值。当设置 为开启时启用 定点运算。 默认值为启用 ,必须启用。Unicode 检查( Unicode Check Active):这是个可选字段 ,可以开启或 关闭。通过单击该字段来 设定其值。 当设置为开启 时启用Unicode 检查。默认值为启用,必须启 用。变量启 动(Start Using Variant):这是 个可选字段,可以开启或 关闭。通过 单击该字段来设定其值 。当设置为开启时,只能 通过变量来 启动程序。2.3程序结构对 于减少将来的维护活
9、动而 言,ABAP 中各种 组件的位置或顺序是非常 重要的。下面 描述了ABAP 程序 中希望得到的 所使用组件的顺序。程 序ZBCR_DOC 这些都有 ,可以做为开 始的原型。不 需要的部分可以删除。需 特别强调的 是程序的注释 ,ABAP 程序源码中的注释是 非常有用的, 特别是准确明了的注释。 足够的注释 信息可以帮助 帮助理解程 序,以便程序的读与维护。 在ABAP 代码中使用注释行方法 (在第一列放 置*)。每个ABAP 程序头部必须放置 程序一般信 息和修改记录 ,如下所示 的注释块:*&- *& Program name: ZBC400_REPORT *& T-Code: (XX
10、XX) *& Porgram Type: Report *& Description: 程序结构模板*&- *& Author: Amanda Cao *& Date: 2006.06.23 *&- *& Funciton Desc: *& *& *& *&- *& Modification Log: *& Version Date Author DESCRIPTION CHANGE REQUEST*& - - - - - *& 000 2006.06.01 BC009-01 Initial release DRCK900001 *& *&- 具体的程序 块是:名师资料总结 - - -精品资料
11、欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 12 页 - - - - - - - - - ABAP 编码规范机密 Confidential 第 5 页 共 12 页TABLES:* DATA: TYPE. FIELD-SYMBOLS: CONSTANT* INTERNAL TABLES* SELECTION-SCREEN* INITIALIZATION AT SELECTION-SCREEN AT SELECTION-SCREEN OUTPUT* START-OF-SELECTION GET END
12、-OF-SELECTION TOP-OF-PAGE END-OF-PAGE AT LINE-SELECTION AT USER-COMMANDFORMs - in sequence based on sequence of PERFORMs2.4消息需 要为每个SAP 模块 定义消息类, 以支持用户定 义验证消息。需要把这些 消息和ABAP 程序 中使用的消息 分开。若 是在程序中所用的消息, 那么消息ID nn必须在程序的 第一条语句 中出现(nn是2位字符的消息 类)。程序 中只能使用 一个消息类。 在nn这个2位字 符后设置从001到999的数值。消 息有5个 安全等级: A为异常,E为
13、出错,W为警告,I为信息, S为成功。 安全等级A、E,和W会在 消息发布时终止程序。安全等级I不会终止 程序,但是 会显示弹出 窗口,并需要 用户响应。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 12 页 - - - - - - - - - ABAP 编码规范机密 Confidential 第 6 页 共 12 页2.5文本元素文本元素对 象组件包含3种不同的 文本类型, 它们是:标 题和报头选 中文本编 号文本标题和报头 包括3种不同类型的标 题:标题:在屏 幕顶
14、部显示标题列表: 在报告列表的 报头首行显示列标题:四 行,可定义报 告的列标题在 程序中使用PARAMETERS或SELECT-OPTIONS时显示选中 文本。可以在此处输入描 述性文字, 帮助用户理解 应该要输入什么 值。编 号文本是用3字符代 码标示一段文 字(如TEXT-001 ,TEXT-002 等),然后就可 以在程序中 需要用到这些 文字的地方 直接使用这个代 码来替代。如 果没有迹象表明所写的程 序会由不同 语言的用户使 用,首选的 方法就是在程序中使用文字 。若程序会 在多语言实例 中运行,首 选方法是将文 本定义为编号 文本,然后使用编号(即 TEXT-001 ,TEXT-
15、002 等)。2.6菜单使 用标准/提议功能代码。2.7子程序和函数在ABAP 文档中,子程序和功能 模块有如下 区别:功能模 块和一般ABAP 子 程序的主要 区别在于其清晰定义的接 口。这种情况下,只能 通过接口更 改数据,从 而避免了不符 需要的副作用 。子程序或模 块都希望是高度的重用, 应该以功能模 块的形式进行编码。通过 使用功能模 块,ABAP 需要定义 参数,并对 参数和例外状况 编制文档提 供帮助。功能模块作 为功能组的一部分存储, 每个功能组都 被命名,并有相应的管理 人员。推荐 个开发小组长 担任功能组 管理员。功能组和功能模 块的命名见 命名规范,使 用描述性的 名字便
16、于搜索过程,因为 ABAP 支持使用通配 符搜索功能 模块名列表。如果一个FORM 会通 过多个程序 执行,那么这 个FORM 应该放在子程 序中,而不 是放在主程序中。这个子 程序只允许包 含其他FORM ,而且 每个FORM 应该使用标 准参数编码,确保能够正 确执行。2.8日期可 以用LIKE SY-DATUM(或其他日 期字段)或TYPE D来定义日 期字段。可 以通过指明日期或指明天 数给这些字段 赋值(天数定义为I型)。缺 省的用户参数文件中,日 期格式会影 响日期字段的 输出。要 在报告中打印有分隔符的 日期,指定 如下的字段格 式:格 式选项样例输出示例WRITE: / New
17、 Date., Z_DATE1 MM/DD/YYYY. 07/21/1995 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 12 页 - - - - - - - - - ABAP 编码规范机密 Confidential 第 7 页 共 12 页WRITE: / New Date., Z_DATE1 MM/DD/YY. 07/21/95 WRITE: / New Date., Z_DATE1 DD/MM/YYYY. 07/21/1995 WRITE: / New Date
18、., Z_DATE1 DD/MM/YY. 07/21/95 WRITE: / New Date., Z_DATE1 DDMMYY. 072195 WRITE: / New Date., Z_DATE1 YYMMDD. 950721 WRITE 语句的 这些“ 格式选项” 可以在ABAP 程 序里动态的编辑日期。本 例中,用户 参数文件缺省 日期格式为MM/DD/YYYY。格式YYMMDD 是 唯一一个指 定(年,月, 日)不要分 隔符的格式。有 很多调用函数与处理日期 相关。要查 看这些函数列 表,在调用 函数名选择界面,输入“*date* ”可以看到这 个列表。还 有一些常用的重定与 编辑日
19、期格式的程序。基 本的日期检查函数叫做DATE_CHECK_PLAUSIBILITY。 其唯一输入为 数字的格式 为YYYYMMDD的字 段。任何错误出现时, SY-SUBRC 都将置 1。其中包 含了闰年逻 辑,还有世纪 例外。2.9使用 Native SQL 来执行 SQL 要 在ABAP 程序中访 问非DDIC 数 据时,需要使 用EXEC SQL 界 面,它绕过了 常规的ABAP 处理 。强烈不推荐 使用EXEC SQL ,即使在使用EXEC SQL 时, 也仅限于访问 非DDIC 表。3 命名规 范遵从一致的 命名规范,这 一点是非常重要的。这样 作的一个明 显好处就是容 易维护。命
20、名 规范帮助防 止命名冲突 ,并提高了升 级安装的成功率。3.1 Package 开发 类 ZAANN AA 模块区分NN 连续号名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 12 页 - - - - - - - - - ABAP 编码规范机密 Confidential 第 8 页 共 12 页3.2 传输请求号描述3.3 SAP 程序对象3.3.1 程 序程序名称和开发功能说明书的名称、技术说明书的名称保持一致。程序类别R:管理报告 (Report) 指通过程序开发的
21、管理用报告、报表等,主要从系统中读取相关数据、作简单计算,按固定个实现显示、打印等。F:业务单据 (Fo rm) 业务过程中使用的单据(Form Painter / Smartforms)。B:数据转换 (Data Conversion) 为系统数据交换所设计。I :系统接口 (Interface) 于其他管理信息系统的实时进行数据交换、更新等。E:系统功能增强 (Enhancement) 在系统标准功能的基础上,为实现某种特定的业务功能而开发的程序。Q:SAP 查询(Query )通 过SAP 查询创建的 程序。程序说明开发的程序( Development program)ZRAA_命名以字
22、 Z 开头,第二个字符程序类别,第三、四个字符以功能模块(例: MM 等),以后的就是下划线加描述。( _,C- 描述)1st segment ( C,1): D/C ,D?: 开发 相关 变更 请求,C?:SPRO配置 相 关 变更 请求2nd segment: (C,3): NCR/OCR ,NCR?:项 目实 施变 更请 求,OCR?: 系 统 运维 变更 请求3rd segment (C,2):功能 模块 缩写FI/CO/SD/MM/PP/QM/CA(跨应 用配 置)/BC (Basis配 置)/A U(权限 配置)4th segment (C,n):变 更 简 单描 述变更请求 命名
23、规则:_ _ _ * 不同 segment 间 必须用”_”分隔例如 :C_NCR_FI_ 成 本中心配置D_OCR_MM_ 库存报表修改名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 12 页 - - - - - - - - - ABAP 编码规范机密 Confidential 第 9 页 共 12 页例: ZFIR_INVOICE_CLEAR 子程序(Includes programs)如是单个主程序的子程序,子程序名称等同与母程序的名称并在后面加 _in_(in-
24、固定, NN- 表示数字) ZFIR_INVOICE_CLEAR _IN_ ;如是多个主程序共用子程序,则按ZINC_来命名,其中 ZINC_ 是固定的, 是 描述功能函数( Function Module)ZAA_ , Where C-desc;第二、三个字符以功能模块(例: MM 等),以后是下划线加描述,按功能来决定所属函数组函数组( Module pools)ZAA_ , Where C = description;第二、三个字符以功能模块(例: MM 等),以后是下划线加描述,按 功能来区分 函数组3.3.2 事 务代码 ZAANNN AA 模块区分NNN 连续号(和开发说明书的开发
25、记录号对应上)3.3.3Message Class 应用区域 ZAANN AA 模块区分NN 连续号3.3.4程序内的数据的声明描述前缀例子子程序 (FORM) FRM_, Where C = description FRM_GET_DATA 内表( Internal table)IT_, Where C = description IT_DATA 工作区( Work area )WA_, Where C = description WA_HEADER 常量( Constant )C_, Where C = description C_NAME 全局变量 (Global variable) G
26、_, Where C = description G_MENGE 区间选( Select option)S_, Where C = description S_MATNR 单项输入( Parameters )P_, Where C = description P_WERKS 单选( Parameter radio button)RB_, Where C = description RB_ALV 复选 (Parameter checkbox) CB_, Where C = description CB_LIST 区间( Range)R_, Where C = description R_WERK
27、S 动态变量( Field Symbols)fs_ Where C = description FS_TEXT FORM 中的变量 PR pr_ Where C = description PR_MENGE FORM 中的常量 /PV pv_ Where C = description PV_MENGE 3.4数据字典对象的描述 必须清楚明了名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 12 页 - - - - - - - - - ABAP 编码规范机密 Confide
28、ntial 第 10 页 共 12 页对象前缀及说明例子透明表 (Transparent Table) ZTAA AA = 模块, = 描述ZTMMHT 视图( View)ZH H = 视图类型, = 描述视图类型:D - Database View 数据库视图P - Projection View 射影视图M - Maintenance View 更新视图H - Help View 帮助视图ZHMATNR 索引 (Index) ZNN , NN = 连续号Z01 数据元素 (Data Element) Z , = 字段名称ZHETONG 域(Domain) Z , = 数据元素名称ZHETO
29、NG 结构 (Structure ) ZS , = 描述ZSHETONG APPEND STRUCTURE ZZ , = 表名ZZEKKO Table Type Z , = 描述ZXYZ Type Group ZG , = 描述ZGXYZ 锁对象( Lock Objects)E , = 表名如无特殊需求, 一个表定义一个锁对象。EZTMMHT 搜索帮助( Search help)ZSH , = 描述ZSHHETONG 3.5打印格式对象的描述必须清楚明了对象前缀例子页格式Z_NN_MM OR Y_NN_MMZ = 纵向, Y = 横向NN = 宽度, MM = 高度Z_20_12 格式类型Z_
30、NN_MM OR Y_NN_MMZ = 纵向, Y = 横向NN = 宽度, MM = 高度Z_20_12 设备类型格式Z_NN_MM OR Y_NN_MMZ = 纵向, Y = 横向NN = 宽度, MM = 高度Z_20_12 3.6其他对象对象的描述必须清楚明了对象前缀例子名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 12 页 - - - - - - - - - ABAP 编码规范机密 Confidential 第 11 页 共 12 页表格( Form)ZAA
31、_ , AA = 模块, = 描述ZSD_BILLING 智能表( SmartForms )ZAA_ , AA = 模块, = 描述ZMM_PO_PRINT 4 程序性 能4.1SQL语句4.1.1SELECT 语句在最开 始先把处理数 据通过SELECT 语句保 存到内部表 ,然后对该内 部表的各纪录 。不使用 嵌套的SELECT 语句。所有的key 项目都可 以指定的情 况不要使用SELECT 语句 ,而是使用SELECT SINGLE语句。不使用SELECT * 、 SELECT SINGLE *。在WHERE 语句的条件指定key 项目的时候 ,必须按照 在字典设定 的顺序(事务代码
32、SE11) 。按照索 引的顺序确定 WHERE 语句的条件的顺序。在WHERE 语句列记多个key项目以外的条 件的时候情 况,要先写 多个的纪录被 排除的条件。使用了LIKE, NOT, 的WHERE 语句 因为性能差 ,所以请尽 可能避免使用 。从单一 的表向内部表 插入数据的 时候,不使 用SELECT ENDSELECT.语句。对簇表 表进行SELECT 的时候, 仅把key 项 目的条件写在WHERE 语 句,剩下的条件使用CHECK 语 句对数据所 小范围。求最高 值、最低值、 合计、平均 的时候,使用 MAX 、 MIN 、SUN 、 AVG 函数 。Inner Join 和 O
33、uter Join 的 使用,需考虑业务的实际 情况。使用 FOR ALL ENTRIES 需要 考虑参考内表的记录数是 否为空。4.1.2 数 据库 更新要对表 的项目一起更 新的时候, 使用SET句会提高 性能。但需 要一个一个地 进行Error 处理的情况, 不使用这个 方法。要根据 内部表的数据 一并更新表 的时候,使 用UPDATE USING TABLE 会提高性能 。但需要一 个一个地进行 Error 处理 的情况,不使 用这个方法。使用MODIFY 更新 数据库时, 需特别注意原 数据的完整 性和可否覆盖 。要根据 内部表的数据 一并插入更 新表的时候 ,使用INSERT FR
34、OM TABLE 会提高性能 。但需要一 个一个地进行 Error 处理 的情况,不使 用这个方法。只是查 看数据库不用 锁定表数据 ,如需修改 ,则必须在提 前数据前做 锁定处理,更新数据库后做 解锁处理。4.2内部表 (Internal Table ) 避免把 大量的数据保 存到内部表 。但比起按 一个一个纪录 从表读取数 据处理,把所有对象纪录先 保存到内部 表,然后对该 内部表进 行处理性能更 好,所以在 考虑数据量 和性能的基础 上,决定是 否在内部表保存数据。进行内 部表的复制的 时候,使用 APPEND LINES OF命令。名师资料总结 - - -精品资料欢迎下载 - - -
35、- - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 12 页 - - - - - - - - - ABAP 编码规范机密 Confidential 第 12 页 共 12 页通过特 定的条件对内 部表loop的时候 使用W HERE 语句,不 使用CHECK 命令。数据不 需要为唯一的 情况,或数 据的性质上 ,没有发生重 复entry 的可能性的情况 ,不使用COLLECT , 使用INSERT。更新内 部表的项目的 时候,使用 MODIFY 命 令。内部表 多个行一起删 除的时候, 使用DELETE . WHERE命 令。
36、进行排 序的时候,项 目必须指定 。(如果不 指定的话,所 有的项目都 执行排序,性能不好)。通过使 用MOVE-CORRESPONDING,对于各个字 段使用MOVE 语句处理会快些。特别 是项目数多 的表,使用MOVE 语句效果 比较好。对不需 做特别处理的 内表的Head Line,结构,变量做Clear ,;不再使 用的大的内表做Free 释放内存; 对重复使用到 的内表做REFRESH 。READ TABLE 时尽量 使用BINARY SEARCH ,需先对内 表做排序。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 12 页 - - - - - - - - -