How to update BOL entity property value via ABAP code
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의 오리지널 기사를 보려면 공식 계정인 "왕쯔희"를 주목해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ABAP 코드로 S/4HANA 프로덕션 주문 내역 읽기S/4HANA 트랜잭션 코드 CO03에 표시된 Production Order에서 ABAP 코드로 주문의 operation(절차) ID, 설명 및 상태 Status를 표시하고 싶습니다. 다음 그림과 같습니다. 간단한 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.