01、在增强里面禁止显式或者隐式提交(ZILOG所在函数如果用在增强里面,不要COMMIT)
02、WAIT、异步RFC,都会触发隐式提交,所以禁止在增强内以及禁止提交的场合使用
03、FOR ALL ENTRIES一定要判断内表是否为空且尽量删除重复,SELECT的字段包含所有KEY,避免DISTINCT导致数据错误
04、READ TABLE尽量使用使用二分法或者SORTED KEY,如果用二分法内表不要忘记升序排序
05、DELETE ADJACENT DUPLICATES一定要先排序
06、禁止使用MESSAGE 'XXXX' TYPE 'S'.尽量使用Z消息类,不建议使用通用消息类
07、IN UPDATE TASK的函数,一定要注意性能,不然容易引起更新堵塞和导致数据更新失败
08、BDC的数值、日期字段先WRITE为字符格式
09、VFOM写的例程,传到生产还得再用程序RV80HGEN激活一下
10、修改数据、更新表,先加锁
11、调用RFC的时候,两个EXCEPTIONS不要忘:system_failure和communication_failure
12、PAI中,OK_CODE赋值给SAVE_OK,然后清空OK_CODE
13、避免全局变量和局部变量同名
14、直接Insert/Update表的时候,要转成内部格式
15、在使用SAP锁的时候,用正确的_scope
16、使用递归子程序的时候,尽量使用传值方式避免错误
17、创建表的时候MANDT不能少
18、如果程序不是特别巨大,不要分成几个INCLUDE程序,运维太烦
19、尽量做到代码简洁明了,重视程序性能
20、DELETE DB和UPDATE DB语句,一定要注意使用WHERE语句的限制条件
21、数据库的增删改尽量放到程序的最后,一起进行,如果是在增强里面,使用UPDATE TASK
22、A类型MESSAGE程序会自动回滚,并退出程序。X类型MESSAGE会回滚并DUMP,E类型MESSAGE报错但不回滚,如果需要回滚需要显式ROLLBACK WORK
23、在多个表取数,如果符合使用JOIN的原则,则尽量使用JOIN
24、LOOP大内表的时候,尽量使用二分法READ TABLE和LOOP结合的方法,或者使用SORTED KEY
25、在更新进程里面,不要使用SELECT SINGLE * FOR UPDATE 和 AUTHORITY-CHECK
26、在更新进程里面,不允许使用SUBMIT,CALL DIALOG,CALL SCREEN,CALL TRANSACTION,COMMIT WORK,ROLLBACK WORK
27、如果使用Webservice或者WebUI,日期格式使用YYYY-MM-DD
28、如果需要等BAPI执行结束和更新结束拿到结果,用SET UPDATE TASK LOCAL,不要使用等待语句(WAIT UP TO XXX SECONDS)
29、如果需要在增强中更新表,使用IN UPDATE TASK,并注意V1还是V2更新
30、非必要不使用宏,尤其是给ALV的FieldCat赋值的时候
31、流水码(编号范围SNRO),如果允许跳号,一定要设置缓冲
32、如果可能,尽量避免硬代码(自开发程序似乎没法完全避免)
33、在实施项目中,往往到上线前才会传输请求到PRD,之前传输请求到在QAS建议使用副本请求,避免最后请求混乱
34、SELECT JOIN的时候,注意两个表的连接字段可能都为空的情况,会造成笛卡尔积,数据量急剧变大
35、如果没有使用逻辑数据库(LDB),没有必要使用事件END-OF-SELECTION
36、往其他系统推送数据的RFC,尽量使用bgRFC,使用tRFC容易占用进程过多