物料主数据(PRODUCT)增强字段后怎么使用middleware同步?
数据流向ECC-->CRM
1. ECC端,MARA增强字段(步骤略)
2. CRM端,增强attributes和set type(TCODE:COMM_ATTRSET)
3. ECC端,SM30维护TBE24,增加ZMAT
set type建完以后一定要transport,这一步非常非常重要,否则到BDOC中没有新增强的结构
创建完成后,COMM_HIERARCHY把创建好的set type分配给相应hierarchy的catalog,这一步完成后,COMMPR01中就可以看到增强的字段了。
4. ECC端,SM30维护TPS34,增加 CRM0_200, Z_CM_000_MATDATA_TRANSFER_OUT,ZMAT
其中ZMAT为刚TBE24维护的PRODUCT,Z_CM_000_MATDATA_TRANSFER_OUT为即将新建的出口函数,COPY函数 SAMPLE_PROCESS_CRM0_200 创建,
FUNCTION z_cm_000_matdata_transfer_out.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(I_OBJ_CLASS) LIKE BAPICRMOBJ-OBJCLASS
*" VALUE(I_OBJ_NAME) LIKE BAPICRMOBJ-OBJ_NAME
*" VALUE(I_BAPICRMDH2) LIKE BAPICRMDH2 STRUCTURE BAPICRMDH2
*" OPTIONAL
*" VALUE(I_KEYWORD_IN) LIKE CRM_PARA-KEYWORD_IN
*" VALUE(I_CRMRFCPAR) LIKE CRMRFCPAR STRUCTURE CRMRFCPAR OPTIONAL
*" EXPORTING
*" VALUE(E_DO_NOT_SEND) LIKE CRM_PARA-XFELD
*" TABLES
*" T_INT_TABLES STRUCTURE BAPIMTCS
*" T_BAPISTRUCT STRUCTURE BAPIMTCS
*" T_MESSAGES STRUCTURE BAPICRMMSG
*" T_KEY_INFO STRUCTURE BAPICRMKEY
*" T_OTHER_INFO STRUCTURE BAPIEXTC
*" T_BAPIIDLIST STRUCTURE BAPIIDLIST
*" CHANGING
*" VALUE(C_BAPICRMDH2) LIKE BAPICRMDH2 STRUCTURE BAPICRMDH2
*" VALUE(C_RFCDEST) LIKE CRMRFCPAR STRUCTURE CRMRFCPAR
*" VALUE(C_OBJNAME) LIKE BAPICRMOBJ-OBJ_NAME
*"----------------------------------------------------------------------
DATA loc_objkt TYPE aeobjekt.
CONSTANTS: wl_material TYPE obj_name VALUE 'MATERIAL',
wl_mara TYPE tabname VALUE 'MARA',
wl_zs02 TYPE strng250 VALUE 'ZS02',
wl_41 TYPE aetyp VALUE '41'.
CONSTANTS: c_field1 TYPE strng250 VALUE 'ZZCPZ',
c_field2 TYPE strng250 VALUE 'ZZLY',
c_field3 TYPE strng250 VALUE 'ZZFWCP',
c_field4 TYPE strng250 VALUE 'ZZXMJB',
c_field5 TYPE strng250 VALUE 'ZZPXSC',
c_field6 TYPE strng250 VALUE 'ZZJFFS',
c_field7 TYPE strng250 VALUE 'ZZZDXYS',
c_field8 TYPE strng250 VALUE 'ZZXSFW',
c_field9 TYPE strng250 VALUE 'ZZPXNR',
c_field10 TYPE strng250 VALUE 'ZZSMZQZT',
c_field11 TYPE strng250 VALUE 'ZZGLCOA',
c_field12 TYPE strng250 VALUE 'ZZKSJX',
c_field13 TYPE strng250 VALUE 'ZZSKYY'.
FIELD-SYMBOLS: <fs_mara> TYPE mara.
DATA: ls_other_info TYPE bapiextc.
DATA: BEGIN OF ls_addfields,
zzcpz LIKE mara-zzcpz,
zzfwcp LIKE mara-zzfwcp,
zzxmjb LIKE mara-zzxmjb,
zzjffs LIKE mara-zzjffs,
zzskyy LIKE mara-zzskyy,
zzpxsc LIKE mara-zzpxsc,
zzksjx LIKE mara-zzksjx,
zzglcoa LIKE mara-zzglcoa,
zzly LIKE mara-zzly,
zzxsfw LIKE mara-zzxsfw,
zzzdxys LIKE mara-zzzdxys,
zzsmzqzt LIKE mara-zzsmzqzt,
zzpxnr LIKE mara-zzpxnr,
END OF ls_addfields.
DEFINE fill_fields.
CLEAR ls_other_info.
ls_other_info-field1 = loc_objkt. "物料号
ls_other_info-field2 = &1. "字段名称
ls_other_info-field3 = &2. "字段值
APPEND ls_other_info TO t_other_info.
END-OF-DEFINITION.
CASE i_obj_name.
WHEN 'MATERIAL'.
LOOP AT t_int_tables INTO DATA(ls_t_int_tables) WHERE tabname = wl_mara.
ASSIGN ls_t_int_tables-data TO <fs_mara> CASTING.
loc_objkt = <fs_mara>-matnr.
MOVE-CORRESPONDING <fs_mara> TO ls_addfields.
IF <fs_mara> IS ASSIGNED.
* ls_other_info-field1 = loc_objkt. "物料号
* ls_other_info-field2 = c_field1. "字段名称
* ls_other_info-field3 = ls_addfields-zzcpz. "字段值
* APPEND ls_other_info TO t_other_info.
fill_fields c_field1 ls_addfields-zzcpz.
fill_fields c_field2 ls_addfields-zzly.
fill_fields c_field3 ls_addfields-zzfwcp.
fill_fields c_field4 ls_addfields-zzxmjb.
fill_fields c_field5 ls_addfields-zzpxsc.
fill_fields c_field6 ls_addfields-zzjffs.
fill_fields c_field7 ls_addfields-zzzdxys.
fill_fields c_field8 ls_addfields-zzxsfw.
fill_fields c_field9 ls_addfields-zzpxnr.
fill_fields c_field10 ls_addfields-zzsmzqzt.
fill_fields c_field11 ls_addfields-zzglcoa.
fill_fields c_field12 ls_addfields-zzksjx.
fill_fields c_field13 ls_addfields-zzskyy.
ENDIF.
ENDLOOP.
WHEN OTHERS.
"Other Process
ENDCASE.
ENDFUNCTION.
上面函数的主要目的就是把新增强的字段数据从MARA append到t_other_info。
5. CRM端,BADI增强 product_customer2,增强方法MAP_R3_TO_CRM_MATERIAL,这里的目的就是把传过来的数据append到bdoc中
METHOD if_ex_product_customer2~map_r3_to_crm_material.
DATA:
int_categories TYPE comt_prod_cat_rel_tab,
int_cat_settype_rel TYPE comt_cat_frag_rel_tab,
int_cat_settype_rel_all TYPE comt_cat_frag_rel_tab,
fs_other_info TYPE bapiextc,
fs_marc LIKE LINE OF it_marc,
fs_cat_settype_rel TYPE comt_cat_frag_rel,
fs_settype TYPE comt_settype_ext,
fs_category TYPE comt_prod_cat_rel,
fs_category_bdoc TYPE comt_prod_cat_rel_maintain,
fs_zcustdata TYPE zs02_maintain,
loc_matnr TYPE strng250.
CONSTANTS: wl_zsr_addldata TYPE comt_frgtype_id VALUE 'ZS02',
wl_0000000000 TYPE comt_pr_key_type VALUE '0000000000',
wl_x TYPE char1 VALUE 'X'.
CALL FUNCTION 'COM_PROD_CAT_REL_READ_WITH_PR'
EXPORTING
iv_product_guid = cs_product_bdoc-header-com_product-product_guid
iv_update_buffer = space
IMPORTING
et_set = int_categories.
LOOP AT cs_product_bdoc-header-categories INTO fs_category_bdoc.
MOVE-CORRESPONDING fs_category_bdoc-data TO fs_category.
READ TABLE int_categories WITH KEY hierarchy_guid = fs_category-hierarchy_guid TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
MODIFY int_categories FROM fs_category INDEX sy-tabix.
ELSE.
APPEND fs_category TO int_categories.
ENDIF.
ENDLOOP.
LOOP AT int_categories INTO fs_category.
CALL FUNCTION 'COM_CAT_FRAG_REL_READ'
EXPORTING
iv_category_guid = fs_category-category_guid
IMPORTING
et_cat_frag_rel = int_cat_settype_rel
EXCEPTIONS
wrong_call = 1
OTHERS = 2.
IF sy-subrc = 0.
APPEND LINES OF int_cat_settype_rel TO int_cat_settype_rel_all.
ENDIF.
ENDLOOP.
DELETE ADJACENT DUPLICATES FROM int_cat_settype_rel_all.
LOOP AT int_cat_settype_rel_all INTO fs_cat_settype_rel.
CALL FUNCTION 'COM_SETTYPE_READ_SINGLE'
EXPORTING
iv_settype_guid = fs_cat_settype_rel-frgtype_guid
IMPORTING
es_settype = fs_settype
EXCEPTIONS
not_found = 1
no_import_values = 2
no_text_found = 3
OTHERS = 4.
IF sy-subrc <> 0.
CONTINUE.
* Implement suitable error handling here
ENDIF.
CASE fs_settype-frgtype_id.
WHEN wl_zsr_addldata.
* SELECT SINGLE guid
* INTO fs_zcustdata-relation-key_guid
* FROM mdm_pr0000000000
* WHERE key_type = wl_0000000000.
fs_zcustdata-relation-owner = wl_x.
fs_zcustdata-relation-logsys = cs_product_bdoc-header-com_product-logsys.
fs_zcustdata-data-frg_guid = fs_settype-frgtype_guid.
loc_matnr = is_mara-material.
LOOP AT it_other_info INTO fs_other_info WHERE field1 = loc_matnr.
CASE fs_other_info-field2.
WHEN 'ZZCPZ'.
fs_zcustdata-data-zz0010 = fs_other_info-field3.
fs_zcustdata-data_x-zz0010 = wl_x.
* APPEND fs_zcustdata TO cs_product_bdoc-data-zs02.
WHEN 'ZZFWCP'.
fs_zcustdata-data-zz0011 = fs_other_info-field3.
fs_zcustdata-data_x-zz0011 = wl_x.
WHEN 'ZZXMJB'.
fs_zcustdata-data-zz0012 = fs_other_info-field3.
fs_zcustdata-data_x-zz0012 = wl_x.
WHEN 'ZZJFFS'.
fs_zcustdata-data-zz0013 = fs_other_info-field3.
fs_zcustdata-data_x-zz0013 = wl_x.
WHEN 'ZZSKYY'.
fs_zcustdata-data-zz0014 = fs_other_info-field3.
fs_zcustdata-data_x-zz0014 = wl_x.
WHEN 'ZZPXSC'.
fs_zcustdata-data-zz0015 = fs_other_info-field3.
fs_zcustdata-data_x-zz0015 = wl_x.
WHEN 'ZZKSJX'.
fs_zcustdata-data-zz0016 = fs_other_info-field3.
fs_zcustdata-data_x-zz0016 = wl_x.
WHEN 'ZZGLCOA'.
fs_zcustdata-data-zz0017 = fs_other_info-field3.
fs_zcustdata-data_x-zz0017 = wl_x.
WHEN 'ZZLY'.
fs_zcustdata-data-zz0018 = fs_other_info-field3.
fs_zcustdata-data_x-zz0018 = wl_x.
WHEN 'ZZXSFW'.
fs_zcustdata-data-zz0019 = fs_other_info-field3.
fs_zcustdata-data_x-zz0019 = wl_x.
WHEN 'ZZZDXYS'.
fs_zcustdata-data-zz0020 = fs_other_info-field3.
fs_zcustdata-data_x-zz0020 = wl_x.
WHEN 'ZZSMZQZT'.
fs_zcustdata-data-zz0021 = fs_other_info-field3.
fs_zcustdata-data_x-zz0021 = wl_x.
WHEN 'ZZPXNR'.
fs_zcustdata-data-zz0022 = fs_other_info-field3.
fs_zcustdata-data_x-zz0022 = wl_x.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
APPEND fs_zcustdata TO cs_product_bdoc-data-zs02.
APPEND fs_settype-frgtype_id TO cs_product_bdoc-data-mnt_settype.
ENDCASE.
ENDLOOP.
ENDMETHOD.
以上几步完成后,就可以传输增强的字段了