ABAP 对象中的命名规则
前言
在 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_CODE
,CL_GENERAL_LEDGER_ACCOUNT
。名称应该描述动作,而不是动作的实现
例如,PRINT_RECTANGLE
,而不是RECTANGLE_TO_SPOOL
对象类型的约定
在命名空间之后,使用 CL
、IF
或 CX
。类的名称应该是一个名词,并描述它维护的对象。如果可能,尽量不要使用缩写。我们将主要保留这些类的类型。例如,实用程序类以 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-DATA 或 DATA )时,请避免在名称开头使用动词(以避免与方法名称冲突)。例如:LINE_COUNT , MARK_PRINTED , MARK_CHANGED , STATUS |
数据定义(常数)(推荐) | CO_<constant name> ,例如:CO_MAX_LINE , CO_DEFAULT_STATUS , CO_DEFAULT_WIDTH , CO_MAX_ROWS |
具体方法描述
方法应该描述一个动作,正在发生的事情。它通常包含一个动词(或应始终包含一个动词)。GET
和 SET
方法访问私有成员属性,而 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 来表示 false 和 true 。 |
检查方法 | 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 |
如果系统返回意外错误消息,则会设置此异常。 |
- 点赞
- 收藏
- 关注作者
评论(0)