IPM: 如何通过Granting Reference relationship实现多个IP product的hierarchy结构

Created by Jerry Wang on Mar 10, 2014

首先创建一个IP product作为hierarchy的root 节点,注意product category需要assign下列以IPM开头的settype:
IPM: 如何通过Granting Reference relationship实现多个IP product的hierarchy结构

再创建两个子IP product, generation formula 维护为008 - Rights Owned with Granting Reference
IPM: 如何通过Granting Reference relationship实现多个IP product的hierarchy结构
IPM: 如何通过Granting Reference relationship实现多个IP product的hierarchy结构
回到root IP product,在 Underlying Components( Granting Ref.) assignment block里将两个children加到List里去。
IPM: 如何通过Granting Reference relationship实现多个IP product的hierarchy结构
save之后在IP Details的hierarchy tree里面就能看到两个children IP product了。
IPM: 如何通过Granting Reference relationship实现多个IP product的hierarchy结构

 

 

IPM: 如何通过Granting Reference relationship实现多个IP product的hierarchy结构 i042416 added the CRM Product label on Sep 29, 2017

IPM: 如何通过Granting Reference relationship实现多个IP product的hierarchy结构

Owner Author

i042416 commented on Sep 30, 2017

批量创建IP product并自动将其assign到指定的Acquisition contract里

Created by Jerry Wang on Mar 18, 2014

执行report,指定自动生成IP基于的template IP ID, 和需要assign到的contract ID以及需要批量生成IP的个数。
IPM: 如何通过Granting Reference relationship实现多个IP product的hierarchy结构
执行report之后打印批量生成的IP product ID以及成功assign信息:
IPM: 如何通过Granting Reference relationship实现多个IP product的hierarchy结构
到UI查看发现批量生成的product已经成功assign到Contract上:

IPM: 如何通过Granting Reference relationship实现多个IP product的hierarchy结构
report source code如下:

REPORT  zgenerate_assign_ip.

PARAMETERS: num type i,
            prod type comm_product-product_id OBLIGATORY DEFAULT 'MEETMYFRIENDTOM',
            order TYPE CRMD_ORDERADM_H-object_id OBLIGATORY DEFAULT '5600000010'.

DATA: lo_core                TYPE REF TO cl_crm_bol_core,
      lo_collection          TYPE REF TO if_bol_entity_col,
      lv_query_name          TYPE crmt_ext_obj_name,
      lt_reltype_filter      TYPE comt_il_reltype_tab,
      lv_product_id          TYPE comm_product-product_id,
      lt_selection_parameter TYPE genilt_selection_parameter_tab,
      ls_selection_parameter TYPE genilt_selection_parameter,
      ls_query_parameters    TYPE genilt_query_parameters.

ls_selection_parameter-attr_name = 'OBJECTID'.
ls_selection_parameter-option =  'EQ'.
ls_selection_parameter-sign = 'I'.
ls_selection_parameter-low =  order.
APPEND ls_selection_parameter TO lt_selection_parameter.

ls_query_parameters-max_hits = 1.
lv_query_name = 'BTAdvQueryAUI'.

lo_core = cl_crm_bol_core=>get_instance( ).
lo_core->load_component_set( 'BT' ).

lo_collection = lo_core->dquery(
        iv_query_name               = lv_query_name
        it_selection_parameters     = lt_selection_parameter
        is_query_parameters         = ls_query_parameters ).


DATA(lo_contract) = lo_collection->get_current( ).
CHECK lo_contract IS NOT INITIAL.
DATA(locked) = lo_contract->lock( ).

CHECK locked  = 'X'.

DATA(lr_item_handler)  = cl_crm_ipm_item_handler_provid=>get_instance( lo_contract ).
ASSERT lr_item_handler IS NOT INITIAL.

lv_query_name = 'ProdAdvSearchRgProducts'.
CLEAR: lt_selection_parameter.
ls_selection_parameter-attr_name = 'PRODUCT_ID'.
ls_selection_parameter-option =  'EQ'.
ls_selection_parameter-sign = 'I'.
ls_selection_parameter-low =  prod.
APPEND ls_selection_parameter TO lt_selection_parameter.

lo_core->load_component_set( 'PROD_ALL' ).

lo_collection = lo_core->dquery(
    iv_query_name               = lv_query_name
    it_selection_parameters     = lt_selection_parameter
    is_query_parameters         = ls_query_parameters ).


DATA(lo_product) = lo_collection->get_current( ).
ASSERT lo_product IS NOT INITIAL.

DO num TIMES.
  CALL METHOD cl_crm_ipm_ip_copy=>set_mass_gen_mode( lt_reltype_filter ).
  DATA(lr_col) = lo_product->execute( iv_method_name = 'COPY_PRODUCT' ). "#EC NOTEXT

  ASSERT lr_col IS NOT INITIAL.

  DATA(lo_first) = lr_col->get_first( ).

  WHILE lo_first IS NOT INITIAL.
    lv_product_id = lo_first->get_property_as_string( 'PRODUCT_ID' ).
    WRITE: / 'Generated IP Product ID: ' , lv_product_id.
    DATA(lo_short_text) = lo_first->get_related_entity( 'ProductShortText' ).

    IF lo_short_text IS INITIAL.
      lo_short_text = lo_first->CREATE_RELATED_ENTITY( IV_RELATION_NAME = 'ProductShortText' ).
    ENDIF.

    lo_short_text->set_property( iv_attr_name = 'SHORT_TEXT' iv_value = lv_product_id ).
    lo_short_text->set_property( iv_attr_name   = 'LANGU'    iv_value = sy-langu ).
    lr_item_handler->create_ip( lo_first ).
    lo_first = lr_col->get_next( ).
  ENDWHILE.
ENDDO.

DATA(lo_transaction) = lo_core->get_transaction( ).

lo_core->modify( ).
DATA(lv_changed) = lo_transaction->check_save_needed( ).

CHECK lv_changed EQ abap_true.
DATA(lv_success) = lo_transaction->save( ).
IF lv_success = abap_true.
  lo_transaction->commit( ).
  WRITE:/ 'IP Assigned Successfully'.
ELSE.
  lo_transaction->rollback( ).
  WRITE: / 'IP Assigned failed'.
ENDIF.

 

通过Acquisition contract生成IP Product的拥有权利

Created by Jerry Wang, last modified on Mar 12, 2014

  1. 创建一个新的IP product, 权利计算公式选择0008 - 从Acquisition 合同自动带过来:
    IPM: 如何通过Granting Reference relationship实现多个IP product的hierarchy结构

给IP product维护合适的Sales Organization unit和distribution channel:
IPM: 如何通过Granting Reference relationship实现多个IP product的hierarchy结构
2. 创建一个新的Acquisition contract, 将step1新创建的IP product assign进去:
IPM: 如何通过Granting Reference relationship实现多个IP product的hierarchy结构
在Acquisition contract item level创建一个Right Scope:
IPM: 如何通过Granting Reference relationship实现多个IP product的hierarchy结构
3. 回到IP product上,点Generate Rights:
IPM: 如何通过Granting Reference relationship实现多个IP product的hierarchy结构
Acquisition contract上定义的right scope已经自动带到IP Product上。

IPM: 如何通过Granting Reference relationship实现多个IP product的hierarchy结构