版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ABAP总结之十一,Enhancement(2)-Dictionary Elements 对于透明表及结构的增强,主要两种。一种是Append Structure,还有一种就是Include形式。 Append Structure可以扩展原来的表结构,但是并不是在原来的表上加字段,而是再建一个附加的结构,物理上,数据是存在两处的。而且,一个Append Structure只能有一张表结构。如果把有Append Structure结构的表进行复制的话,那么在新的表中,原有的Append Structure就变成了固定字段,
2、物理表也变成了一张。 Include格式,多见于由于增强而自动生成的表字段,比如做屏幕增强的时候。当然,你也可以自己定义。相比Append Structure, Include就可以包含多张表结构(Include的Data Elements可以Append Structure)。它不具有Append Structure的复制性能,即使复制,还是会以原结构存在于新表中。当你做完增强后,如果想所加字段在SM30表维护中也出现,那么需要通过以下路径生成表维护程序:SE11->进入相应表,并做完增强->Utilities->Table Mainte
3、nance Generator 如果你要反复地更改增强,比如改变某一字段的长度。那么在减少字段时,需用SE14进行物理表的修改,否则无法激活。 有一种情况要注意,原有数据表中存在数据时,Append Structure或Include增强,不会影响原有数据,只会在原有的数据中加上相应的空白字段。如果,将字段的长度减少时,数据的就会丢失,一般是从尾部开始丢失。所以不建议,在已有数据的情况下,减少字段长度。 下面将以下我碰到的一个实际例子。 由于业务的需要
4、,一个标准表的标准字段长度不够,这时候就要增强字段长度。我那时候想了3套方案。 1.直接增加字段长度。 (由于这个字段有一定的命名规则,程序会截取字符进行进行判断,直接增加字段长度,直接修改代价比较大) 2.Apend一个附加字段,在逻辑判断的时候,将附加字段和原有字段综合起来进行判断。 (要修改相应的程序) 3.由于这个字段是用来Mapping的,有它一定的命名规则。改变原有的命名规则,延长这个字段的使用寿命。
5、160; 现在还没定出来使用哪个。不过个人感觉,如果一开始架构的时候能对业务增长有一个比较可靠的估计,那么碰到这种情况的概率也会大大减少。毕竟,上线后再做修改和增强,已经属于费力的工程了。 对于字典文档的增强,可以在以下路径中做: CMOD->GoTo->Text enhancements->Data elements/KeywordsABAP总结之十一,Enhancement(3)-User Exits
6、 User Exits是SAP第一代增强技术,其技术原理就是在程序中预先置放一个Form.EndForm的子程序,并在事物运行时Call这个Form。当然,如果这个Form是空的,那么不执行任何操作,反之,执行相应的动作。User Exits的写法,和修改标准程序是一致的,要有向SAP申请Access Key才能对这些程序进行修改。与修改标程的区别在于,在SAP做升级的时候,User Exits会自动保留,标程的修改如果不做特殊处理,就会被覆盖。 在做这样的增强时,要养成一个习惯,那就是把你所要添加的代码都写在自己以Z开头的function中,然
7、后在Form中调用这个function。例如:FORM Add . CALL FUNCTION 'ZGDTEST' EXPORTING I_CHAR = I_FLOAT =* IMPOR
8、TING* E_DATE =* E_CHAR =* E_VAR =
9、60; .ENDFORM. 下面来讲一下,如何找到此类出口:方法1:SPRO -> SAP Reference IMG,按 ,Search Term中填入USER EXIT就可以查到每个模块相应的出口了,每个出口SAP都会有相应的使用说明。例子:User Exits In Sales Document Processing程序:MV45AFZZ出口名:USEREXIT_SAVE_DOCUMENT使用说明:Use t
10、his user exit to fill user-specific statistics update tables.The user exit is called up by the FORM routine BELEG-SICHERN before the COMMIT command.NoteIf a standard field is changed, the field r185d-dataloss is set to X. The system queries this indicator at the beginning of the safety routine. This
11、 is why this indicator must also be set during the maintenance of user-specific tables that are also to be saved. 方法二进入你要做增强的那个screen,找到相应的程序名,例: va01以下屏幕的程序就是SAPMV45A用T-CODE: SE38, 输入程序名SAPMV45A,进入,按下,屏幕左部出现以下对话框。选择Subroutines进行扩展,那些以USEREXIT开头的routines就是我们要找的出口,这里可以很方便地找到USEREXIT_SAVE_DOCUMEN
12、T,和之前的方法效果是一样的。 ABAP总结之十一,Enhancement(4)-Customer Exits Customer Exits, 顾名思义,就是用户自定义出口。 有3类这样的出口:Function Module Exits; Menu Exits; Screen Exits 有两个常用的T-code: CMOD: 用于增强项目的管理 SMOD: 增强项目的具体实现
13、60; Function Module Exits: 就是在标准程序中预置有形如call customer-function 'NNN'的call function语句,来动态调用相关的出口程序。'NNN'是3位数字,而实际的出口函数命名方式为:EXIT_<program name>_<exit number>。寻找这样的可以用SMOD的查询功能,同时也有一个程序可以用T-CODE来帮助查找,在老白的博客上应该有这个程序。这个出口形式比较简单,所以就不举例子了。 Menu Exi
14、ts: 个人觉得是用得比较少的一种出口,项目上很少使用,SAP预留的出口也很少。抓住几点关键就可以了,Menu Exits会有一个预留的function code 比如+PGE什么的。你要在做增强的程序中发现这样的句子:CASE: OK_CODE. . WHEN '+PGE'. CALL CUSTOMER-FUNCTION '001'. .ENDCASE. 这样就可以在相应的出口里编写
15、你想要的东西了。 Screen Exits: 相对比较繁琐。举一个例子来说明一下。 SMOD: AIST0002 EXIT_SAPLAIST_002 中加入代码 ANLU = I_ANLU. EXIT_SAPLAIST_003 中加入代码 E_ANLU = ANLU. 在Include tables中建立一张表 CI_ANLU,结构如下:
16、160; ZKEVIN CHAR 20 讲一下以上函数及表的一下作用,大家看一下参数就应该就比较明白了。 EXIT_SAPLAIST_002 是从事务程序将数据传入出口程序 EXIT_SAPLAIST_003 是将出口程序处理后的数据传到事务程序 CI_ANLU 就是在屏幕上加的结构 T-code SE80->function group XAIS 建立Subscreen 9001,并画
17、出相应的屏幕、完成逻辑流。 T-code AOLA->COPY标准SAP TAB LAYOUT->修改其General tab->增加一个Group box, 选U9001。 T-code AOLK->选择class 1000->General Assignment of Layout->将刚刚新建的Layout替换掉原来Asset accountant的Tab layout。 T-code AS01/AS02/AS03 进行相应的测试。 &
18、#160; SMOD: CNEX0006 这个是自带屏幕,不需要配置的。制作的方法,和之前的例子相似。测试T-code:CJ01。 以上是两种常见的屏幕增强,当然还有BAdI形式的,这个下一节再讲。 ABAP总结之十一,Enhancement(5)-Field Exits Field Exits,我想了一下还是单独拿出来写一下比较好。 虽然技术上来讲有点像Customer Exits(两者都是通过function来实现出口的),
19、但是其原理和用途又有很大不同,而且Field Exits,SAP在4.6之后就不再支持了,如果没有用过这个技术,想要用,还要重新启动PRD才行,很麻烦,所以这里只是做个介绍性来谈谈这种出口方式。 大家可以在SE38里,运行程序RSMODPRF来寻找已经存在的Field Exits,同时也可以进入Field Exits的管理界面。 还有一种方法,就是在CMODZ界面,在T-CODE栏中键入PRFB也可以进入Field Exits的管理界面。 Field Exit->Create 就可
20、以新建一个Field Exits,只要有相应的Data Element在数据库中存在,就能建立出针对这个Data Element的Field Exits。同时会要生成一个FIELD_EXIT_开头的function,用以做相应的增强。里面有两个参数,Input和Output,这两个参数是固定的,不能修改。Input是将屏幕字段的值传到出口程序,而Output则是传出。 出口程序中,有些ABAP语句是受限制的 call screen, call dialog, call transaction, submit
21、160; commit work, rollback work communication receive exit from step-loop message i, message w stop, reject 所以也种出口的功能带来了限制。同时,debug是field exit会被忽略,所以对纠错来说也是一个不利,你只能做单元测试,而不能做集成测试。 要
22、对Field Exits做得更细,那就要给它分配,程序及其对应的屏幕号,否则你做出来的就是全局的,对于用到你所定义的Element的数据都有效,这是不一定是我们愿意看到的。 最后就是要记住激活,这样才能保证它生效。 大家可以做一个例子试试,还是比较简单的。ABAP总结之十一,Enhancement(6)-BAdIs BAdIs(Business Add-Ins)是SAP在R/3 release 4.6A后增加的增强技术。总的来说,BAdIs克服了之前出口的所有缺点,并且还是用最新的OO技术实现,可谓是万千宠爱
23、于一身。不过在项目中,用BAdIs的顾问还是比较少,多数是用Customer Exit和User Exit完成。 T-code se18 BAdI Definition T-code se19 BAdI Implement BAdIs可以实现,Program/Menu/Screen Exit,同时还有BTEs的重复使用的特性。但是不管如何,它在标准程序中的实现有一定格式:这个图可以有助于我们理解BAdI的实现方式。同时,它也给我提供了一个寻找事务BAdI的一个途径。在事务执行时,如果事务
24、中存在BAdI,类cl_exithandler=>get_instance方法就会执行。所以大家就可以,用se24->cl_exithandler->双击GET_INSTANCE进入方法-> 在如下语句上设置断点 CALL METHOD cl_exithandler=>get_class_name_by_interface->运行相应的事务,比如MIGO,MM02等,程序就会停在断点处,这样就可以查到相关事务的BAdI了。 其实,BAdI就是综合了SAP之前一些增强技术的之长,在标准程序预留了出口,通过
25、面向对象的接口技术,使增强更加灵活。一个出口,可以有多个实现,但是一个client的话,只有一个是起作用的,我试下来,是按创建的先后顺序及是否active来判断的,不过一般一个实现就够了,所以也不必那么麻烦,只能说SAP的技术架构确实是比较先进。下面来举个例子说明一下:se19->MB_MIGO_BADI->创建一个实现->Interface->PBO_DETAIL 键入如下代码 E_CPROG = 'ZKEVIN_MIGO'. E_DYNNR = '1111'. E_HEADING = 'kevin sub'. 'ZKEIVN_MIGO'是一个自建的程序,'1111'是这个程序中自建的屏幕,'kevin sub'是Tab的标签。 你可以在自建的程序中增加PBO和PAI程序,同时在自定义屏幕中添加自己的屏幕元素及逻辑流。在BAdIs中的POST_DOCUMENT方法,可以在生成标准数据时,也在自己的Z表中插入数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高二年级上册期末考试汇编:文言文
- 《威尼斯镰刀菌蛋白等3种新食品原料》介绍2025
- 年产13.2万台变速箱改建项目可行性研究报告模板-备案审批
- 2019-2021年北京重点区高一(上)期末化学试卷试题汇编:物质的量
- 清远消防员笔试题目及答案
- 2025年长沙卫校单招题库及答案
- 关于帽子的测试题及答案
- 2025年机电实务考试真题及答案
- 音标对听力测试题及答案
- 2025年大学教育数学题库及答案
- 药物外渗和渗出的预防和处理
- Unit5 What does he do?A lets talk(说课稿)-2024-2025学年人教PEP版英语六年级上册
- 《食品仪器分析技术》课程标准
- DB63-T 2382-2024 天然林保护修复标准体系
- 无处不在-传染病知到智慧树章节测试课后答案2024年秋南昌大学
- 《斯蒂芬·库里》课件
- 鞋企年度经营目标规划
- 2020年度加油站施工施工组织设计方案
- 风电项目审批、开发、建设、运营所需手续全流程
- 尊重学术道德遵守学术规范学习通超星期末考试答案章节答案2024年
- 理财产品合同样本
评论
0/150
提交评论