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

How to update BOL entity property value via ABAP code的更多相关文章
- mappedBy reference an unknown target entity property解决方法
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error ...
- 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. ...
- Entity Framework Tutorial Basics(24):Update Single Entity
Update Existing Entity using DBContext in Disconnected Scenario: In this chapter, you will learn how ...
- org.hibernate.AnnotationException: mappedBy reference an unknown target entity property
org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: xxxxxxx 原因是 ...
- EntityFramework 学习 一 Update Existing Entity using DBContext in Disconnected Scenario
using System; using System.Collections.Generic; public partial class Student { public Student() { th ...
- update the UI property cross thread
this.Invoke((MethodInvoker)delegate { txtResult.Text = sbd.ToString(); // runs on UI thread });
- Entity Framework应用:使用Code First模式管理事务
一.什么是事务 处理以数据为中心的应用时,另一个重要的话题是事务管理.ADO.NET为事务管理提供了一个非常干净和有效的API.因为EF运行在ADO.NET之上,所以EF可以使用ADO.NET的事务管 ...
- Entity Framework应用:使用Code First模式管理存储过程
在EF中使用存储过程和使用视图是很相似的,一般会使用Database对象上的两个方法:SqlQuery和ExecuteSqlCommand.为了从存储过程中读取很多数据行,我们只需要定义一个类,我们会 ...
- Entity Framework With Mysql 之Code First
Entity Framework 4.0现在也可以支持Mysql数据库了,这篇文章将向你展示如何用Code First的方式来实现. 1.首先新建一个项目,在项目中用NuGet添加如下引用: 2.在w ...
随机推荐
- 002-BootStrap基本模板
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- windows下安装node环境,以及grunt试水笔记
grunt,当下前端界知名度最高的工作流处理工具. 在一线的互联网公司,它早已经被用烂了,而我真正接触,是在去年年底... 期间还因为内心太杂分心玩乐而荒废学途,以致到最近才重拾学业,在这里BS一下自 ...
- 3、在Shell程序中使用的参数
学习目标位置参数内部参数 如同ls命令可以接受目录等作为它的参数一样,在Shell编程时同样可以使用参数.Shell程序中的参数分为位置参数和内部参数等. 12-3-1 位置参数由系统提供的参数称为位 ...
- h5空白页面过渡加载
h5空白页面过渡加载 页面第一部分内容是图片,考虑到手机图片加载慢,想用简单.转化为base64的图片过渡 开始尝试将图片转为灰度图片,结果还是很大. 后来选取重要元素,保存2位的png,尺寸是494 ...
- zato——Channels Outgoing connections
Channels,服务获得请求.方式 AMQP JMS WebSphere MQ plain HTTP SOAP ZeroMQ 其中,只有HTTP是同步的 Plain HTTP和SOAP暴漏服务直接通 ...
- Timer 控件
1. 设置属性 Enable = true 或调用 start方法后, *_Tick 方法不会立即执行,会先等待一个时间间隔 2.timer1不管你上次的事情是否做完,它都会每个一个时间间隔做它应该 ...
- PHP学习7——文件系统
主要内容: 打开和关闭文件 文件类型 文件处理 目录处理 访问远程文件 文件锁定 文件上传 数据除了可以存储在数据库中,我们主要的还是存储在文件中,而且存储在文件中更加的方便直接. 打开和关闭文件 打 ...
- Azure 项目构建 – 部署高可用的 Python Web 应用
Python 以其优美,清晰,简单的特性在全世界广泛流行,成为最主流的编程语言之一.Azure 平台针对 Python 提供了非常完备的支持.本项目中,您将了解如何构造和部署基于 Azure Web ...
- 监听域对象创建和销毁的Listener
1.什么是Servlet监听器? 先来看看什么是监听器.监听器是专门用于对其它对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时立即采取相应的行动.Servlet监听器是S ...
- 模仿jquery的data
jquery中,有这个方法 var obj = {}; $.data(obj,'name','jake'); console.info($.data(obj,'name')); console.inf ...