Enhancements using customer exits

来源:互联网 发布:泰亚史诗 知乎 编辑:程序博客网 时间:2024/05/21 21:30

        客户可以通过application enhancement来增强应用功能。Customer exit是SAP预留的并包含多个components。Application enhancements在deliver时是inactive的状态,可以由用户完成并activate。Application enhancements的特点是每个enhancement都包含一系列预留的精确功能集合。SAP和customer function之间的interface都被精确定义。升级时不需要对customer function部分做任何调整。

        SAP开发人员通过function module exit,menu exit和screen exit来创建SAP enhancements。是通过transaction SMOD来管理的。客户可以通过catalog来浏览存在的SAP enhancements。然后通过CMOD把需要的SAP ENHANCEMENTS放到一个自定义的项目中。

        SAP enhancement是由component组成的,这些component包括module exits,menu exits和screen exits。一个component只能用在一个sap enhancement上。Customer enhancement project是由sap enhancement组成的。一个SAP enhancement只能用在一个customer enhancement project中。

        SAP开发人员在程序中预留了application enhancements并定义了components。Components包含在sap enhancement中。并为enhancement准备了详细的文档,所以使用者不需要详细分析程序代码或screen代码。

        对于客户来说首先要创建enhancement project然后选择需要使用的enhancement。然后编辑每个component并为整个project建立文档。然后激活整个project,相应的components也会被激活。

        Enhancement project的name要有一定的意义比如包括相应的transaction code或module pool name。然后给项目输入简短的描述即可。然后将要使用的enhancement包括在project之中。查询功能可以帮助你找到你要使用的enhancement。通过product management功能编辑相应的component。Component类型的不同会将你带入不同的界面。Function module builder或menu entry或screen painter。然后就可以激活整个项目。在激活过程中,所有包含项目component的program, screen和menu都会在执行时重新生成。可以通过deactivate来取消项目的active状态。在创建project时,系统会要求你把它放到一个change request中,其他的component也应当放到这个change request中,这样就保证了你可以把整个enhancement project同时传到其他的系统中。

        在screen的PAI中在SAP预留的地方调用exit function module。在function module中客户可以在自己的namespace中编写自己的功能。在SAP标准程序中通过CALL CUSTOMER-FUNCTION ‘nnn’来调用exit function module,相应的function module和function group必须被创建。这些function module一般在以X开始的function group中。Exit function module的name遵循以下原则:前缀为EXIT,然后是调用这个function module的程序名,然后是三个数字作为后缀,这三部分以下划分隔。CALL CUSTOMER-FUNCTION只有在enhancement project激活时才能执行。同一个function module的多次调用是同时激活的。

        经常碰到的问题可能是怎么知道一个应用程序存在function module exit。一般的方法是可以通过system->status display找到程序名然后双击程序名进入ABAP EDITOR然后搜索字符CALL CUSTOMER。另外还可以通过package和technical name来搜索function module exit。

        通过事务CMOD来编辑function module exit的function module。通过change component来进入function module editor。不要修改function module本身尤其是function module的interface。不过function module有个include语句,可以创建customer namespace的include程序。这个程序name以ZX开始。

        Function group的一般结构,一个function group是由include组成的。系统为每个不同的object的include提供了唯一的name。有些include名字是由系统提供建议的有些是不可修改的。Global data位于top include中。这个include一般是自动生成的。Function module的include是以数字顺序已UXX结尾生成的。尽管对于其他object(Subroutines,modules,events等)你可以自己选择任意的名字,但是仍然建议使用系统建议的name。

        SAP 开发人员为ENHANCEMENT创建的exit function group的include program的name以LX或ZX开始。你只能修改以Z开始的includes。不要在这样的function group中加入额外的function module。Include program ZxaaaUnn包含了function module exit的function modules。SAP开发人员在LXaaaTAP中定义全局变量。你可以在ZXaaaTOP中定义自己的全局变量。在LXaaaTOP中包括FUNCTION-POOL语句不能被修改。所以只能通过这种方式来报message:MESSAGE E500 (EU)。ZXaaaUnn的include语句位于FUNCTION-ENDFUNCTION之间,因此events,subroutines和modules在这里都不被允许。不过他们可以在另外的include中创建。不过可以在这里通过DATA声明本地变量。Sap开发人员为source text提供了proposal。在这里INCLUDE LXaaFnn被创建。Sap enhancement中提供了相关的文档。可以通过project management tool把这些include中的源代码拷入到customer namespace的include ZXaaUnn中。你可以在function group中创建自己的text element。Sap应用开发人员通过LXaaaF01为你提供缺省的subroutine,还可以有其他的include来包括其他sub objects:

l      LX..F01 SAP deliver的subroutine

l      LX..E01 X function group的EVENTS

l      LX..O01 SCREEN的PBO events

l      LX..I01  SCREEN的PAI events

可以通过INCLUDE program ZXaaaZZZ以include program的形式创建subroutines,modules和interactive events。不过其必须遵循以下的命名规则:

l      ZXaaaFnn用来创建subroutine

l      ZXaaaOnn用来创建PBO modules

l      ZXaaaInn用来创建PAI modules

l      ZXaaaEnn用来创建events

可以通过CALL SCREEN来调用自己的screen,在INCLUDE PROGRAM ZXaaaZZZ中创建相应的PBO,PAI modules include program。通过forward navigation来创建自己的module和screen。这样创建的screen将给与function module main program的名字。Screen的PBO modules会在include ZXaaaO01中,PAI MODULES会在ZXaaaI01中。

可以通过predefined points来在sap application中添加自己的logic。这样的enhancements可以include自己的screen以及相应的logic和相应的graphical interface以及text elements。

        Menu exits允许你在sap menu中加入自己的menu function。SAP开发人员在interface中预留了一些menu entries。客户可以用这些menu entries来定义自己的文本并加入自己的logic。它们一般以相关的function module exit的形式出现。一旦你激活这个menu exit其在SAP menu中就成为可见。一旦选择了这个menu option,系统就会执行sap开发人员所提供的功能或者你在function module exit中所实现的功能。想使用menu exits,sap开发人员必须在interface中添加了以+开始的function code。这些function code起初是inactive的,在你activate它之前在screen上并不显示。

        Menu exit也是通过事务CMOD来编辑的。通过编辑components便可以为menu entry填入描述信息。但是你不能修改GUI interface本身。SAP的开发人员定义了什么时候去读额外的function code以及如何响应,通过function module exit或者预定义的功能。

        你可以在保留的function code中实施menu exit。Sap开发人员定义了相应的function code,并把他们分配给menu通常情况下提供相应的function module exit。Menu exit和function module exit是同一个enhancement的一部分。Pushbutton不能分配给额外的function code。你可以修改不同的menu entries并将其激活。

        Screen exit允许你使用main screen的保留区域,你可以在这个区域显示额外的信息或输入数据。你在customer screen(subscreen)上放置要输入和输出的字段。Subscreen是保留在screen上的一个矩形区域用来显示其他screen。一个subscreen区域可以显示不同的screen。在screen的PBO决定要显示那个subscreen。相应的语句为:CALL SUBSCREEN <sub screen area> INCLUDING <prg> <screen_no>对于subscreen PBO和PAI事件跟普通screen一样运行。CALL SUBSCREEN语句的位置决定了subscreen中flow logic的运行顺序。几点需要注意的是:

l      Function code只在main screen的flow logic中执行

l      Subscreen的command field不允许分配name

l      Subscreen不允许定义GUI status

l      Subscreen的flow control不能定义next screen。

        Sap开发人员可以为一个screen保留多个subscreen区域。Subscreen在main screen的flow control中通过CALL CUSTOMER-SUBSCREEN来调用。Subscreen的name不能有apostrophes。Subscreen所在的function group是通过apostrophes静态定义的,不过screen number可以通过field定义成variable的。这个screen number也必须是以四个数字组成。Screen exit的状态是inactive的。只有相应的subscreen在enhancement project中创建后,并且这个项目被激活后,相应的screen exit才会被处理。你在X function group中创建subscreen。通常这个function group也包含function module exit。在screen的flow logic中一旦有CALL CUSTOMER-SUBSCREEN <area> INCLUDING <X-function-pool> <screen_number>语句,subscreen就被sap开发人员包括了进来,subscreen PBO事件中调用function module也会被处理。在screen的flow logic的PAI中,通过CALL CUSTOMER-SCBSCREEN来触发subbscreen的PAI event。包含subscreen的X function group并不能识别calling program的全局变量。Sap开发人员通过function module exit来把数据提供给subscreen。这种种类的function module exit的function module可以在与subscreen所在的同一个function group中发现。同理通过相反的方向,subscreen中修改后的数据会传回到calling program中。这可以在main screen的PAI event中包含一个function module exit来实现。Subscreen也是通过事务CMOD来编辑的。Screen exit的技术名称包括calling program的name和四个数字的screen number,subscreen area的name这之后是function group main program的name和subscreen的number。你必须创建subscreen以及相应的PAI和PBO modules。SAP开发环境支持forward navigation。第一创建时一定要保证所创建的subscreen的screen type为subscreen。你不能修改subscreen所在的X function group的interface,也不能添加你自己的function module。

        Screen exit允许你自己布置screen的某些特定部位,你可以使用这些区域显示额外信息或输入额外数据。Screen exit是由sap开发人员预先定义的。在screen的PBO和PAI event中通过CALL CUSTOMER-SUBSCREEN来调用subscreen。一旦你激活了包含subscreen component的project,calling screen就会被生成,应用程序被调用时subscreen就会被显示。

【文章转载自http://scnblogs.techweb.com.cn/abaplv/archives/253.html】

原创粉丝点击