In ERP we can create new material type by copying from existing one using tcode OMS2:


This new type could be downloaded into CRM system via customizing download. A product category with prefix MAT_ will be automatically created.

And here below is source code to create new product category using MAT_ as parent category by ABAP code.

METHOD replicate_category.    CONSTANTS:      BEGIN OF gc_application,        sales      TYPE comt_application VALUE '01', "r3-produkthier        purchasing TYPE comt_application VALUE '02', "r3 mat class        product    TYPE comt_application VALUE '03', "r3 mat types        config     TYPE comt_application VALUE '04',        internet   TYPE comt_application VALUE '05',      END OF gc_application.    CONSTANTS:      BEGIN OF gc_product_type,        material  TYPE comt_product_type VALUE '01',        service   TYPE comt_product_type VALUE '02',        finance   TYPE comt_product_type VALUE '03',        ip_prod   TYPE comt_product_type VALUE '04',        warranty  TYPE comt_product_type VALUE '05',        tradeitem TYPE comt_product_type VALUE '06',        fs_prod   TYPE comt_product_type VALUE '07',      END OF gc_product_type.    rv_success = abap_false.    DATA: lv_hierarchy_guid TYPE comt_hierarchy_guid,          lv_parent_guid    TYPE comt_category_guid,          lt_categoryt      TYPE comt_categoryt_tab.* Prerequisite: the corresponding hierarchy is already downloaded from ERP* Read the hierarchy which is assigned to application 03* (product type material) in transaction COMM_PRAPPLCAT    CALL FUNCTION 'COM_HIERARCHY_READ_WITH_APPL'      EXPORTING        iv_application    = gc_application-product        iv_product_type   = gc_product_type-material      IMPORTING        ev_hierarchy_guid = lv_hierarchy_guid      EXCEPTIONS        not_found         = 1        OTHERS            = 2.    CHECK sy-subrc = 0.    DATA(ls_cat_text) = VALUE comt_categoryt( langu = sy-langu category_text = iv_text    text_upper_case = iv_text ).    TRANSLATE ls_cat_text-text_upper_case TO UPPER CASE.    APPEND ls_cat_text TO lt_categoryt.    select single category_guid into lv_parent_guid FROM comm_category       where category_id = 'MAT_'.    CALL FUNCTION 'COM_PRODCAT_API_CREATE_CAT'      EXPORTING        iv_category_id           = iv_cat_id        iv_hierarchy_guid        = lv_hierarchy_guid        iv_parent_guid           = lv_parent_guid        iv_product_type          = gc_product_type-material        it_categoryt             = lt_categoryt        iv_logsys                = iv_log_sys " 'QI3CLNT502'        iv_non_assignable        = abap_false      EXCEPTIONS        hierarchy_not_maintained = 1        wrong_call               = 2        category_id_exists       = 3        id_scheme_error          = 4        error                    = 5        OTHERS                   = 6.    IF sy-subrc <> 0.      MESSAGE ID sy-msgid TYPE 'X' NUMBER sy-msgno              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.      RETURN.    ENDIF.    CALL FUNCTION 'COM_PRODUCT_CATEGORY_SAVE_ALL'      EXPORTING        iv_update_task    = ' '        iv_update_pme     = ' '        iv_hierarchy_guid = lv_hierarchy_guid      EXCEPTIONS        internal_error    = 1        OTHERS            = 2.    ASSERT sy-subrc = 0.    COMMIT WORK AND WAIT.    rv_success = abap_true.  ENDMETHOD.

Method signature:

How to use this code

Run method in SE24, specify new product category id via parameter iv_cat_id:

Execute method, ensure ev_success equals to abap_true.

Once created, the category could be searched via tcode COMM_HIERARCHY:

And the category could be used to create new product in WebUI:


要获取更多Jerry的原创文章,请关注公众号"汪子熙":