zl程序教程

您现在的位置是:首页 >  其他

当前栏目

SAP CRM Distribution Chain数据模型

SAP CRM 数据模型 Chain distribution
2023-09-14 09:03:02 时间

Created by Jerry Wang, last modified on Nov 25, 2014

系统里Product R15维护了如下格式的Distribution chain 数据:
clipboard1
在BOL browser tool里通过Relation ProductDistrChain 从root 节点associate到Distribution chain的子节点:
clipboard2

使用如下report 列出指定product维护的distribution chain信息并全部删除:
clipboard3
clipboard4
执行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.

clipboard5
clipboard6