在 sap的使用中,存在多个多个开发团队为不同 client进行开发维护,为了避免增强的影响,我们可以如下框架去编写增强

1)参照MV45AFZA创建一个程序为Y+XXXX+XX_MV45AFZA
XXXX=〉公司代码
XX=〉Modlue abbreviation

2) add Y+XXXX+XX before all form names to avoid form name conflict
For example
*---------------------------------------------------------------------*
*       FORM USEREXIT_MOVE_FIELD_TO_KOMKD                             *
*---------------------------------------------------------------------*
*       This userexit can be used to move some fields into the        *
*       communication workarea for product substitution.              *
*                                                                     *
*       This form is called from form KOMKD_KOMPD_FUELLEN.            *
*                                                                     *
*---------------------------------------------------------------------*
FORM USEREXIT_MOVE_FIELD_TO_KOMKD.
*  KOMKD-zzfield = xxxx-zzfield2.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM USEREXIT_MOVE_FIELD_TO_KOMKG                             *
*---------------------------------------------------------------------*
*       This userexit can be used to move some fields into the        *
*       communication workarea for product listing or exclusion.      *
*                                                                     *
*       This form is called from form KOMKG_KOMPG_FUELLEN.            *
*                                                                     *
*---------------------------------------------------------------------*
form y0029sd_move_field_to_komkg.
*  KOMKG-zzfield = xxxx-zzfield2.
endform.

3)add include statement into MV45AFZA
include y0000sd_mv45afza.  " 
include y0077sd_mv45afza.  "
include y0076sd_mv45afza.  "
include y0029sd_mv45afza.  " 
include y0031sd_mv45afza.  " 
*}   INSERT*
************************************************************************
*                                                                      *
* This include is reserved for user modifications                      *
*                                                                      *
* Forms for sales document processing                                  *
*                                                                      *
* The name of modification modules should begin with 'ZZ'.             *
*                                                                      *
************************************************************************

*---------------------------------------------------------------------*
*       FORM USEREXIT_MOVE_FIELD_TO_KOMKD                             *
*---------------------------------------------------------------------*
*       This userexit can be used to move some fields into the        *
*       communication workarea for product substitution.              *
*                                                                     *
*       This form is called from form KOMKD_KOMPD_FUELLEN.            *
*                                                                     *
*---------------------------------------------------------------------*
FORM USEREXIT_MOVE_FIELD_TO_KOMKD.

*  KOMKD-zzfield = xxxx-zzfield2.
ENDFORM.

4) add code depent company or client into  Y+XXXX+XX_MV45AFZA
*---------------------------------------------------------------------*
*       FORM USEREXIT_MOVE_FIELD_TO_KOMKD                             *
*---------------------------------------------------------------------*
*       This userexit can be used to move some fields into the        *
*       communication workarea for product substitution.              *
*                                                                     *
*       This form is called from form KOMKD_KOMPD_FUELLEN.            *
*                                                                     *
*---------------------------------------------------------------------*
form y0029sd_move_field_to_komkd.
  perform xvbpa_lesen(sapfv45k) using 'ZH' vbap-posnr sy-tabix.
  move xvbpa-kunnr to komkd-yyheadq.
DATA: BEGIN OF yhpath OCCURS 10.
          INCLUDE STRUCTURE vbpavb.
  DATA: END OF yhpath.
  CLEAR:   yhpath.
  REFRESH: yhpath.
  CALL FUNCTION 'SD_CUSTOMER_HIERARCHY_PATH'
    EXPORTING
      customer        = vbak-kunnr  "sold-to party
      date            = sy-datum    "todays date
      htype           = 'A'         "Customer hierarchy A
      sales_channel   = vbak-vtweg  "distr. channel
      sales_division  = vbak-spart  "division
      sales_org       = vbak-vkorg  "sales org.
    TABLES
      hpath           = yhpath
    EXCEPTIONS
      hityp_not_exist = 1
      node_not_exist  = 2
      parvw_not_exist = 3
      OTHERS          = 4.
  IF sy-subrc = 0.
    LOOP AT yhpath.
      CASE sy-tabix.
        WHEN 1.
          komkd-yy0000sd_hienr01 = yhpath-kunnr.
        WHEN 2.
          komkd-yy0000sd_hienr02 = yhpath-kunnr.
        WHEN 3.
          komkd-yy0000sd_hienr03 = yhpath-kunnr.
        WHEN 4.
          komkd-yy0000sd_hienr04 = yhpath-kunnr.

ENDCASE.
    ENDLOOP.
  ENDIF.
endform.

5) modify MV45AFZA source form code to check whether different company or client enhancement  is active, If it is active, it is will be called
*---------------------------------------------------------------------*
*       FORM USEREXIT_MOVE_FIELD_TO_KOMKD                             *
*---------------------------------------------------------------------*
*       This userexit can be used to move some fields into the        *
*       communication workarea for product substitution.              *
*                                                                     *
*       This form is called from form KOMKD_KOMPD_FUELLEN.            *
*                                                                     *
*---------------------------------------------------------------------*
FORM USEREXIT_MOVE_FIELD_TO_KOMKD.
*  KOMKD-zzfield = xxxx-zzfield2.
*{   INSERT         TASK900030                                        1
*{   INSERT         TE1K900020                                        1
*** functionality: determine customer number of partner ZH (headquarter)
data: c_programm like y0000ca_userexit-yprogramm value 'MV45AFZA'.
data: c_funcname like y0000ca_userexit-yfuncname value
  'USEREXIT_MOVE_FIELD_TO_KOMKD'.
data: w_programm like y0000ca_userexit-yprogramm.
data: w_funcname like y0000ca_userexit-yfuncname.
data: w_active   like y0000ca_userexit-yactive.
data: w_subrc    like sy-subrc.
data: w_mandt    like sy-mandt.
*** check whether the user exit is activated for this client:
call function 'Y_0000CA_CHECK_USEREXIT'
  exporting
    pi_programm       = c_programm
    pi_funcname       = c_funcname
  importing
    pe_programm       = w_programm
    pe_funcname       = w_funcname
    pe_active         = w_active
    pe_subrc          = w_subrc.
*** if userexit is active execute it.
if sy-subrc = 0.
  if ( w_active <> ' ' ) and ( w_subrc = 0 ).
    w_mandt = sy-mandt. w_mandt+2(1) = '0'.
    case w_mandt.
      when '900' . 
        perform y0000sd_move_field_to_komkd.
*      when '400' .
*        perform y0077sd_move_field_to_komkd.
       when '410' . 
         perform y0076sd_move_field_to_komkd.
       when '440' . 
         perform y0031sd_move_field_to_komkd.
      when others.
    endcase.
  endif.
endif.
*}   INSERT
*}   INSERT
ENDFORM.
*eject

6) 建立一个自定义表维护哪些增强已经激活
 

7)建立检查激活函数
FUNCTION y_0000ca_check_userexit.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(PI_PROGRAMM) LIKE  Y0000CA_USEREXIT-YPROGRAMM
*"     REFERENCE(PI_FUNCNAME) LIKE  Y0000CA_USEREXIT-YFUNCNAME
*"  EXPORTING
*"     REFERENCE(PE_PROGRAMM) LIKE  Y0000CA_USEREXIT-YPROGRAMM
*"     REFERENCE(PE_FUNCNAME) LIKE  Y0000CA_USEREXIT-YFUNCNAME
*"     REFERENCE(PE_ACTIVE) LIKE  Y0000CA_USEREXIT-YACTIVE
*"     REFERENCE(PE_SUBRC) LIKE  SY-SUBRC
*"----------------------------------------------------------------------

TABLES: y0000ca_userexit.
  DATA:   w_client   LIKE y0000ca_userexit-ymandt.
*** first check whether the user exit is active in the current client:
  w_client = sy-mandt.
  SELECT SINGLE * FROM y0000ca_userexit CLIENT SPECIFIED
    WHERE yprogramm = pi_programm
      AND yfuncname = pi_funcname
      AND ymandt    = w_client.
*** if first check not successful check again with client xx0:
*** this client xx0 should exist in .
  IF sy-subrc NE 0.
    w_client+2(1) = '0'.
    SELECT SINGLE * FROM y0000ca_userexit CLIENT SPECIFIED
      WHERE yprogramm = pi_programm
        AND yfuncname = pi_funcname
        AND ymandt    = w_client.
  ENDIF.
*** if something was found return the values else only the return code:
  pe_subrc = sy-subrc.
  IF sy-subrc EQ 0.
    pe_active = y0000ca_userexit-yactive.
    pe_programm = y0000ca_userexit-yprogramm_exec.
    pe_funcname = y0000ca_userexit-yfuncname_exec.
  ELSE.
    CLEAR: pe_active.
    CLEAR: pe_programm.
    CLEAR: pe_funcname.
  ENDIF.
ENDFUNCTION.

如何编写多client多公司的增强相关推荐

  1. I2C driver编写指导二:编写i2c client driver指南

    原文地址::http://blog.csdn.net/guoshaobei/archive/2010/06/08/5656001.aspx 译者:郭少悲 日期:2010/06/08 源文:linux- ...

  2. Google 公司的 Java 语言编写规范

    为什么80%的码农都做不了架构师?>>>    大部分软件公司可能都有自己的代码编写规范,但是大部分的规范又是粗略到不行不行的,粗到可以忽略,粗略到不同人的代码可以各成一体,同时又符 ...

  3. SAP ECC 6.0有哪些增强功能

    Ecc6.0和R/3 有什么区别? Ecc6.0增加了哪些新的功能? 这些功能是否比原来加强. 还是用起来更方便了, 或者更容易了? ECC6.0 MM模块增强功能描述 1. 跨系统的货物转储: 转储 ...

  4. SD功能增强业务说明书

    1.     流程编码... 4 2.     流程简要描述... 4 3.     操作说明... 4 4.1.     销售合同... 4 1.   同步定价日期... 4 2.   单据附加数据 ...

  5. 10家最具创新性的机器学习公司

    来源:资本实验室 摘要:机器学习是实现人工智能的一种方法,通过使用算法来解析数据.从中学习,然后对现实世界中的事件做出预测和判断.机器学习已经在各个行业得到广泛应用. 近日<Analytics ...

  6. SAP概念之Client(集团)

    Client(集团)是SAP系统的一个组织单元/结构.该组织单元是最高层次的,也是所有实施SAP应用模块必须创建并维护的组织结构.每个Client在与其他业务.组织.技术等方面与其他Client都是独 ...

  7. 图文并茂——使用xfire编写webservice,并通过C#调用

    .首先建立一个web service工程: 点击finish之后,myeclipse自动帮你生成services.xml以及web应用目录结构,其中的services.xml是你导出服务的配置文件,注 ...

  8. Teradata天睿公司推出适用各种部署环境的全球最强分析数据库

    Teradata天睿公司(Teradata Corporation,纽交所:TDC)推出Teradata Everywhere™,成为业内首家在多种公有云.托管云和本地部署环境下部署全球最强海量并行处 ...

  9. PRD的编写竟然暗含这个思路

    作者:高扬   来源:简书 一.PRD的用户是谁? 首先,与大家先分享一句话:把需求文档当成一个"互联网产品"去管理,理解它的用户,关注它的体验,不停迭代,使其价值最大化.(引用) ...

最新文章

  1. 2021年春季学期-信号与系统-第十次作业参考答案
  2. 运动想象脑机接口中迁移学习的完整流程
  3. 网站优化也逃不过“细节决定成败”定律
  4. 内存映射文件进行写文件和读文件有啥不同_Linux中的mmap映射 [二]
  5. java数据结构之枚举
  6. springboot 切换日志实现
  7. cocos2d-x初探学习笔记(7)--CCProgressTimer
  8. CF 1025C Plasticine zebra
  9. 太辛苦的钱,我建议不要挣
  10. Linux基本的网络配置
  11. 怎么画六面体网格_使用Abaqus完成网格重划分分析3网格到网格的解映射
  12. 编程语言对比 引用数据类型-列表
  13. php loadclass,Laravel如何实现自动加载类
  14. 年轻人正在双11掀起国潮热
  15. 网吧计费系统数据库修复/网吧收银系统数据库恢复
  16. presscad图层LIsp_统赢presscad2010免安装版 32位/64位
  17. 月薪翻20倍,从小编辑到百度高级产品经理,我是如何打怪升级的
  18. linux抓包查对方的mac地址,1.根据MAC地址抓包
  19. JAVA实现:居民电费阶梯式计价器
  20. 无线投屏(智慧教室)

热门文章

  1. JavaBeans四个作用域 范围
  2. Ext.net中ComboBox如何绑定数据库中的值
  3. 【Java每日一题】20161123
  4. Android存储空间不足的解决办法
  5. 在SQL2005/SQL2008中CTE用法差异
  6. 做iOS开发的这2年:30而立投身iOS开发嫌晚?
  7. 【转】开源机器学习之RWeka
  8. 你应该学会的接口调试神器——Postman高级用法
  9. 英特尔裁员1.2万 CEO还在涨薪?
  10. Linux集群和自动化维1.5.1 服务器物理硬件的优化