johnson_yao tech note

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

说明: 增强  基础  操作

 部分文字转帖:http://blog.sina.com.cn/s/blog_453deb4b0100f8p7.html

  (文章对于增强的理解深入浅出,化繁为简,比较容易理解,因此转载。)

  

首先来讲解一下什么是出口,顾名思义,就是一段程序执行到最后必经的一段程序。
     
为什么会有出口呢?因为正常的业务系统不能满足实际需求,这时可以在出口中增加一些功能,来达到要求,这也就是为什么它还叫增强。我感觉它跟给操作系统打补丁差不多。
     
Sap中出口就是标准程序最后要调用的一个函数或者功能模块,这个函数或功能模块的输入已经由Sap定义好。

     自己写的SAP出口程序在系统升级的时候会被保留,而如果更改标准程序在SAP系统升级的时候会被覆盖。
       
下面介绍一下什么时候需要使用出口以及出口的种类:

       1
:在业务检查时,比如在某个工厂发货,可以设定在某个库位的出货只能使用某种移动类型。

       2
:在需要界面增强时,比如用户对某个字段要求大写,但是最终用户不按规范操作,这也可以在出口中自动转换,有些模块甚至能自定义数据库字段,并且可以在出口中增加字段输入。还有的模块能对输入数据检查,甚至实现自动替代等功能。

       3
:有不规则业务时,比如按某种条件定价,可以设定从自己定义的表中按某种条件取值

       4
:搜索帮助的出口,可以对Sap标准的搜索帮助做权限控制。


SAP
有四种基本用户出口的类型:

1.
菜单出口-Menu Exits
   
定义自己的菜单
2.
屏幕出口-Screen Exits
   
定义自己的屏幕
3.
功能模块出口-Function Module Exits
   
SAP应用程序中添加功能

4.关键字出口-Keyword Exits
    在ABAP/4字典中的关键字数据元素添加文档。结果是你在使用这些数据元素的字段处按F1后会出现你自定义的说明文档


因为出口都是被Sap预先定义好的,那么怎么寻找自己需要的出口呢?
1
:可以通过配置文档的帮助和SAP library 寻找业务系统的出口,sap library ‘implementation guide’中寻找出口,在配置功能执行按钮左边一般都有一个说明文档,描述相关的出口。
2
:为了方便我们把所有的出口名称及其描述列在文章的后面。

下面具体介绍怎样写出口程序:
为了对出口程序的修改进行管理,sap提供了专门用来管理出口程序的事务,事务代码是CMOD


sap
寻找用户出口方法

sap
的用户出口总共有三代:

一、User EXIT
    
这种出口据说是第一代的用户出口,它们includeSAP标准程序的源代码里,可以说他们是源代码的一部分,你改了这种出口就相当于改了SAP标准程序,是需要申请access key才能更改的,不需要建立PROJECT。很多标准程序里的ZZ或者Z结尾的包括程序里都有以user_exit_开始的子程序.
二、Customer exit
   
可以把这种出口看成第二代的的出口,好像增强(ehancement)就是指这类,不知道我有没有理解正确,这种出口又包括了六种不同的类型.
   1
function exit,
   2) menu exit,
   3) table exit,
   4) field exit,
   5) screen exit,
   6) keyword exit

就是function exit.这种出口是以FM的形式存在的,其开发的方式是找到相关的增强后,建立PROJECT,然后在componemt里有FM,在FM里有以Z开始INCLUDE程序,双击这个INCLUDE程序进入后就可以根据FMIMPORT/EXPORT/CHANGING/TABLE等来开发你们的需求。这些增强是不需要申请ACCESS KEY的,因为他们不属于SAP标准程序里的一部分。这种增强FM的命名方式是EXIT_programname_NNN,NNN3个数字的序号,实际上在SAP的标准程序里,会用到下面的方式调用该增强的逻辑:call customer-function 'NNN',从而来达到用户的需求。

三、BADI
   
这是基于面向对像的第三代增强。自己也只做过1次,特别是自己对SAP的面向对像还搞不清楚,寒~~`一时之间说不出个所以。前面介绍的两种出口增强,都是SAP提供固定的点给用户进行开发,而BADI这种增强,则让顾问们很自由地定义需要增强的地方,据说SAP很多的行业方案就是用这种形式来扩展的。
   
如果你需要找某一个出口/增强,还是回去看SPRO,每一个模块里都基本有system modificatio或者BADI的说明,这样能更快找到相关的东西。

1
、关于增强的简单介绍
1.1 SMOD
包含具体的增强,而CMOD是包含一组SMOD编写的增强.  
1.2 User exits (Function module exits)
sap提供出口,它的命名规则如下:
EXIT_<program name><3 digit suffix>  
示例:
sd
VA01事务,对应的程序是SAPMV45A ,你会在程序里查到(用CALLCUSTOMER-FUNCTION字符串)如下代码:
CALL CUSTOMER-FUNCTION '003'
  exporting
    xvbak   = vbak
    xvbuk   = vbuk
    xkomk   = tkomk
  importing
    lvf_subrc = lvf_subrc
  tables
    xvbfa = xvbfa
    xvbap = xvbap
    xvbup = xvbup.
exit calls function module的名称就是:EXIT_SAPMV45A_003


2
、先试用SMOD建立一个SAP增强
2.1
、选择一个增强,如:SDVFX001 ,点击修改,进入sap增强维护屏幕;
2.2
、点击组件按钮,进入组件维护屏;
2.3
、将光标移到功能模块名,输入模块名,如:EXIT_SAPLV60B_001
2.4
、选择代码修改按钮进入函数模块;
2.5
、双击函数模块的包含单元,进入包含单元加入自定义代码并激活保存;

3
、使用CMOD建立增强项目
3.1
、输入自定义的项目名,点击创建
3.2
、进入增强项目,选择配置增强,进入增强配置屏幕;
3.3
、输入增强名如:SDVFX001
3.4
、保存,并退出;

4、使用CMOD将增强项目激活,便大工告成。

posted on 2011-04-21 17:00  johnson_yao  阅读(354)  评论(0编辑  收藏  举报