物料主数据(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.

以上几步完成后,就可以传输增强的字段了

猜你喜欢

转载自blog.csdn.net/xiayutian_c/article/details/88038385