一、引言
目前,多數(shù)國內(nèi)SAP(企業(yè))用戶在完成了ERP系統(tǒng)實(shí)施、應(yīng)用深化后,繼續(xù)開展其它業(yè)務(wù)領(lǐng)域信息化建設(shè),如客戶關(guān)系管理(CRM)、供應(yīng)商關(guān)系管理(SRM)、商品計(jì)劃管理(MAP)等。期間,這些用戶毫不猶豫的選擇了SAP旗艦下的其它產(chǎn)品,開始了本企業(yè)后ERP時(shí)代信息化應(yīng)用實(shí)施。事實(shí)上,就產(chǎn)品集成而言,SAP運(yùn)用中間件技術(shù)實(shí)現(xiàn)ERP、CRM、MAP等系統(tǒng)之間的業(yè)務(wù)集成與應(yīng)用整合。因此,SAP中間件技術(shù)應(yīng)用水平?jīng)Q定著業(yè)務(wù)集成的廣度和深度。筆者一直從事SAP中間件應(yīng)用研究和部署實(shí)踐,就筆者了解的情況而言,國內(nèi)企業(yè)SAP中間件應(yīng)用水平較為欠缺,這種缺陷不是來自軟件技術(shù)的本身,而是對軟件技術(shù)實(shí)現(xiàn)方式的理解存在偏差。為此,筆者總結(jié)了一套中間件應(yīng)用方法,與讀者分享。
二、基礎(chǔ)設(shè)置
解決實(shí)際業(yè)務(wù)需求,筆者假設(shè)了一個(gè)集成的業(yè)務(wù)場景:即:ERP(ECC 6.0 EHP1)與CRM(7.0, EHP1)之間的“主數(shù)據(jù)”與銷售憑證集成場景。
- 定義邏輯系統(tǒng):
邏輯系統(tǒng)在中間件技術(shù)中有著舉足輕重的地位,因此,必須為客戶端(Client)配置邏輯系統(tǒng)。
事務(wù)碼:SALE。
在創(chuàng)建邏輯系統(tǒng)并分配至相應(yīng)客戶端之后,需將進(jìn)行數(shù)據(jù)交互客戶端的邏輯系統(tǒng)在此處定義。
- 遠(yuǎn)程目標(biāo)以及遠(yuǎn)程用戶:
使用SM59創(chuàng)建遠(yuǎn)程目標(biāo);
使用SU01創(chuàng)建遠(yuǎn)程用戶,用戶權(quán)限暫時(shí)使用SAP_ALL,用戶類型為服務(wù)用戶。
- 中間件管理控制臺
事務(wù)碼:SMOEAC。
創(chuàng)建兩個(gè)R/3類型的SITE節(jié)點(diǎn),并分別指定節(jié)點(diǎn)屬性。
定制通過中間件交互的數(shù)據(jù)對象;
對象類型選擇Subscription,目前,僅定制BP“主數(shù)據(jù)”以及BP關(guān)系兩個(gè)對象。
- 上載對象定義:
在CRM系統(tǒng)中,可以通過R3AC3對初始裝載對象設(shè)置過濾條件,之后,通過R3AS進(jìn)行對象的初始裝載。但,前提需要在ERP系統(tǒng)中定制是否允許該對象上載。
ERP系統(tǒng)事務(wù)碼SM30: CRMRFCPAR。維護(hù)參數(shù)如下圖所示:
在這里,定義允許所有對象上載。另外,需要在視圖CRMCONSUM中激活CRM用戶。
在視圖CRMPAROLTP中定義CRM系統(tǒng)版本(該值可以和CRM的實(shí)際版本不一致)。
三、數(shù)據(jù)交互
在進(jìn)行客戶交互之前,首先要對ERP銷售組織以及客戶“主數(shù)據(jù)”的基礎(chǔ)配置信息進(jìn)行初始上載。
同步組織架構(gòu):
使用該路徑創(chuàng)建組織架構(gòu)根節(jié)點(diǎn),以便于從ERP傳遞的銷售組織及分配節(jié)點(diǎn)。(若根節(jié)點(diǎn)未生成BP編號,激活BP與HR集成)。
通過該事務(wù)在CRM端生成與ERP 端統(tǒng)一的組織架構(gòu)模型。在此,建議一次性生成全部組織。
同步之后,回到修改組織模型的事務(wù)中,維護(hù)銷售組織相關(guān)節(jié)點(diǎn)的功能和屬性。
- 基本定制對象上載:
針對客戶數(shù)據(jù)而言,在使用中間件同步客戶前,以下對象需從ERP上載至CRM。
DNL_CUST_KTOKD
DNL_CUST_S_AREA
DNL_CUST_SALES
如果出現(xiàn)定制對象不能上載或在R3AM1中一直處于“Running”狀態(tài),請進(jìn)行以下處理:
檢查RFC用戶權(quán)限是否存在權(quán)限對象“SCRMMW”,且設(shè)置如下圖:
檢查ERP端數(shù)據(jù)表CRMATAB是否為空,若為空,在CRM端執(zhí)行Report:
“SMOF_FILL_CRMATAB”,選擇相應(yīng)的對象和RFC目標(biāo),執(zhí)行,即可在ERP端將被上載的數(shù)據(jù)表維護(hù)在CRMATAB中。
- ERP中維護(hù)賬戶組及編號范圍:
客戶端 賬戶組 編號范圍 是否內(nèi)部編號
700 ZA01 0005100000-----005199999 否
900 ZA03 0005300000-----005199999 否
- CRM維護(hù)BP組及編號范圍:
客戶端 BP組 編號范圍 是否內(nèi)部編號
700 ZA01 0005100000-----005199999 否
700 ZA03 0005300000-----005199999 否
- ERP系統(tǒng)中維護(hù)客戶交互映射關(guān)系:
事務(wù)碼:PIDE(需分別在900和700維護(hù))。
客戶端(700):
客戶端(900):
這里的映射關(guān)系可以有很多種,此處使用了最簡單的方法。同時(shí),過濾沒有銷售組織的客戶數(shù)據(jù)。
ERP中事務(wù)碼:PIVV(原則上將該功能也可以在CRM系統(tǒng)中通過R3AC1中的過濾條件來實(shí)現(xiàn))
檢查雙方的字段設(shè)置是否一致。(ERP中按照賬戶組,CRM中按照BP角色)。
四、關(guān)鍵技術(shù)實(shí)現(xiàn)
阻止向錯(cuò)誤的SITE發(fā)送BDOC:
對于一個(gè)CRM與一個(gè)ERP的兩個(gè)客戶端交互,SAP提供Multiple Exchange Projects (MEP),應(yīng)該是可以解決這個(gè)問題的,但是,配置相對較為復(fù)雜。且需要引入Solution Manager系統(tǒng),故放棄。具體可以參照Help:Configuring the Multiple Back-End Scenario 。
簡單辦法如下:
SE38:/1CRMGC/SAPLBUPA_MAIN;
在IDES中該函數(shù)組包含了兩個(gè)FUNCTION,但是在DEV中僅包含一個(gè)。
IDES中代碼修正放在FUNCTION“/1CRMGC/HTBUPA_MAIN_RRR”。
DEV中代碼修正放在FUNCTION“/1CRMGC/CGBUPA_MAIN_RRR”。
以下代碼僅為實(shí)例:具體視實(shí)際需求而定。
* fill the recipient list: get dependent sites / sitetypes
FREE recipients[].
CALL FUNCTION 'SMOH_FILL_RECIPIENT_LIST'
EXPORTING
i_calcrec = lt_sites
i_sendrec = send_to_sites
CHANGING
ct_recipients = recipients.
*get bp information by rootid or queue name of header add by yueshuai
select single * from but000 into ls_but000 where partner_guid = header-root_id.
if sy-subrc = 0.
*delete the site by the bp number from header
loop at recipients into ls_recipient.
if ls_recipient-SITE_ID = '20CF3083320C1EE18AC88598551B453D' and ls_but000-partner not BETWEEN '0005300000' and '0005399999'.
delete TABLE recipients from ls_recipient.
elseif ls_recipient-SITE_ID = '20CF3083320C1EE18AC34FD07153653D' and ls_but000-partner not BETWEEN '0005100000' and '0005199999'.
delete TABLE recipients from ls_recipient.
endif.
endloop.
endif.
向BDoc中添加CRM增強(qiáng)信息或修改BDOC
復(fù)制函數(shù)SAMPLE_PROCESS_SMOUTIL2為Z_SAMPLE_PROCESS_SMOUTIL2
SM30——》TBE24添加Product“ZBP_ADD”,并設(shè)置激活(很重要)。
SM34——》TPS34維護(hù)Process“SMOUTIL2”,維護(hù)Function Z_SAMPLE_PROCESS_SMOUTIL2,以及Product“ZBP_ADD”。
具體代碼如下:(以下代碼僅為示例)
CALL FUNCTION 'CRM_BUPA_BAPIMTCS_TO_MAIN'
IMPORTING
et_bp_extern = lt_complex
CHANGING
ct_bapimtcs = t_bapimtcs[].
LOOP AT lt_complex INTO ls_complex.
* set customer
ls_partner = ls_complex-header-object_instance.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_partner-bpartner
IMPORTING
output = lv_customer.
* get Extension Company Field from database
SELECT SINGLE *
INTO CORRESPONDING FIELDS OF ls_ci_eew_but000
FROM but000
WHERE partner = lv_customer.
CHECK sy-subrc = 0.
* --------------------
IF ls_ci_eew_but000-zzfld000000 IS INITIAL.
ls_ci_eew_but000-zzfld000000 = ls_ci_eew_but000- zzfld000000.
ENDIF.
IF ls_ci_eew_but000-zzfld000001 IS INITIAL.
ls_ci_eew_but000-zzfld000001 = ls_ci_eew_but000- zzfld000001.
ENDIF.
DESCRIBE TABLE t_bapimtcs[] LINES sy-tfill.
READ TABLE t_bapimtcs INDEX sy-tfill.
ls_mtcs_lite-currdno = t_bapimtcs-currdno + 1.
ls_mtcs_lite-objkey = t_bapimtcs-objkey.
ls_mtcs_lite-relkey = t_bapimtcs-relkey.
CLEAR t_bapimtcs.
MOVE-CORRESPONDING ls_mtcs_lite TO t_bapimtcs.
t_bapimtcs-tabname = 'CI_EEW_BUT000'.
* input format "2公司代碼
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_ci_eew_but000-zzfld000000
IMPORTING
output = ls_ci_eew_but000-zzfld000000. "3統(tǒng)馭科目
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_ci_eew_but000-zzfld000001
IMPORTING
output = ls_ci_eew_but000-zzfld000001.
CONCATENATE lv_customer ls_ci_eew_but000-zzfld000000 ls_ci_eew_but000-zzfld000001 sy-uname INTO t_bapimtcs-data.
APPEND t_bapimtcs.
ENDLOOP.
在ERP中接收并處理BDoc:
復(fù)制函數(shù)SAMPLE_INTERFACE_DE_BALE為Z_SAMPLE_INTERFACE_DE_BALE。
SM30——》TBE24 添加Product“ZBP_ADD”.
SM30——》TBE34 添加Process“DE_BALE”
具體代碼如下:
READ TABLE ct_idoc_data WITH KEY segnam = 'E1KNA1M'.
ls_e1kna1m = ct_idoc_data-sdata.*
*map BAPIMTCS table to complex structure table (partners)
CALL FUNCTION 'PI_BP_BAPIMTCS_TO_MAIN'
EXPORTING
it_bapimtcs = it_bapimtcs[]
IMPORTING
et_bp_extern = lt_complex
et_not_processed_bapimtcs = lt_not_processed.
LOOP AT lt_complex INTO ls_complex.
* set customer
ls_partner = ls_complex-header-object_instance.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_partner-bpartner
IMPORTING
output = lv_customer.
*-----------------------------------------------------------------------------------------
* 公司代碼數(shù)據(jù)
CONCATENATE lv_customer '*' INTO lv_company_data.
LOOP AT it_bapimtcs WHERE tabname = 'CI_EEW_BUT000' AND data CP lv_company_data.
MOVE it_bapimtcs-data TO ls_crm_data.
REFRESH lt_knb1.
IF ls_crm_data-bukrs IS NOT INITIAL.
lt_knb1-kunnr = ls_crm_data-kunnr.
lt_knb1-bukrs = ls_crm_data-bukrs. "2公司代碼
lt_knb1-akont = ls_crm_data-akont. "3統(tǒng)馭科目
lt_knb1-ernam = ls_crm_data-ernam. "8CRM中的用戶名
lt_knb1-erdat = sy-datum.
CALL FUNCTION 'Z_CUSTOMER_KNB1_OUT'
CHANGING
IT_KNB1 = lt_knb1 .
ENDIF.
ENDLOOP. "'CI_EEW_BUT000'
ENDLOOP. "end loop ls_complex
- 實(shí)現(xiàn)公司代碼數(shù)據(jù)創(chuàng)建
SE38:LVV02F42;
實(shí)現(xiàn)增強(qiáng)點(diǎn):
ENHANCEMENT-POINT EHP603_LVV02F42_01 SPOTS ES_SAPLVVO2_P2P.
ENHANCEMENT 1 Z_BP_COMPANY. "active version
DATA : it_knb1 TYPE knb1,is_knb1 type knb1.
DATA : ls_DYNTAB like LINE OF DYNTAB.
DATA : ls_DYNPROP LIKE LINE OF DYNPROP.
DATA : lv_index type i.
CALL FUNCTION 'Z_CUSTOMER_KNB1_IN'
CHANGING
IT_KNB1 = it_knb1 .
*填充BKN00中的公司代碼
IF BKN00-BUKRS = '/' AND IT_KNB1-BUKRS IS NOT INITIAL.
BKN00-BUKRS = IT_KNB1-BUKRS.
*填充KNB1中的數(shù)據(jù)
BKNB1-AKONT = IT_KNB1-AKONT.
ENDIF.
READ TABLE DYNTAB TRANSPORTING NO FIELDS WITH key DYNNR = '0360'.
if sy-subrc = 0.
lv_index = sy-tabix + 1.
endif.
check IT_KNB1-BUKRS is not INITIAL.
*添加公司代碼屏幕
LS_DYNTAB-DYNNR = '0210'. LS_DYNTAB-DTYPE = 'F'.insert LS_DYNTAB into DYNTAB INDEX lv_index. lv_index = lv_index + 1.
LS_DYNTAB-DYNNR = '0215'. LS_DYNTAB-DTYPE = 'F'.insert LS_DYNTAB into DYNTAB INDEX lv_index. lv_index = lv_index + 1.
LS_DYNTAB-DYNNR = '0220'. LS_DYNTAB-DTYPE = 'F'.insert LS_DYNTAB into DYNTAB INDEX lv_index. lv_index = lv_index + 1.
LS_DYNTAB-DYNNR = '0230'. LS_DYNTAB-DTYPE = 'F'.insert LS_DYNTAB into DYNTAB INDEX lv_index. lv_index = lv_index + 1.
*添加屏幕中需要維護(hù)的字段
LS_DYNPROP-DNUM = '0210'.
LS_DYNPROP-FNAM = 'KNB1-AKONT'.
LS_DYNPROP-TABNAME = 'KNB1'.
LS_DYNPROP-FIELDNAME = 'AKONT'.
LS_DYNPROP-RESULT = '.'.
LS_DYNPROP-MASK = 'F'.
APPEND LS_DYNPROP to DYNPROP.
LS_DYNPROP-DNUM = '0215'.
LS_DYNPROP-FNAM = 'KNB1-ZTERM'.
LS_DYNPROP-TABNAME = 'KNB1'.
LS_DYNPROP-FIELDNAME = 'ZTERM'.
LS_DYNPROP-RESULT = '.'.
LS_DYNPROP-MASK = 'F'.
APPEND LS_DYNPROP to DYNPROP.
LS_DYNPROP-DNUM = '0220'.
LS_DYNPROP-FNAM = 'KNB1-MAHNA'.
LS_DYNPROP-TABNAME = 'KNB5'.
LS_DYNPROP-FIELDNAME = 'MAHNA'.
LS_DYNPROP-RESULT = '.'.
LS_DYNPROP-MASK = 'F'.
APPEND LS_DYNPROP to DYNPROP.
LS_DYNPROP-DNUM = '0230'.
LS_DYNPROP-FNAM = 'KNB1-VRSNR'.
LS_DYNPROP-TABNAME = 'KNB1'.
LS_DYNPROP-FIELDNAME = 'VRSNR'.
LS_DYNPROP-RESULT = '.'.
LS_DYNPROP-MASK = 'F'.
APPEND LS_DYNPROP to DYNPROP.
perform check_BKNB1 .
ENDENHANCEMENT.
五、其他增強(qiáng)方法
CRM和ERP中相關(guān)隊(duì)列處理增強(qiáng);
ERP中SM30——》COM_BUPA_CALL_FU;
CRM中SM30——》CRMC_BUT_CALL_FU;
在這里分配自定義函數(shù)以及合適的項(xiàng)目編號和處理事件以及對象,可以自行處理一些交互信息,不再細(xì)述。
PIDE中CRM——》ERP映射增強(qiáng)
不難發(fā)現(xiàn)在事務(wù)碼PIDE中維護(hù)CRM-》ERP的映射時(shí),系統(tǒng)只能維護(hù)一條(這個(gè)是有道理的,并且必須如此),如果我們需要CRM中的B類型客戶映射多個(gè)ERP賬戶組,就需要使用下邊這個(gè)BTE。
事件DE_KTOKD 函數(shù)COM_INTERFACE_DE_KTOKD_ISU
處理方法類似上邊處理BDoc。
六、應(yīng)用效果
客戶端(700)效果:
客戶端(900)效果:
七、中間件問題處理舉例
CRM系統(tǒng)中創(chuàng)建完客戶之后,觀察SMW01顯示:
通過SMW02A分析:
提示必輸字段沒有輸入,但檢查ERP中相關(guān)賬戶組的屏幕字段設(shè)置以及CRM中相關(guān)的字段設(shè)置,均為發(fā)現(xiàn)異常。出現(xiàn)此類情況可以使用下述方法解決:
選中SMW01中出錯(cuò)的條目,在命令行處輸入/H,點(diǎn)擊重新處理Bdoc消息。 ,之后進(jìn)入調(diào)試模式。
點(diǎn)擊setting按鈕,選中In background task: Do not process Transaction ID。
點(diǎn)擊鍵盤F8。
事務(wù)碼SMQ1中會產(chǎn)生隊(duì)列如下圖所示:
雙擊隊(duì)列名:
再次雙擊隊(duì)列名:
選中改行,點(diǎn)擊調(diào)試:
進(jìn)入調(diào)試模式后:按下圖路徑為語句CALL TRANSACTION設(shè)置斷點(diǎn)。
確定后。點(diǎn)擊鍵盤F8.
此時(shí)屏幕顯示如圖:
雙擊CALL_TRANSACTION_MODE,將N改為A,并點(diǎn)擊修改按鈕。
點(diǎn)擊F8。
此時(shí),進(jìn)入ERP客戶維護(hù)界面:根據(jù)日常維護(hù)客戶信息的習(xí)慣,不難發(fā)現(xiàn)是哪個(gè)地方在作怪。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標(biāo)題:SAP ERP系統(tǒng)中間件技術(shù)應(yīng)用
本文網(wǎng)址:http://www.ezxoed.cn/html/consultation/10820210639.html