首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAP CRM BOL entity deletion - root node and sub node

SAP CRM BOL entity deletion - root node and sub node

作者头像
Jerry Wang
发布2019-07-08 00:44:46
5610
发布2019-07-08 00:44:46
举报

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

Created by Jerry Wang, last modified on Oct 13, 2014

当使用下列report删除一个BOL entity root entity时,无需在report里手动trigger一个COMMIT WORK也能将root entity真正删除:

DATA: lo_core               TYPE REF TO cl_crm_bol_core,
      lo_collection         TYPE REF TO if_bol_entity_col,
      lv_view_name          TYPE crmt_view_name,
      lv_query_name         TYPE crmt_ext_obj_name,
      lt_query_parameter    TYPE crmt_name_value_pair_tab,
      ls_query_parameter    LIKE LINE OF lt_query_parameter,
      lv_size               TYPE i.

  ls_query_parameter-name = 'INTERNAL_ID'.
  ls_query_parameter-value = '201300024498'.
  APPEND ls_query_parameter TO lt_query_parameter.

  lo_core = cl_crm_bol_core=>get_instance( ).
  lo_core->load_component_set( 'CRMSMT' ).
  lv_query_name = 'PostSearch'.

  lo_collection = lo_core->query(
      iv_query_name               = lv_query_name
      it_query_params             = lt_query_parameter
      iv_view_name                = lv_view_name ).

  lv_size = lo_collection->IF_BOL_BO_COL~SIZE( ).
  "ASSERT lv_size  1.

  DATA(lo_bol_entity) = lo_collection->get_first( ).
  CHECK lo_bol_entity IS NOT INITIAL.

  DATA(lo_root) = lo_bol_entity->get_related_entity( 'SocialPostRel' ).

  lo_root->delete( ).

原因是因为CL_CRM_BOL_CORE->ROOT_DELETE方法里会自动调用CL_CRM_GENERIC_IL_NEW->COMMIT操作。

clipboard1
clipboard1

而如果删除root node下面的sub node:

REPORT zhana_product_search1.

PARAMETERS: prod_id TYPE comt_product_id, prod_des TYPE comt_prshtextx, cat_id TYPE comt_category_id, "COMM_PRPRDCATR-CATEGORY_ID, cat_desc TYPE comt_category_text, maxhit TYPE i.

DATA: lo_core TYPE REF TO cl_crm_bol_core, lo_collection TYPE REF TO if_bol_entity_col, lo_root_entity TYPE REF TO cl_crm_bol_entity, lv_view_name TYPE crmt_view_name, lv_query_name TYPE crmt_ext_obj_name, lt_query_parameter TYPE crmt_name_value_pair_tab, ls_query_parameter LIKE LINE OF lt_query_parameter, lv_size TYPE i.

START-OF-SELECTION.

  • replace ' ' with '' into prod_id. SHIFT prod_id RIGHT DELETING TRAILING space. SHIFT prod_id LEFT DELETING LEADING space.

SHIFT prod_des RIGHT DELETING TRAILING space. SHIFT prod_des LEFT DELETING LEADING space.

SHIFT cat_id RIGHT DELETING TRAILING space. SHIFT cat_id LEFT DELETING LEADING space.

SHIFT cat_desc RIGHT DELETING TRAILING space. SHIFT cat_desc LEFT DELETING LEADING space.

IF prod_id NE ''. ls_query_parameter-name = 'PRODUCT_ID'. ls_query_parameter-value = prod_id. APPEND ls_query_parameter TO lt_query_parameter. ENDIF.

IF prod_des NE ''. ls_query_parameter-name = 'DESCRIPTION'. ls_query_parameter-value = prod_des. APPEND ls_query_parameter TO lt_query_parameter. ENDIF.

IF cat_id NE ''. ls_query_parameter-name = 'CATEGORY_ID'. ls_query_parameter-value = cat_id. APPEND ls_query_parameter TO lt_query_parameter. ENDIF.

IF cat_desc NE ''. ls_query_parameter-name = 'CATEGORY_DESC'. ls_query_parameter-value = cat_desc. APPEND ls_query_parameter TO lt_query_parameter. ENDIF.

IF maxhit EQ ''. maxhit = 10000. ENDIF.

ls_query_parameter-name = 'MAX_ROWS'. ls_query_parameter-value = maxhit. APPEND ls_query_parameter TO lt_query_parameter.

lo_core = cl_crm_bol_core=>get_instance( ). lo_core->load_component_set( 'PROD_ALL' ). lv_query_name = 'ProdAdvancedSearchProducts'. "lv_query_name = 'ProdAdvSearchRgProducts'.

TRY. lo_collection = lo_core->query( iv_query_name = lv_query_name it_query_params = lt_query_parameter iv_view_name = lv_view_name ). CATCH cx_sy_arithmetic_error. WRITE:/ 'Error' . ENDTRY.

lv_size = lo_collection->if_bol_bo_col~size( ).

WRITE:/ 'Number of ' , lv_size, ' Products has been found!'. DATA(lo_product) = lo_collection->get_first( ). CHECK lo_product IS NOT INITIAL. DATA(lo_short_text) = lo_product->get_related_entities( iv_relation_name = 'ProductShortText' ). CHECK lo_short_text IS NOT INITIAL. DATA(lo_text) = lo_short_text->get_first( ). CHECK lo_text IS NOT INITIAL. CHECK lo_product->lock( ) = abap_true. lo_text->delete( ).

发现调用delete之后,只是简单把当前sub node对应的bol entity加入到bol entity manager的modified_entities tab里

clipboard2
clipboard2
clipboard3
clipboard3

要做到真正删除sub node, 必须要call if_bol_transaction_context的save和commit方法。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年07月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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