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的原创文章,请关注公众号"汪子熙":

How to update BOL entity property value via ABAP code的更多相关文章

  1. mappedBy reference an unknown target entity property解决方法

    Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error ...

  2. org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.entity.annotations.House.district in

    org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.entity. ...

  3. Entity Framework Tutorial Basics(24):Update Single Entity

    Update Existing Entity using DBContext in Disconnected Scenario: In this chapter, you will learn how ...

  4. org.hibernate.AnnotationException: mappedBy reference an unknown target entity property

    org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: xxxxxxx 原因是 ...

  5. EntityFramework 学习 一 Update Existing Entity using DBContext in Disconnected Scenario

    using System; using System.Collections.Generic; public partial class Student { public Student() { th ...

  6. update the UI property cross thread

    this.Invoke((MethodInvoker)delegate { txtResult.Text = sbd.ToString(); // runs on UI thread });

  7. Entity Framework应用:使用Code First模式管理事务

    一.什么是事务 处理以数据为中心的应用时,另一个重要的话题是事务管理.ADO.NET为事务管理提供了一个非常干净和有效的API.因为EF运行在ADO.NET之上,所以EF可以使用ADO.NET的事务管 ...

  8. Entity Framework应用:使用Code First模式管理存储过程

    在EF中使用存储过程和使用视图是很相似的,一般会使用Database对象上的两个方法:SqlQuery和ExecuteSqlCommand.为了从存储过程中读取很多数据行,我们只需要定义一个类,我们会 ...

  9. Entity Framework With Mysql 之Code First

    Entity Framework 4.0现在也可以支持Mysql数据库了,这篇文章将向你展示如何用Code First的方式来实现. 1.首先新建一个项目,在项目中用NuGet添加如下引用: 2.在w ...

随机推荐

  1. Flink安装极简教程-单机版

    一:安装 Flink官网下载地址:https://flink.apache.org/downloads.html 选择1.6.3版本 下载: wget http://mirrors.hust.edu. ...

  2. StringUtils 中 isEmpty 和 isBlank 的区别

    在项目的工作学习中经常用到了 apache  commons 中的 StringUtils 的 isBlank 和 isEmpty 来判断字符串是否为空,这个方法都是判断字符串是否为空做判断的,以至于 ...

  3. Message Queue基本使用说明

    一.安装Message Queue: 在Win7之前,控制面板,添加删除组件(Windows Message Queue). Win7~Win8:控制面板,程序和功能,启用或关闭Windows功能(找 ...

  4. java--线程状态【转】

    1.新建状态 Thread t1 = new Thread(); 创建之后,就已经有了相应的内存和其他资源,但是还是处于不可运行状态. 2.就绪状态 当一个线程使用.start()启动之后就处于就绪状 ...

  5. 在 Azure 虚拟机上快速搭建 MongoDB 集群

    MongoDB 是目前在 NoSQL 市场上非常受欢迎的一个数据库,本文介绍如何使用 Azure PowerShell 和 Azure CLI 在 Azure 虚拟机上搭建单节点 MongoDB(测试 ...

  6. Azure 认知服务--计算机视觉 API - 分析图像

    在本节中,笔者将详细介绍 Azure 认知服务中的一种:计算机视觉 (Computer Vision) API. 我的一个客户有需求,他们需要消费者与自己的产品合照,然后上传到服务器并转发到朋友圈. ...

  7. Tomcat服务器使用(一)

    1. Tomcat服务器端口的配置 Tomcat服务器的配置文件主要在conf文件夹中,conf文件夹下的server.xml是配置文件的核心,默认的配置端口是8080,如果想要修改为其他的端口,可在 ...

  8. wget http://pypi.python.org/packages/source/s/setuptools/setuptools-2.0.tar.gz 下载时报错 ssl is required 解决办法

    方法一:使用浏览器下载.在浏览器中输入 http://pypi.python.org/packages/source/s/setuptools/setuptools-2.0.tar.gz 方法二:将h ...

  9. 第2章 css边框属性

    圆角效果 border-radius border-radius是向元素添加圆角边框. 使用方法: border-radius:10px; /* 所有角都使用半径为10px的圆角 */ border- ...

  10. Python OOP面向对象

    一.什么是面向对象的程序设计 1.面向过程 程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是 ...