ABAP 对象中的命名规则

举报
雨绸缪 发表于 2023/07/31 17:02:21 2023/07/31
【摘要】 前言在 SAP 中进行开发,一个不得不面对的现实就是数据字段和 SAP 对象不利用理解,因为所有这些对象最初都是用德语创建的,因此许多缩写在英语中没有任何意义。举个例子:VTWEG - Vertriebsweg 分销渠道KUNAG - Kunde Auftraggeber 客户VKORG - Verkaufsorganisation 销售组织LIFNR - Lieferant 供应商在类生...

前言

在 SAP 中进行开发,一个不得不面对的现实就是数据字段和 SAP 对象不利用理解,因为所有这些对象最初都是用德语创建的,因此许多缩写在英语中没有任何意义。举个例子:

  • VTWEG - Vertriebsweg 分销渠道
  • KUNAG - Kunde Auftraggeber 客户
  • VKORG - Verkaufsorganisation 销售组织
  • LIFNR - Lieferant 供应商

在类生成器中创建的全局类和接口被存储在类库中,并由版本库管理。它们与所有其他版本库对象(数据库表、结构、数据元素等)属于同一个命名空间。因此,有必要为对象类型及其组件制定命名规则,并在程序开发中统一使用。

通用规则:

  • 变量名可以使用字符、数字和 _
  • 用于变量状态和对象类型的两个字符
  • 局部变量以 L 开头(Local)
  • 全局变量以 G 开头(Global)
  • 函数输入参数以 I 开头(Import)
  • 函数输出参数以 E(Export)开头
  • 结构符号为 S(Structure)
  • 表符号为 T(Table)

全局变量示例:

data: gv_temp type string.
data: gs_temp type sy.
data: gt_temp type table of sy.

局部变量示例:

data: lv_temp type string.
data: ls_temp type sy.
data: lt_temp type table of sy.

组件的命名空间

一个命名空间是由以下方面共享的:

  • 类本身的所有组件(属性、方法、事件、构造函数、接口、类中的内部数据类型和别名)。
  • 该类的超类的所有公共和保护组件。

方法的实现使用一个局部命名空间。本地变量的名称可以掩盖类组件的名称。

当你为开发对象选择名称时:

  • 使用英文名称

  • 尽可能使用词汇表中的术语
    例如,用 CL_COMPANY_CODE 而不是 BUKRS

  • 在复合名称中,使用下划线字符(_)作为分隔符。由于名称不区分大小写,这是唯一可以用来分隔名称的字符。
    例如,CL_COMPANY_CODECL_GENERAL_LEDGER_ACCOUNT

  • 名称应该描述动作,而不是动作的实现
    例如,PRINT_RECTANGLE,而不是 RECTANGLE_TO_SPOOL

对象类型的约定

在命名空间之后,使用 CLIFCX。类的名称应该是一个名词,并描述它维护的对象。如果可能,尽量不要使用缩写。我们将主要保留这些类的类型。例如,实用程序类以 UTIL 结尾,服务类以 SRV 结尾。

类库中的类和接口名称与数据元素、表、结构和类型属于同一个命名空间。它们被集中在表 TADIR 中维护。

类定义 CL_<class name> 类名应该由单数名词组成,例如:CL_COMPANY_CODE, CL_GENERAL_LEDGER_ACCOUNT
接口定义 IF_<interface name> 与类的命名约定相同,例如:IF_STATUS_MANAGEMANT, IF_CHECKER
程序中的本地类 LCL_<class name> 类名应该由单数名词组成,例如 LCL_TREE_MANAGEMENT
程序中的本地接口 LIF_<interface name> 与类一样, 例如 LIF_PRINTER

组件/方法的约定

方法名 <method name>方法名称应以动词开头: GET_STATUS, CREATE_ORDER, DETERMINE_PRICE
事件 <event name> 事件名称应采用 <名词>_<动分> 结构,例如: BUTTON_PUSHED, COMPANY_CODE_CHANGED, BUSINESS_PARTNER_PRINTED
类中的局部类型定义 TY_<type name>,例如:TY_INTERNAL_TYPE, TY_TREE_LIST
数据定义(变量) <variable name> 当您命名类中的变量( CLASS-DATADATA)时,请避免在名称开头使用动词(以避免与方法名称冲突)。例如:LINE_COUNT, MARK_PRINTED, MARK_CHANGED, STATUS
数据定义(常数)(推荐) CO_<constant name>,例如:CO_MAX_LINE, CO_DEFAULT_STATUS, CO_DEFAULT_WIDTH, CO_MAX_ROWS

具体方法描述

方法应该描述一个动作,正在发生的事情。它通常包含一个动词(或应始终包含一个动词)。GETSET 方法访问私有成员属性,而 READ 应仅用于从数据库层中选择数据。如果某个方法返回布尔值,则以 IS/ARE 启动该方法

属性访问 SET_<attribute name>, GET_<attribute name> 访问任何类型的属性的方法都应具有前缀 GET_SET_。例如:GET_STATUS, SET_USE_COUNT
事件处理程序方法 ON_<event name> 处理事件的方法应以 ON 开头,后跟它们处理的事件的名称。例如:ON_BUTTON_PUSHED, ON_BUSINESS_PARTNER_PRINTED
执行类型转换的方法 AS_<new type> ,例如:AS_STRING, AS_ISOCODE
返回布尔值的方法 IS_<adjective>,例如:IS_OPEN, IS_EMPTY, IS_ACTIVE 这些方法可能不会返回任何异常。注意:使用 SPACE 和 X 来表示 falsetrue
检查方法 CHECK_<objective>,例如:CHECK_AUTHORIZATION, CHECK_PROCESS_DATE

例如:

IF is_flight_scheduled( iv_connid = iv_connid 
                        iv_carrid = iv_carrid 
                        iv_fldate = sy-date 
                      ).
"Create new flight 
ENDIF.

方法中的局部约定

对于参数,这些参数是从实现它们的方法的角度来看待的:

类型 约定
导入参数 IM_<parameter name>
导出参数 EX_<parameter name>
CHANGING 正在更改参数 CH_<parameter name>
RESULT 结果参数 RE_<result>

使用前缀并不是强制性的,但如果你决定使用前缀,请只使用上面列出的那些。

异常的命名规定

下表包含了一系列可能的异常名称,这些名称也可以通用(例如,NOT_FOUND 也可以作为DATE_NOT_FOUND 使用)。

异常 含义
ACTION_NOT_SUPPORTED 不支持请求的操作或功能代码。
CANCELLED 如果方法使用对话框来找出必须执行的操作(例如,选择列表)并且用户选择“取消”,则可以设置此异常。
EXISTING 您要创建的新对象已存在于数据库中。
FAILED 由于当前环境,该方法无法执行。此异常适用于由于系统环境变化而无法执行该方法的情况。
..._FAILED 由于当前环境,部分方法无法完成。 (OPEN_FAILED, CLOSE_FAILED, SELECTION_FAILED, AUTHORIZATION_FAILED)
FOREIGN_LOCK 数据已被其他用户锁定。
INCONSISTENT 数据库中的对象数据不一致。
..._INCONSISTENT 数据库中某个对象的…的组件数据不一致。
INVALID 输入的对象数据不正确(例如公司代码不存在)。 Compare NOT_QUALIFIED.
..._INVALID 为对象输入的组件数据不正确。 Compare NOT_QUALIFIED
INTERNAL_ERROR 仅当您无法更准确地了解错误的性质时才使用此异常。
NOT_AUTHORIZED 用户没有获得的授权。
NOT_CUSTOMIZED 请求的对象未正确自定义。
..._NOT_CUSTOMIZED 所请求对象的组件……未正确定制。
NOT_FOUND 无法找到请求的对象。
..._NOT_FOUND 无法找到所请求对象的组件…。
NOT_QUALIFIED 输入参数的组合不足以运行该方法。 Compare INVALID.
..._NOT_QUALIFIED 该方法的一个参数没有被限定。
NUMBER_ERROR 分配号码时出错
SYSTEM_ERROR 如果系统返回意外错误消息,则会设置此异常。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。