如何编写多client多公司的增强
来源:互联网 发布:横截面数据分析 编辑:程序博客网 时间:2024/05/18 00:27
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多公司的增强
- 如何编写多client多公司的增强
- socket套接字编写多线程多进程的server和client
- PMM-Client的Client-Name如何修改
- 基于TCP的server和client编写。
- 如何增强人的心理素质
- 如何增强人的心理素质
- 如何增强自己的脑力
- 如何增强自己的自信心?
- 如何升级oracle的client
- 如何更改默认的Client
- 迅速增强公司信息安全性的10大划算方式
- 工业通信:同一计算机上的OPC-Client如何与多个网络OPC-Server通讯?
- makefile多文件如何编写
- 编写一个公司的面试题问题
- 如何编写复杂的多表查询SQL
- 如何编写复杂的多表查询SQL
- 如何编写复杂的多表查询SQL
- 解读linux对string.h函数的实现
- JAVA提取系统相关属性
- Subversion Native Library Not Available
- 一个完整的分页类
- byte 和boolean,int,String,char,short,long之间的转换
- 如何编写多client多公司的增强
- Using GLSL with SDL
- 2010年中南大学笔试题(JAVA)
- firefox的正则陷阱
- MPEG2 TS基本概念和数据结构(转)
- 系统架构师谈企业应用架构之系统建模1
- 关于如何更改远程桌面端口的解决办法
- 设计模式
- 操作系统特别兴趣小组网址