Chinaunix首页 | 论坛 | 博客
  • 博客访问: 85466
  • 博文数量: 26
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 302
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-10 10:04
文章分类
文章存档

2011年(2)

2010年(24)

我的朋友

分类:

2010-11-26 11:16:37

一介绍

用户增强: 所有的Enhancement在表MODSAP,用户增强大概有三类

MODSAP是Enhancement表, 而TFDIR是看是否此enhancement被激活,就看字段MAND是否是”C”而已

1.       E Enhancement exits :就是常说的写User_exit ,经常使用

2.       C GUI codes 没用过

3.       S Subscreens 屏幕增强

什么叫用户出口呢?打个比方说吧,SAP软件就象一根晾衣服的绳子,上面有数不清的衣架,多数衣架上已经挂上了衣服,就些衣服就SAP的标准程序,还有些衣架是空着的,这些就是“用户出口”,你可以把自己做的衣服(比如程序代码)挂到这些衣架上去--如果你觉得SAP给你准备的衣服不够穿或者不合身的话。

使用用户出口可以:

-不影响标准SAP源代码

-不影响软件升级

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

1.菜单出口-Menu Exits

定义自己的菜单

2.屏幕出口-Screen Exits

定义自己的屏幕

3.功能模块出口-Function Module Exits

在SAP应用程序中添加功能

4.关键字出口-Keyword Exits

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

要编辑用户出口,必须有SAP授权的开发权限,另外,除了关键字出口外,其他的出口都需要有一定的ABAP/4编程能力.

用户出口类型:

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

1、第一代

sap提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强都需要修改sap的标准代码。--这个是最原始的产品增强技术.

2、第二代

sap提供的是CUSTOMER-FUNCTION,它是通过SMOD和CMOD完成实现。--比较类似插件接口了.

3、第三代

sap提供的第三代的用户出口就是BADI,他的调用方式是CALL METHOD (instance),(相关的TCODE是SE18和SE19),你可以通过EXIT_HANDLER这个单词查找BADI。--预留空实现类的方式,支持用户或伙伴去扩展

二。SAP中寻找

方法一、利用TCODE寻找增强(第二代的增强)

    执行一个程序(源代码后附),在选择屏幕处输入你所需要增强的程序TCODE,执行後,就会出现一个列表,那里就有关于如何增强这个的绝大部分SMOD增强。

    点击进去,自己手动寻找需要的增强。

    这是第二代增强

    方法二、利用系统函数寻找

     

    MODX_FUNCTION_ACTIVE_CHECK

    在这个FUNCTION的代码最后添加一个断点。执行需要增强的TCODE,如果有增强,就会自动跳入DEBUG界面。在DEBUG界面,查看f_tab字段,这里面所显示的Smod就是关于这个TCODE所有的增强项目的列表。这些增强都是属于EXIT_XXXXXX_XXX这种形式。

    至于如何查看这个增强是属于哪个SMOD,可以自己查阅 MODSAP这个表(SAP Enhancements).

    这是第二代增强。

    还有一些FUNCTION供参考:

    [1].DYNP_VALUES_READ

    [2]. MODX_ALL_ACTIVE_MENUENTRIES(菜单增强)

    [3].MODX_FUNCTION_ACTIVE_CHECK(出口函数增强)

    [4].MODX_MENUENTRY_ACTIVE_CHECK(菜单增强)

    [5].MODX_SUBSCREEN_ACTIVE_CHECK(屏幕增强)

    这些的使用方法和上述的一样,可以针对各种情况寻找增强。

    方法三、从程序代码中找

    在需要增强的事务里面,打开SYSTEM——》status,双击进入PROGRAM,查看所有的subroutines, 重点观察所有形似 userexit_******* 这种,由描述来确定合适的需要增强的FORM。这里是第一代的增强。

    方法四、针对BADI的增强

    1、badi对象的信息存储在SXS_INTER, SXC_EXIT, SXC_CLASS 和SXC_ATTR 这四个表中。

    2、sap程序都会调用cl_exithandler=>get_instance来判断对象是否存在,并返回实例;其实get_instance就是对上述几个表和他们的视图(V_EXT_IMP 和 V_EXT_ACT)进行查询和搜索。

    3、基于这个机理,我查用ST05来监控一个TCODE来跟踪,然后选择查找有关上述几个表和视图的操作,就可获得相关BADI。

    4、se18 查找接口,se19 实现接口就可以实现用户增强。

 

三应用实例

SAP用户增强总结(3)-采购订单建立增加客户数据增强示例

2008年09月08日 星期一 17:14

命令:smod

选择增强号MM06E005,点击测试。

出现如下:

MM06E005

1.功能退出:分别是代码区,包括pbo,pbi等。

2.Screen exit:创建增强屏幕

3.包含表:增强表字段结构

第一步:增强结构CI_EKKODB,在包含表CI_EKKODB上双击,然后新增增强字段。新增字段必须以ZZ开头。ZZOPENDATE。如果要增强行项目,双击CI_EKPODB。

第二步:增强屏幕显示,在Screen exit中,双击要增强的SAPMM06,如下:

PROCESS BEFORE OUTPUT.

  MODULE STATUS_0101.

*

PROCESS AFTER INPUT.

* MODULE USER_COMMAND_0101.

进入以后即可绘制屏幕显示,查找要显示的CI_EKKODB中的字段显示到屏幕上。查找字段(f6),输入表或字段名(ekko_ci),找到显示的字段。

双击STATUS_0101编程:

  MODULE STATUS_0101中编程:(更新字段编辑状态)

IF displaymode = 'A'.

    LOOP AT SCREEN.

      IF screen-name = 'EKKO_CI-ZZOPENDATE'.

         screen-input = '0'.

        MODIFY SCREEN.

      ENDIF.

ENDLOOP.

  ENDIF.

第三步:编程

在功能退出去,双击EXIT_SAPMM06E_006,进入 INCLUDE ZXM06U36 ,即Pbo中增加如下代码(显示和更新编辑状态)

ekko_ci = i_ci_ekko.

displaymode = i_trtyp.

双击 EXIT_SAPMM06E_007,进入 INCLUDE ZXM06U38 ,即 Pbi中(保存数据)

MOVE-CORRESPONDING i_ekko TO gl_ekko_ci.

双击    EXIT_SAPMM06E_008,进入 INCLUDE ZXM06U37 ,即 Import Data from Customer Subscreen for Purchasing Document Header中(修改后提示保存)

IF gl_ekko_ci-zzopendate NE ekko_ci-zzopendate.

   e_ci_ekko-zzopendate = ekko_ci-zzopendate.

  IF displaymode NE 'A'.

     e_ci_update = 'X'.

  ENDIF.

ENDIF.

也可以是所有字段:

if gl_ekko_ci ne ekko_ci.

   e_ci_ekko = ekko_ci.

  if displaymode ne 'A'.

     e_ci_update = 'X'.

  endif.

endif.

然后逐个激活即可。

SAPMM06E     0101 CUSTSCR1 SAPLXM06    0101 "Header

SAPMM06E     0111 CUSTSCR1 SAPLXM06    0111 "Item

EXIT_SAPMM06E_006 Header (PBO)

EXIT_SAPMM06E_007 Header (PAI)

EXIT_SAPMM06E_008 Import Data from Customer Subscreen for Purchasing Document Header

EXIT_SAPMM06E_016 Item (PBO)

EXIT_SAPMM06E_017 Item (PAI)

EXIT_SAPMM06E_018 Import Data from Customer Subscreen for Purchasing Document Item

阅读(1148) | 评论(0) | 转发(0) |
0

上一篇:SAP个模块表总览

下一篇:外发进度跟踪

给主人留下些什么吧!~~