前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >避免CRM_IB 013 error message

避免CRM_IB 013 error message

作者头像
Jerry Wang
发布2019-07-10 10:04:11
3890
发布2019-07-10 10:04:11
举报
知识共享许可协议
知识共享许可协议

版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

Created by Jerry Wang on Jul 27, 2014

当创建一个IBASE的object component时,如果assign的object 已经存在于系统里已有的其他IBASE object component上,就会遇到如下error message:

clipboard1
clipboard1

在CHECK_FOR_COMPONENT里抛出error message:

clipboard2
clipboard2

在用代码生成大批量IBASE 测试数据用于性能测试时,如果要避免这个error message, 可以参考系统里点了Yes button之后的标准实现:

实际上是调用了IBASE genil model里的MOVE_COMPONENT:

clipboard3
clipboard3

另一种思路是,每次生成一个IBASE object component时,都预先用代码生成一个unique的object,这样能保证assign 到object component里的object不会出现被其他IBASE component使用到的情况。

执行report,输入待创建的Object component包含Object的ID,object family和object category:

clipboard4
clipboard4

report执行成功,打印创建好的IBASE ID:

clipboard5
clipboard5

根据IBASE ID到UI上check,发现Object component包含的Object 信息和执行report时维护的信息一致。

clipboard6
clipboard6

report和创建object的class ZCL_OBJECT_GENERATOR代码如下:

代码语言:javascript
复制
REPORT zibase_create_unique.

PARAMETERS: txt TYPE char40 OBLIGATORY DEFAULT 'description test',
            eid TYPE char30 OBLIGATORY DEFAULT 'PROGRAM',
            oid TYPE comm_product-product_id OBLIGATORY DEFAULT 'CHILDOBJ8',
            fam TYPE comm_product-object_family OBLIGATORY DEFAULT '0401',
            cat TYPE COMT_CATEGORY_ID OBLIGATORY DEFAULT 'OBJ_0401'.

DATA: lt_param  TYPE crmt_name_value_pair_tab,
      ls_param  TYPE crmt_name_value_pair,
      lr_core   TYPE REF TO cl_crm_bol_core,
      ls_object TYPE comm_product,
      lr_root   TYPE REF TO if_bol_entity_col,
      entity    TYPE REF TO cl_crm_bol_entity.

CHECK zcl_object_generator=>create_object( iv_id = oid iv_family = fam iv_catid = cat ) = abap_true.

ls_param-name  = cl_crm_ibase_il_constant=>createparam.
ls_param-value = '01'.
APPEND ls_param TO lt_param.

lr_core = cl_crm_bol_core=>get_instance( ).
lr_core->load_component_set('IBASE_ONLY').

CALL METHOD lr_core->root_create
  EXPORTING
    iv_object_name  = cl_crm_ibase_il_constant=>root_object
    iv_create_param = lt_param
    iv_number       = 1
  RECEIVING
    rv_result       = lr_root.

CHECK lr_root IS BOUND.
entity ?= lr_root->get_current( ).

CHECK entity IS BOUND.
IF entity->lock( ) = abap_true.
  entity->switch_to_change_mode( ).
ENDIF.

entity->set_property_as_string( iv_attr_name = 'DESCR' iv_value = CONV #( txt ) ).
entity->set_property_as_string( iv_attr_name = 'EXTID' iv_value = CONV #( eid ) ).
"entity->set_property_as_string( iv_attr_name = 'IBTYP' iv_value = '01' ).
lr_core->modify( ).
DATA(lv_ibase_id) = entity->get_property_as_string( 'IBASE' ).

DATA(component) = entity->create_related_entity( 'FirstLevelComponent' ).

CHECK component IS NOT INITIAL.

DATA(obj_comp) = component->create_related_entity( 'IBCompObj').

CHECK obj_comp IS NOT INITIAL.

obj_comp->set_property_as_string( iv_attr_name = 'OBJECT_ID' iv_value = CONV #( oid ) ).

SELECT SINGLE * INTO ls_object FROM comm_product WHERE product_id = oid.
ASSERT sy-subrc = 0.

obj_comp->set_property_as_string( iv_attr_name = 'OBJECT_GUID' iv_value = CONV #( ls_object-product_guid ) ).
obj_comp->set_property_as_string( iv_attr_name = 'OBJECT_FAMILY' iv_value = CONV #( ls_object-product_guid ) ).
lr_core->modify( ).

DATA(lo_message_container) = entity->get_message_container( ).
CALL METHOD lo_message_container->get_messages
  EXPORTING
    iv_message_type = if_genil_message_container=>mt_all
  IMPORTING
    et_messages     = DATA(lt_msg1).
LOOP AT lt_msg1 ASSIGNING FIELD-SYMBOL(<msg1>).
  WRITE:/ <msg1>-message COLOR COL_NEGATIVE.
ENDLOOP.

CHECK lt_msg1 IS INITIAL.

DATA(lo_transaction) = lr_core->get_transaction( ).
DATA(lv_changed) = lo_transaction->check_save_needed( ).

CHECK lv_changed EQ abap_true.

DATA(lv_success) = lo_transaction->save( ).

DATA(lo_glb_msg_cont) = lr_core->get_global_message_cont( ).
CALL METHOD lo_glb_msg_cont->if_genil_message_container~get_messages
  EXPORTING
    iv_message_type = if_genil_message_container=>mt_all
  IMPORTING
    et_messages     = DATA(lt_msg).
LOOP AT lt_msg ASSIGNING FIELD-SYMBOL(<msg>).
  WRITE:/ <msg>-message.
ENDLOOP.

IF lv_success = abap_true.
  lo_transaction->commit( ).
  WRITE:/ 'IBASE Created Successfully: ', lv_ibase_id COLOR COL_NEGATIVE.
ELSE.
  lo_transaction->rollback( ).
ENDIF.
 

 
CLASS zcl_object_generator DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.

    TYPE-POOLS abap .
    CLASS-METHODS create_object
      IMPORTING
        !iv_id              TYPE comm_product-product_id
        !iv_family          TYPE comm_product-object_family
        !iv_catid           TYPE comt_category_id
      RETURNING
        VALUE(rv_create_ok) TYPE abap_bool .
    CLASS-METHODS class_constructor .
  PROTECTED SECTION.
  PRIVATE SECTION.

    CLASS-DATA so_core TYPE REF TO cl_crm_bol_core .
    CLASS-DATA so_fact TYPE REF TO cl_crm_bol_entity_factory .
    CLASS-DATA sv_id TYPE comm_product-product_id .
    CLASS-DATA sv_fam TYPE comm_product-object_family .
    CLASS-DATA sv_catid TYPE comt_category_id .

    CLASS-METHODS init
      IMPORTING
        !iv_id     TYPE comm_product-product_id
        !iv_family TYPE comm_product-object_family
        !iv_catid  TYPE comt_category_id .
    CLASS-METHODS create_header .
    TYPE-POOLS abap .
    CLASS-METHODS save
      RETURNING
        VALUE(rv_create_ok) TYPE abap_bool .
ENDCLASS.



CLASS ZCL_OBJECT_GENERATOR IMPLEMENTATION.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_OBJECT_GENERATOR=>CLASS_CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD class_constructor.
    so_core = cl_crm_bol_core=>get_instance( ).
    so_core->load_component_set( 'PROD_ALL' ).
    so_fact   = so_core->get_entity_factory( 'Product' ).
  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_OBJECT_GENERATOR=>CREATE_HEADER
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD create_header.
    DATA: lt_param TYPE crmt_name_value_pair_tab,
          ls_param TYPE crmt_name_value_pair.

    ls_param-name = 'PRODUCT_ID'.
    ls_param-value = sv_id.
    APPEND ls_param TO lt_param.

    ls_param-name = 'PRODUCT_TYPE'.
    ls_param-value = '01'.
    APPEND ls_param TO lt_param.

    ls_param-name = 'ROOT_CAT_ID'.
    ls_param-value = sv_catid.
    APPEND ls_param TO lt_param.

    ls_param-name = 'ROOT_HIER_ID'.
    ls_param-value = 'R3PRODSTYP'.
    APPEND ls_param TO lt_param.

    ls_param-name = 'SHORT_TEXT'.
    ls_param-value = 'Dummy'.
    APPEND ls_param TO lt_param.

    ls_param-name = 'OBJECT_FAMILY'.
    ls_param-value = sv_fam.
    APPEND ls_param TO lt_param.

    DATA(lr_product) = so_fact->create( lt_param ).
    IF lr_product IS INITIAL.
      DATA(lo_glb_msg_cont) = so_core->get_global_message_cont( ).
      CALL METHOD lo_glb_msg_cont->if_genil_message_container~get_messages
        EXPORTING
          iv_message_type = if_genil_message_container=>mt_all
        IMPORTING
          et_messages     = DATA(lt_msg).
      LOOP AT lt_msg ASSIGNING FIELD-SYMBOL(<msg>).
        WRITE:/ <msg>-message.
      ENDLOOP.
    ENDIF.

  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_OBJECT_GENERATOR=>CREATE_OBJECT
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_ID                          TYPE        COMM_PRODUCT-PRODUCT_ID
* | [--->] IV_FAMILY                      TYPE        COMM_PRODUCT-OBJECT_FAMILY
* | [--->] IV_CATID                       TYPE        COMT_CATEGORY_ID
* | [<-()] RV_CREATE_OK                   TYPE        ABAP_BOOL
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD create_object.
    init( iv_id = iv_id iv_family = iv_family iv_catid = iv_catid ).
    create_header( ).
    rv_create_ok = save( ).

  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_OBJECT_GENERATOR=>INIT
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_ID                          TYPE        COMM_PRODUCT-PRODUCT_ID
* | [--->] IV_FAMILY                      TYPE        COMM_PRODUCT-OBJECT_FAMILY
* | [--->] IV_CATID                       TYPE        COMT_CATEGORY_ID
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD init.
    sv_id = iv_id.
    sv_fam  = iv_family.
    sv_catid = iv_catid.
  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_OBJECT_GENERATOR=>SAVE
* +-------------------------------------------------------------------------------------------------+
* | [<-()] RV_CREATE_OK                   TYPE        ABAP_BOOL
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD save.

    DATA(lo_transaction) = so_core->get_transaction( ).
    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( ).
      rv_create_ok = abap_true.
    ELSE.
      lo_transaction->rollback( ).
    ENDIF.
    so_core->reset( ).
  ENDMETHOD.
ENDCLASS.
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年07月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Created by Jerry Wang on Jul 27, 2014
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档