Created by Jerry Wang, last modified on Nov 25, 2014
系统里Product R15维护了如下格式的Distribution chain 数据:
在BOL browser tool里通过Relation ProductDistrChain 从root 节点associate到Distribution chain的子节点:
使用如下report 列出指定product维护的distribution chain信息并全部删除:
执行report,列出product下面所属的所有的distribution信息并 全部删除:
REPORT zhana_product_create_dc.
PARAMETERS: id TYPE comm_product-product_id OBLIGATORY DEFAULT 'R15'.
DATA(product) = cl_crm_prod_internal_tool=>get_prod_by_id( id ).
DATA: lv_index TYPE int4 VALUE 1.
DATA(lo_dist_chain) = product->get_related_entities( iv_relation_name = 'ProductDistrChain' ).
IF lo_dist_chain IS INITIAL.
WRITE: / 'Current product does not have distribution chain' COLOR COL_NEGATIVE.
RETURN.
ELSE.
DATA(lo_dist_chain_single) = lo_dist_chain->get_first( ).
WHILE lo_dist_chain_single IS NOT INITIAL.
WRITE: / 'Distribution Chain index: ' , lv_index COLOR COL_NEGATIVE.
DATA(lv_sale_org) = lo_dist_chain_single->get_property_as_string( iv_attr_name = 'SALES_ORG' ).
DATA(lv_disc_cha) = lo_dist_chain_single->get_property_as_string( iv_attr_name = 'DISTR_CHAN' ).
DATA(lv_short_txt) = lo_dist_chain_single->get_property_as_string( iv_attr_name = 'SHORT_DESC' ).
DATA(lv_sales_txt) = lo_dist_chain_single->get_property_as_string( iv_attr_name = 'SALES_DESC' ).
DATA(lv_distr_txt) = lo_dist_chain_single->get_property_as_string( iv_attr_name = 'DISTR_DESC' ).
DATA(lv_distr_id) = lo_dist_chain_single->get_property_as_string( iv_attr_name = 'DSTRBCHAIN_ID' ).
DATA(lv_long_txt) = lo_dist_chain_single->get_property_as_string( iv_attr_name = 'DESCRIPTION' ).
WRITE:/ 'SalesOrg: ', lv_sale_org COLOR COL_POSITIVE, ' Distribution Chain: ' , lv_disc_cha COLOR COL_POSITIVE.
WRITE: / 'Short text:' , lv_short_txt COLOR COL_TOTAL, ' Sales text: ' , lv_sales_txt COLOR COL_TOTAL.
WRITE: / 'Distribution text: ' , lv_distr_txt COLOR COL_GROUP, ' Distribution ID: ', lv_distr_id COLOR COL_GROUP.
WRITE: / 'Long text: ' , lv_long_txt COLOR COL_KEY.
lo_dist_chain_single->delete( ).
lo_dist_chain_single = lo_dist_chain->get_next( ).
ADD 1 TO lv_index.
ENDWHILE.
DATA(lv_saved) = cl_crm_prod_internal_tool=>save_transaction( ).
WRITE: / 'saved successfully?' , lv_saved COLOR COL_TOTAL.
ENDIF.
class CL_CRM_PROD_INTERNAL_TOOL definition
public
final
create public .
public section.
class-methods CLASS_CONSTRUCTOR .
class-methods GET_PROD_BY_ID
importing
!IV_PRODUCT_ID type COMM_PRODUCT-PRODUCT_ID
returning
value(RO_BOL) type ref to CL_CRM_BOL_ENTITY .
class-methods SAVE_TRANSACTION
returning
value(RV_SUCCESS) type ABAP_BOOL .
protected section.
private section.
class-data SO_BOL_CORE type ref to CL_CRM_BOL_CORE .
ENDCLASS.
CLASS CL_CRM_PROD_INTERNAL_TOOL IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method CL_CRM_PROD_INTERNAL_TOOL=>CLASS_CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
method CLASS_CONSTRUCTOR.
so_bol_core = cl_crm_bol_core=>get_instance( ).
so_bol_core->load_component_set( 'PROD_ALL' ).
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method CL_CRM_PROD_INTERNAL_TOOL=>GET_PROD_BY_ID
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_PRODUCT_ID TYPE COMM_PRODUCT-PRODUCT_ID
* | [<-()] RO_BOL TYPE REF TO CL_CRM_BOL_ENTITY
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD get_prod_by_id.
DATA:
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.
ls_query_parameter-name = 'PRODUCT_ID'.
ls_query_parameter-value = iv_product_id.
APPEND ls_query_parameter TO lt_query_parameter.
ls_query_parameter-name = 'MAX_ROWS'.
ls_query_parameter-value = 1.
APPEND ls_query_parameter TO lt_query_parameter.
lv_query_name = 'ProdAdvancedSearchProducts'.
lo_collection = so_bol_core->query(
iv_query_name = lv_query_name
it_query_params = lt_query_parameter
iv_view_name = lv_view_name ).
ASSERT lo_collection IS NOT INITIAL.
ASSERT lo_collection->size( ) = 1.
ro_bol = lo_collection->get_current( ).
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method CL_CRM_PROD_INTERNAL_TOOL=>SAVE_TRANSACTION
* +-------------------------------------------------------------------------------------------------+
* | [<-()] RV_SUCCESS TYPE ABAP_BOOL
* +--------------------------------------------------------------------------------------</SIGNATURE>
method SAVE_TRANSACTION.
so_bol_core->modify( ).
DATA(lo_transaction) = so_bol_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_success = abap_true.
ELSE.
lo_transaction->rollback( ).
ENDIF.
endmethod.
ENDCLASS.