《2022年SAP开发规范 .pdf》由会员分享,可在线阅读,更多相关《2022年SAP开发规范 .pdf(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、ABAP 开发规范1/19 目录目录 . 1SAP开发规范 . 31说明 . 31.1内容说明 . 31.2规范目的 . 31.3使用说明 . 31.4使用对象 . 32一般规则 . 33代码管理 . 43.1程序标题 . 43.2子程序、模块标题 . 53.3编辑器设置 . 53.4代码格式 . 73.4.1使用规范化打印机 . 73.4.2查询SQL语句的写法 . 73.5变更记录管理 . 73.6代码注释 . 83.7子程序与函数模块 . 93.8其它注意事项 . 94数据库查询 . 94.1不要在 LOOP循环中使用SELECT语句 . 94.2取数的时候不能使用SELECTENDSE
2、LECT语句循环操作. 94.3尽量多使用内表 . 94.4SELECT 与 SELECT*比较 . 104.5外部检查 . 104.6SELECT SINGLE语句使用注意 . 104.7SELECT 语句中排序与 ABAP语句中排序比较 . 104.8SELECT DISTINCT语句使用 . 114.9批量更新数据库表 . 114.10FOR ALL ENTRIES 语句 . 114.11OPEN SQL与 NATIVE SQL比较 . 124.12表连接 . 125内表使用注意. 125.1内表定义 . 125.2内表使用 . 125.2.1修改内表中的字段值 . 12名师资料总结 -
3、 - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 19 页 - - - - - - - - - ABAP 开发规范2/19 5.2.2把一个内表附加到另一个内表后面 . 125.2.3删除内表中重复行 . 135.2.4根据条件删除内表中的行 . 135.2.5内表是否为空的判断 . 135.2.6读取内表行 . 135.2.7通过LOOP AT it_tab ASSIGNING 循环内表. 145.2.8通过平行光标来连接两个内表 . 145.2.9释放内表 . 156数据字典对象. 1
4、56.1建表规则 . 156.2创建数据元素 / 域的基本规则 . 166.3添加客户化字段到SAP表中 . 166.4索引维护 . 167文件处理 . 168SMART FORM. 179权限 . 1710其它注意事项. 1710.1消息类使用 . 1710.2子程序参数传递 . 1710.3局部变量与全局变量的使用比较. 1811代码检查 . 1912ABAP性能例子 . 19名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 19 页 - - - - - - - - -
5、 ABAP 开发规范3/19 SAP 开发规范1说明1.1 内容说明开发规范总的包含了以下三方面的内容SAP 开发规范,即本文档,主要内容为:说明开发中要注意的事项代码编写的规范开发中要遵循的规则性能有关的例子SAP 开发命名规范 ,主要为开发过程中涉及的命名规则涉及开发中的命名,统一命名规则,方便程序的沟通、阅读1.2 规范目的提高 SAP 项目中开发的效率、质量,实现标准化管理1.3 使用说明在客户有开发规范的情况下,请按照客户的开发规范进行开发如客户未有现成的开发规范,请按照公司的开发规范进行开发请确保在开发的时候遵循了以下规则,如模糊不清时, 请及时重新查阅。如有冲突的地方,请与项目上
6、的开发负责人进行确认1.4 使用对象任何在 SAP 系统进行开发的人员初学 ABAP 开发者2一般规则以下为开发过程必须遵守的一般规则,请遵守。请严格按照SAP 开发命名规范进行相关命名请遵循 SAP 项目管理流程来进行开发及开发管理在开发完成后,在开发系统中清除不需要的对象不可随便修改SAP 源代码,除非是客户化字段、用户出口等若确实需修改SAP 源代码,请与技术负责人确认,并进行严格记录、测试在程序中不要遗留下没有使用的变量,可以使用”Extended Program Check”进行检查当有文本输出时,通过维护文本符号来实现。使用文本符号方便翻译使用常数来代替固定数值或固定字符常数必须定
7、义为全局的。优点:可重复使用,只需修改一个地方请不要在代码中对组织架构(公司代码、工厂、采购组织等)的数据赋予固定值,组织架构的值可通过参数(Parameter) 、选择范围(Select-options) 、变式等方式来传值不要使用 TABLES 语句定义的数据结构,使用专门定义的工作区名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 19 页 - - - - - - - - - ABAP 开发规范4/19 TABLES 语句只用于Select-options 需要的时候
8、尽可能不要使用MOVE-CORRESPONDING语句,因为比较耗时在 SQL 语句执行完成后、内表操作语句执行完成、调用完函数等之后,检查返回码sy-subrc 的值,并做判断处理一般情况下为一个程序创建一个对应的请求,以防传输时混乱慎用 ABAP 中的宏,因为宏不易维护且不可调试所有的开发的程序必须分配对应的事务代码,从而可避免给用户分配SA38 或 SE38 的权限原则上一个程序的代码不能超过2000 行,超过2000 行请使用include program 确保可读性3代码管理在创建一般报表时,请拷贝报表模板程序,并在模板程序的基础上进行代码编写。模板程序主要包括了程序标题格式、事件关
9、键字等内容。方便程序编写并统一规范。3.1 程序标题每个程序标题必须包括了程序名称、程序名、开发日期、开发者、概要、变更记录(日期、变更者、传输请求号、修正内容)。请参考以下例子:例子*-* 程序名称:程序名称* 程序名: ZZZ*_* * 开发日期: 2012/MM/DD * 创建者:张三* 申请者:李四*-* *概要 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX * XXXXXXXXXXXXXXXXXXXXXXXX *-* *变更记录* 2012/ins-day By 张三 (Hand) DEVK90000 * Descriptio
10、n: * 1.初始开发* * 2012/ins-day By 张三 (Yahua) DEVK90010 * Description: * 1.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX * 2.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX * *-* REPORT ZZZ*_* NO STANDARD PAGE HEADING 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 19 页 - - - - - - - -
11、 - ABAP 开发规范5/19 LINE-SIZE 255 LINE-COUNT 65. 注意:请将可能详细的维护好程序标题。3.2 子程序、模块标题在子程序定义前面必须进行注释说明。说明内容包含:包括子程序名称、子程序功能描述、参数功能等。模块与子程序类似。子程序例子*-* * Form GET_COMPANY_CODE_DESCRIPTION * *-* * 通过传入的公司代码,得到公司代码描述* *-* * 传入参数: fu_bukrs 为公司代码*-* FORM get_company_code_description USING fu_bukrs CHANGING fu_butxt
12、. 模块例子*-* * MODULE SET_PFSTATUS OUTPUT * *-* * 设置屏幕 100 的 GUI 状态* *-* MODULE SET_PFSTATUS OUTPUT. 注意:请将可能详细的维护子程序、模块的标题信息。另:原则上一个FORM 的长度不能超过300 行,如果超过300 行,请尽量拆分为多个FORM ,确保程序的可读性。如:要从10 个表中取数,我们可以将其拆分为多个FORM ,其中取文本表的单独一个FORM ,当从某个表取字段过多( 或者取出即有部分处理逻辑) 时,我们甚至可以将其单独一个 FORM 。3.3 编辑器设置为了使原代码更易于解读,规定对编辑
13、器进行设置。设置路径为: SE38-实用程序 (U)- 设置 (E) 编辑器:设置使用新的编辑器、每行最长72 个字符长(注:抓图为ECC6.0 例子,其它版本请以实际为主)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 19 页 - - - - - - - - - ABAP 开发规范6/19 “规范化打印机(pretty print ) ”设置:缩进、关键字大写名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -
14、- 名师精心整理 - - - - - - - 第 6 页,共 19 页 - - - - - - - - - ABAP 开发规范7/19 3.4 代码格式3.4.1使用规范化打印机要求在代码编写完成后,点来格式化代码,使代码自动缩进、关键字大写等,在编写代码过程中使用该按钮,也有助于发现输入错误的语句。注意:如果规范化打印机不可用,则手工的调整代码,使代码结构化。3.4.2查询 SQL 语句的写法Open SQL 请按如下格式对齐,有助于阅读和查看SELECT field1 “ xxxfield2 “ xxxINTO TABLE it_mara FROM MARA WERE matnr =wa_
15、tab-matnr. SELECT,INTO,FROM等缩进两空格WHERE 缩进一空格字段 field1,field2 每个都进行换行, 并在字段名后注释其意义3.5 变更记录管理当程序传到生产机之后,开始进行变更管理。变更管理开始后,进行程序的修改时要注意以下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 19 页 - - - - - - - - - ABAP 开发规范8/19 在程序的开始处的变更记录上记录以下内容日期修改者传输请求号修改内容及原因例子*-* *变
16、更记录* 2012/ins-day By 张三 (Hand) DEVK90000 * Description: * 1.初始开发* * 2012/ins-day By 张三 (Yahua) DEVK90010 * Description: * 1.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX * 2.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX * *-* 在修改的程序代码处,要通过类似如下注释包括起修改的内容*2012/01/08 张三 规格变更Chg 修改开始* 修改原因 : * *2012/01/08张三 规格变更Chg 修改结束例
17、子 1 *2012/01/08张三 规格变更Ins 修改开始* 修改原因 : * *2012/01/08张三 规格变更Ins 修改结束例子 2 *2012/01/08张三 规格变更Del 修改开始* 修改原因 : * *2012/01/08张三 规格变更Del 修改结束修改标识意义Ins 新增Chg 修改Del 删除注意:在删除代码时,只是注释,不要实际物理的删除代码。3.6 代码注释数据声明和程序的逻辑部分必须要有注释,逻辑部分的注释尽量控制在整个程序代码的10%20%左右。特殊的标记字段要在注释中说明其用法名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
18、 - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 19 页 - - - - - - - - - ABAP 开发规范9/19 根据项目语言使用情况选择用中文或英文进代码注释和文档说明在初次提交的代码中不要保留初注释掉的代码行在涉外的开发项目中,注释和说明要用英文3.7 子程序与函数模块程序中的代码要尽量实现模块化,即如果程序中多个地方将会用到相同的代码,那么将这些代码封装在子程序中,以便可以随时调用,同时也增加了程序的可读性和可维护性当相同的功能的代码可以被多个程序使用时,最好定义成函数模块避免调用外部程序中的子程序3.8 其它注意事项在每一个程序行中,最多
19、只有一个语句,避免一条程序行中包含多条语句的写法。4数据库查询在使用 SELECT 语句中,尽可能把握以下几个原则:尽可能的在Where 条件中包含多的索引字段作为条件Where 条件中的索引字段按表中的索引顺序排列尽可能的在Where 条件中包含多的条件,即使字段不是索引的4.1 不要在 Loop循环中使用 Select语句在循环中使用Select 语句将会频繁的访问表,尽量减少数据库访问的操作。以下语句是不建议的。LOOP AT it_tab INTO wa_tab. SELECT * FROM MARA INTO TABLE it_mara WERE matnr =wa_tab-matn
20、r. ENDLOOP. 4.2 取数的时候不能使用Select E ndselect语句循环操作例:错误正确SELECT * FROM dbtab MOVE-CORRESPONDING dbtab TO it_ab APPEND it_tab ENDSELECT.SELECT * FROM dbtab INTO TABLE itab. 注意:必须避免嵌套的Select,因为每条记录将连接一次数据库。4.3 尽量多使用内表为了提高程序的性能,通常先把数据库表中的数据取到内表中,在内表进行数据处理。减少重复访问相同数据表的情况。例:(错误 ) (正确 ) 名师资料总结 - - -精品资料欢迎下载
21、- - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 19 页 - - - - - - - - - ABAP 开发规范10/19 4.4 Select 与 Select*比较尽可能使用SELECT 来代替SELECT * ,减少数据传输量,当数据量大时, 前者速度会明显更快。例:不建议写法建议写法SELECT * FROM dbtab INTO TABLE it_tab WHERE . SELECT field1 field2 FROM dbtab INTO TABLE it_tab WHERE . 仅用于某种特殊情况
22、时,如表的字段数很少或数据记录不多当表中包含的大量字段时使用 Select 虽然会增加代码的工作量,但会减少内存的使用及网络的负担4.5 外部检查尽可能避免使用Select COUNT (*) 来确认表存在的记录数,因为该语句将会对表进行全扫描。4.6 Select single 语句使用注意当使用 Select Single 时,要求在where 条件语句中包含所有的关键字当不能确定所有关键字而能确定只有一条记录匹配时,可使用 Select . up to 1 rows来查询4.7 Select 语句中排序与 ABAP 语句中排序比较对数据排序有两种方式:一种为在数据库服务器中排序;一种为在
23、应用服务器中排序。不建议写法建议写法SELECT field1 field2 FROM dbtab INTO TABLE it_tab WHERE. ORDER BY field1. SELECT field1 field2 FROM dbtab INTO TABLE it_tab WHERE . SORT it_tab BY field1. 处理 A 处理 B 处理 C 处理 A 处理 B 处理 C 内表数据库数据库I/O 程序流名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10
24、 页,共 19 页 - - - - - - - - - ABAP 开发规范11/19 应用服务器排序更快4.8 Select distinct语句使用不建议写法建议写法SELECT DISTINCT field FROM dbtab INTO TABLE it_tab WHERE. SELECT field FROM dbtab INTO TABLE it_tab WHERE . SORT it_tab BY field1. DELETE ADJACENT DUPLICATES FROM it_tab COMPARING field. 需要在数据库服务器进行排序,且会影响整个系统性能如果没有合
25、适的索引使用 DISTINCT 语句时,数据库服务器经常不访问缓存.尽可能避免在SELECT 语句中使用GROUP BY, ORDER BY , DISTINCT 等功能。4.9 批量更新数据库表在更新数据库数据时,可以一条一条记录的更新,也可批量的更新多条记录。当更新记录数较多时,请采用批量更新的方式,有助于性能的提高。不建议写法建议写法LOOP AT it_tab INTO wa_tab. UPDATE dbtab SET field01 = wa_tab-field01 WHERE field2 = wa_tab-field2. ENDLOOP.LOOP AT it_tab INTO w
26、a_tab. ENDLOOP. UPDATE dbtab FROM TABLE it_tab. 执行完成更新语句后,会有两个比较有用的系统变量值返回:SY-SUBRC 为 0 时则所有记录都成功更新。SY-DBCNT 该值为成功更新的记录数。4.10 For All Entries 语句说明: For All Entries 后紧跟的内表称为驱动内表。在使用该语句时,驱动内表不能为空,若为空,则等价于无此条件,可能造成全表的检索。所以, 在使用 For All Entries 时,要先对驱动内表是否为空进行判断在使用该语句前, 尽可能保持少的驱动内表条目数,尽可能使驱动内表中的条目为唯一的(可
27、先进行删除重复行等操作)。这样可避免在数据库中进行了不必要的读取避免使用该语句读取小的数据库表(如配置表), 对于小的数据库表使用单独的SELECT语句将会更好使用该语句时, 尽可能的连接数据库表中的索引,否则将会重复的全表扫描,并注意按数据库表中的索引顺序来写Where 语句名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 19 页 - - - - - - - - - ABAP 开发规范12/19 驱动内表与INTO 后的内表不可以是同一个内表4.11 Open SQL
28、 与 Native SQL 比较开发人员不准使用Native SQL ,如果非得使用,请与项目组技术负责人确认。4.12 表连接表连接取数是在数据库服务器里进行的,可以减少数据在网络上的传输。但是有一个缺点是表连接不使用应用服务器的缓存。例子SELECT vbakauart vbapmatnr INTO TABLE it_tab FROM vbak AS vbak INNER JOIN vbap AS vbap ON vbakvbeln = vbapvbeln WHERE vbeln IN s_vbeln. vbak 为主表vbap 为副表在 where 条件中必须有主表的关键字或索引在 wh
29、ere 条件中尽可能的指定跟主表有关的条件在某种情况下可以考虑建立对应的视图来代替表连接的使用5内表使用注意5.1 内表定义在定义内表时,建议先定义对应的类型,再定义内表。TYPES: BEGIN OF ty_company, bukrs TYPE t001t-bukrs, “ 公司代码txtna TYPE t001t-txtna, “ 公司代码描述END OF ty_company. DATA: it_company TYPE STANDARD TABLE OF ty_company, wa_company TYPE ty_company. 注意:请避免使用带表头的内表,SAP 将会废弃此荐
30、功能,目前在面向对象编程中不支持带表头的内表。5.2 内表使用5.2.1修改内表中的字段值使用 MODIFY it_tab TRANSPORTING field . WHERE 将可加快修改内表记录集的速度。特别是在内表行中有嵌套内表时,该写法将可明显增加速度。通过 LOOP 处理来修改所有的组件内表的大量修改必须通过在LOOP 循环中来实现5.2.2把一个内表附加到另一个内表后面例:说明:内表it_tab01 和内表it_tab02 有相同的行结构且包含一定的记录集。错误写法正确写法LOOP AT it_tab01 INTO wa_tab. APPEND LINES OF it_tab01
31、TO it_tab02. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 19 页 - - - - - - - - - ABAP 开发规范13/19 APPEND wa_tab TO it_tab02. ENDLOOP. 通过 LOOP 循环实现内表的附加通过 APPEND LINES OF语句批量附加内表5.2.3删除内表中重复行先对一个内表按删除时比较的字段进行排序,再通过以下语句删除重复行。DELETE ADJACENT DUPLICATES FROM it_ta
32、b COMPARING field. 5.2.4根据条件删除内表中的行错误写法正确写法LOOP AT it_tab INTO wa_tab. IF wa_tab-filed = value. DELETE it_tab INDEX sy-tabix. ENDIF. ENDLOOP. DELETE it_tab WHERE filed = value. 通过 LOOP 循环进行删除通过 WHERE 语句进行删除5.2.5内表是否为空的判断错误写法正确写法DESCRIBE TABLE it_tab LINES l_lines. IF l_lines = 0. * 内表为空ENDIF. IF it_
33、tab IS INITIAL. * 内表为空ENDIF. 5.2.6读取内表行关键字读取READ TABLE it_tab INTO wa_tab WITH KEY field = value. 关键字二分搜索读取READ TABLE it_tab INTO wa_tab WITH KEY field = value BINARY SEARCH. 索引读取R EAD TABLE it_tab INTO wa_tab WITH KEY field = value INDEX l_index. *注意:在使用二分搜索读取内表时,要先按关键字对内表进行排序性能比较:类型性能比较索引读取最快关键字二分
34、搜索读取较快关键字读取慢使用原则:当可以通过指定索引读取内表时,用指定索引读取如若不能,则通过二分搜索进行读取例:不建议写法LOOP AT it_tab01 INTO wa_tab01. READ TABLE it_tab02 INTO wa_tab02 WITH KEY field = wa_tab01-field. CHECK sy-subrc = 0. ENDLOOP.通过内表关键字来连接两个表名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 19 页 - - -
35、- - - - - - ABAP 开发规范14/19 建议写法SORT it_tab02 BY field. LOOP AT it_tab01 INTO wa_tab01. READ TABLE it_tab02 INTO wa_tab02 WITH KEY field = wa_tab01-field BINARY SEARCH. CHECK sy-subrc = 0. ENDLOOP.通过使用关键字二分搜索来连接两个表要对内表it_tab02 先按字段field 进行排序5.2.7通过 LOOP AT it_tab ASSIGNING 循环内表由于字符变量指向内存地址,此种方式比LOOP
36、AT it_tab INTO wa_tab方式快适合于数据量大、需要循环处理的内表在 READ 语句中也可以使用类似的字符变量。注意:使用此种方式请确保对字符变量有充分理解在此种方式的内表循环中,不要再使用ASSIGN 语句给 指定其它的值通过此种方式修改内表行的数据时,不要使用MODIFY语句5.2.8通过平行光标来连接两个内表方法一:建议写法SORT it_tab01 BY field. SORT it_tab02 BY field. l_index = 1. LOOP AT it_tab01 INTO wa_tab01. READ TABLE it_tab02 INTO wa_tab02
37、 INDEX l_index. CHECK sy-subrc = 0. IF wa_tab02-field = wa_tab01-field. l_index = l_index + 1. ENDIF. ENDLOOP.要先对内表it_tab01 和 it_tab02 按字段 field 进行排序当两个内表条目数很大时,如上十万、百万,使用此种方法将会极大的增加程序性能方法二:不建议写法SORT it_tab01 BY field. SORT it_tab02 BY field. LOOP AT it_tab01 INTO wa_tab01. LOOP AT it_tab02 INTO wa_
38、tab02 WHERE field = wa_tab01-field. .ENDLOOP.ENDLOOP.通过 loop 循环中的 where 条件来进行连接,当内表条目数很大时,速度将会很慢,因为第二个 loop 循环相当于在全表扫描的查找内表it_tab02 建议写法名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 19 页 - - - - - - - - - ABAP 开发规范15/19 SORT it_tab01 BY field. SORT it_tab02 B
39、Y field. LOOP AT it_tab01 INTO wa_tab01. CLEAR l_tabix. READ TABLE it_tab02 INTO wa_tab02 WITH KEY field = wa_tab-field BINARY SEARCH. CHECK sy-subrc = 0. l_tabix = sy-tabix. LOOP AT it_tab02 FROM l_tabix. IF wa_tab02-field wa_tab01-field. EXIT. ENDIF. ENDLOOP. ENDLOOP.通过使用关键字二分搜索来连接两个表,二分搜索提高了读取的性能
40、通过在 Loop 循环中指定起始索引,减少了对内表的全表扫描要先对内表it_tab02 先按字段field 进行排序5.2.9释放内表当内表的内容不再有用时,使用FREE 语句释放,可以减少程序占用系统的内存。6数据字典对象6.1 建表规则自定义时,在表的描述信息中要描述清楚表包含的内容数据库表一般定义为集团独立的,即第一个字段必须为,MANDT? ,且是参考数据元素,MANDT?可配置数据库表必须定义为集团独立的若创建的数据库表为配置表,数据量少,修改少,经常访问,可在技术设置中对表进行缓存,从而增加访问速度若为应用表,不允许在技术设置中对表进行缓存要求可维护的表必须生成维护视图,并且为每一
41、个维护视图创建对应的一个函数组。好处:避免在后期维护时互相影响、造成出错,也有利于性能提高针对业务独立性高的可维护的单个表,为其创建表格维护程序。对应的函数组名称为Z_MAINTAIN;对应的屏幕号为9000+10*n ( 每个表格维护程序以10 递增,一个维护程序有分两步维护时,屏幕号为9000+10*n, 9001+10*n) ( n 为自然数);对应的维护tcode 为 Z 。针对业务耦合性高的多个表,当需要可维护时,在其之后创建一个维护视图,并针对此维护视图创建表格维护程序。命名方式参照上一步。表中的字段必须使用数据元素表中的字段名必须易懂且有一定的含义,如:CHAR1 作为字段名是不
42、符合规则的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 19 页 - - - - - - - - - ABAP 开发规范16/19 6.2 创建数据元素 /域的基本规则当自定义表中使用到SAP 中的字段时,使用字段对应的数据元素/域当自定义表中的字段名时,使用更有意义的名称(如:用ZZCOMPANY代替 ZCHAR4 )如果自定义的字段参考一个表或一定值的数据集时,创建一个自定义的域来实现不要修改SAP 存在的数据元素/域当新建一个结构时,尽可能的使用存在的数据元素/
43、域。如果数据元素/域不存在,再创建对应的符合命名规范的数据元素/域新建数据元素时,必须维护好数据元素的文本描述,如为多语言系统,需同时进行翻译6.3 添加客户化字段到SAP 表中当往 SAP 表中添加客户化字段时,必须使用“Append structures”。6.4 索引维护创建、修改、删除索引将会增加数据库的负荷,所以,只有在需要时才进行索引的维护。尽可能的使用已存在的索引不建议修改系统原有的索引,而是自行创建索引创建索引会提高查询性能,但也会降低更新性能,所以为了提高查询性能可创建索引如果创建索引的表的条目数预计较多,需要进行更新性能测试在新定义索引前,需要与项目主技术负责人进行确认主键
44、必须定义为唯一的索引只包含需要的字段创建索引或使用索引时,请注意字段的顺序,匹配的字段顺序可取得更好效果在进行索引传输时,注意时间点的选择,一般在系统空闲期进行传输,如中午或下午下班后7文件处理前台文件处理系统提供了类:cl_gui_frontend_services进行相关的前台文件操作,请尽可能使用该类中的方法进行前台文件相关的操作,如:cl_gui_frontend_services=gui_upload用于上载文件cl_gui_frontend_services=gui_download用于下载文件cl_gui_frontend_services=file_delete用于删除文件cl
45、_gui_frontend_services=file_save_dialog文件保存对话框cl_gui_frontend_services=directory_exist判断目录存在性cl_gui_frontend_services=file_exist文件存在判断Excel 文件读取Excel 文件读取请使用函数:ALSM_EXCEL_TO_INTERNAL_TABLE 该函数最多只能读取9999 行和列(由于Table 参数 INTERN 中的行、列均为4 位的 num 类型) 。所以,如果业务需要,可以拷贝该函数组及函数,扩展相关的数据类型。服务器文件处理服务器文件加载:使用OPEN
46、DATASET 语句,如:OPEN DATASET l_filename FOR INPUT IN TEXT MODE ENCODING DEFAULT. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 19 页 - - - - - - - - - ABAP 开发规范17/19 文件读取,使用:READ DATASET l_filename INTO lw_tab. 文件写入,使用:TRANSFER lw_tab TO l_filename LENGTH l_len.
47、请注意在文件操作完成后用CLOSE DATASET l_filename. 结束操作。服务器文件删除:DELETE DA TASET l_filename. 获取文件属性函数:EPS_GET_FILE_ATTRIBUTES 获取文件名: cl_report_viewer=split_path_filename 注意:有前台文件操作的程序不适用于后台作业运行具体例子可参考以下附件: 文件处理程序例子.rtf8Smart Form 在程序中调用Smart Form 时不能直接指定Smart Form 生成的函数名,请注意通过函数“ SSF_FUNCTION_MODULE_NAME”获取生成的函数名
48、定义 Smart Form 的表格接口时,如没有可用的参考结构或表,则新建结构来解决,请不要使用内存传输的方式。因为当有调整字段时,新建结构方法可减少错误建议一个 Smart Form 对应的创建一个样式9权限所有的报表都要根据实际需要进行权限检查在程序 AT SELECTION-SCREEN事件处编写权限检查的代码必须在程序的INITIALIZATION事件处对T-Code 进行权限检查权限检查对象主要为组织架构的值,如:公司代码、工厂、销售组织. 例:INITIALIZATION. AUTHORITY- CHECK OBJECT ,S_TCODE?ID ,TCD? FIELD sy -tc
49、ode. IF sy-subrc 0. RAISE A MESSAGE ENDIF. 10 其它注意事项10.1 消息类使用在程序中尽可能的进行相关的消息提示。消息提示可通过文本符号或消息类中的消息来显示。建议更多的使用消息类。消息类也方便传输参数。10.2 子程序参数传递传输参数时尽可能指定类型,从而有助于语法检查,增加可读性、性能名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 19 页 - - - - - - - - - ABAP 开发规范18/19 传输中的参数如
50、果不需要修改尽可能通过“USING“ 和 “BY V ALUE “声明注意:不要通过“By VALUE ”传输内表(memory consumption) 所有传输的参数要在子程序标题处写明意义及用法,并标明是属于导入还是导出的参数导出的参数要在子程序开始处进行初始化尽可能的不要通过全局变量来隐藏的传输参数,如果全局变量被用于传输参数,在标题处进行说明10.3 局部变量与全局变量的使用比较局部变量全局变量命名以字母L 开头命名以字母G 开头尽可能多使用尽可能少使用变量只在子程序内部使用的,声明为局部变量变量在整个程序使用的,声明为全局变量必须在子程序开始处声明必须在程序开始处声明不要在代码中间