zoukankan      html  css  js  c++  java
  • How to update BOL entity property value via ABAP code

    Suppose I have one product with ID I042416 which could be found in CRM WebClient UI:

    I would like to change its description from "i042416" to for example "Jerry test".

    Here below is the ABAP code which uses CRM BOL API to achieve.

    Execute the report, specify product ID and new description to be updated:

    Execute the report, product description is updated:

    Double confirm in UI to see updated description as expected:

    The complete code could be found below:

    REPORT PROD_UPDATE_TEST.
    
    PARAMETERS: prd_id TYPE string,
    des_val1 TYPE string,
    uom_val2 TYPE string,
    sta_val3 TYPE string,
    icg_val4 TYPE string,
    not_val5 TYPE string,
    dis_txt6 TYPE string.
    
    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,
          lo_short_text         TYPE REF TO cl_crm_bol_entity,
          lo_uom                TYPE REF TO cl_crm_bol_entity,
          lo_stat               TYPE REF TO cl_crm_bol_entity,
          lo_matb               TYPE REF TO cl_crm_bol_entity,
          lo_note               TYPE REF TO cl_crm_bol_entity,
          lo_dischain           TYPE REF TO cl_crm_bol_entity,
          lo_dischaintxt        TYPE REF TO cl_crm_bol_entity.
    
    DATA:
          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,
          lo_transaction        TYPE REF TO if_bol_transaction_context,
          lv_success            TYPE abap_bool,
          lv_changed            TYPE abap_bool,
          lv_size               TYPE I.
    
    * get the product
    lo_core = cl_crm_bol_core=>get_instance( ).
    lo_core->load_component_set( 'PROD_ALL' ).
    lo_transaction = lo_core->get_transaction( ).
    
    lv_query_name = 'ProdAdvancedSearchProducts'.
    
    ls_query_parameter-name = 'PRODUCT_ID'.
    ls_query_parameter-VALUE = prd_id.
    APPEND ls_query_parameter TO lt_query_parameter.
    
    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( ).
    
    WRITE:/ 'Product number found:' , lv_size.
    
    ASSERT lv_size = 1.
    
    lo_root_entity = lo_collection->get_first( ).
    
    IF des_val1 IS NOT INITIAL.
    * update product description
      lo_short_text = lo_root_entity->get_related_entity( 'ProductShortText' ).
    
      IF lo_short_text IS INITIAL.
        " HANDLING
        lo_short_text = lo_root_entity->CREATE_RELATED_ENTITY( IV_RELATION_NAME = 'ProductShortText' ).
      ENDIF.
    
      lo_short_text->set_property( iv_attr_name = 'SHORT_TEXT' iv_value = des_val1 ).
      lo_short_text->set_property( iv_attr_name   = 'LANGU'    iv_value = sy-langu ).
    ENDIF.
    
    IF uom_val2 IS NOT INITIAL.
    * update base unit
      lo_uom = lo_root_entity->get_related_entity( 'ProductUom' ).
    
      IF lo_uom IS INITIAL.
        " HANDLING
        lo_uom = lo_root_entity->CREATE_RELATED_ENTITY( IV_RELATION_NAME = 'ProductUom' ).
      ENDIF.
    
      lo_uom->set_property( iv_attr_name = 'UNIT' iv_value = uom_val2 ).
    ENDIF.
    
    IF sta_val3 IS NOT INITIAL.
    * update status
      lo_stat = lo_root_entity->get_related_entity( 'ProductStat' ).
    
      IF lo_stat IS INITIAL.
        lo_stat = lo_root_entity->CREATE_RELATED_ENTITY( IV_RELATION_NAME = 'ProductStat' ).
      ENDIF.
    
      lo_stat->set_property( iv_attr_name = 'STAT' iv_value = sta_val3 ).
    ENDIF.
    
    IF icg_val4 IS NOT INITIAL.
    * update item category group
      lo_matb = lo_root_entity->get_related_entity( 'ProductMatBasic' ).
    
      IF lo_matb IS INITIAL.
        lo_matb = lo_root_entity->CREATE_RELATED_ENTITY( IV_RELATION_NAME = 'ProductMatBasic' ).
      ENDIF.
    
      lo_matb->set_property( iv_attr_name = 'ITEM_CAT_GROUP' iv_value = icg_val4 ).
    ENDIF.
    
    IF not_val5 IS NOT INITIAL.
    * update notes
      lo_note = lo_root_entity->get_related_entity( 'ProductLongtext' ).
    
      IF lo_note IS INITIAL.
        lo_note = lo_root_entity->CREATE_RELATED_ENTITY( IV_RELATION_NAME = 'ProductLongtext' ).
      ENDIF.
    
      lo_note->set_property( iv_attr_name = 'CONC_LINES' iv_value = not_val5 ).
    ENDIF.
    
    IF dis_txt6 IS NOT INITIAL.
    * update sales area text
      lo_dischain = lo_root_entity->get_related_entity( 'ProductDistrChain' ).
    
      IF lo_dischain IS INITIAL.
        lo_dischain = lo_root_entity->CREATE_RELATED_ENTITY( IV_RELATION_NAME = 'ProductDistrChain' ).
      ENDIF.
    
      lo_dischaintxt = lo_dischain->GET_RELATED_ENTITY( 'ProductDcLongtext' ).
    
      IF lo_dischaintxt IS INITIAL.
        lo_dischaintxt = lo_dischain->CREATE_RELATED_ENTITY( IV_RELATION_NAME = 'ProductDcLongtext' ).
      ENDIF.
    
      lo_dischaintxt->set_property( iv_attr_name = 'CONC_LINES' iv_value = dis_txt6 ).
    ENDIF.
    
    * execute modification
    lo_core->modify( ).
    lv_changed = lo_transaction->check_save_needed( ).
    
    CHECK lv_changed EQ abap_true.
    lv_success = lo_transaction->save( ).
    IF lv_success = abap_true.
      lo_transaction->commit( ).
      WRITE:/ 'Product changed Successfully'.
    ELSE.
      lo_transaction->rollback( ).
    ENDIF.
    

    要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  • 相关阅读:
    Cocos2d-x学习之---自定义图标(带触摸事件)
    Cocos2d-x关于ScrollView
    学习实战三:基于Cocos2d-x引擎模仿微信打飞机游戏
    补算法相关知识一:蚂蚁算法
    避免Cocos2d-x编写的游戏在用eclipse生成安卓包时繁琐的写Android.mk文件
    Cocos2d-x学习之---模仿微信打飞机游戏敌机层设计初想
    Cocos2d-x学习之---2013年10月11日小记
    有时候真怕,时间会说出真心话。
    NO2:设置RedHat Linux下的samba开机启动
    NO1:在Windows端安装SecureCRT来连接Linux
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/10113991.html
Copyright © 2011-2022 走看看