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. 【CSS】布局之选项卡与图片库

    前面对简单的选项卡和简单的图片库进行了实现,现在把两者结合起来,实现下面这样的效果. 现在附上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4 ...

  2. input输入提示历史记录

    一般便于用户的输入习惯,我们都会提示历史消息,让用户有更好的使用体验,以前可能比较多朋友会用js来实现,现在HTML5的datalist可以轻松帮我们实现这个功能!只需以下几行代码 <!doct ...

  3. Tensorflow中的数据对象Dataset

    基础概念 在tensorflow的官方文档是这样介绍Dataset数据对象的: Dataset可以用来表示输入管道元素集合(张量的嵌套结构)和"逻辑计划"对这些元素的转换操作.在D ...

  4. Scrapy框架学习(一)Scrapy框架介绍

    Scrapy框架的架构图如上. Scrapy中的数据流由引擎控制,数据流的过程如下: 1.Engine打开一个网站,找到处理该网站的Spider,并向该Spider请求第一个要爬取得URL. 2.En ...

  5. VirtualBox-4.3.0启动报错及解决办法

    今天装了VirtualBox-4.3.0-89960-Win.exe,安装过程后启动时报错: 虚拟电脑控制台-严重错误(标题) 创建 COM 对象失败. 应用程序将被中断. 被召者 RC: E_NOI ...

  6. 转发与重定向的区别(forward与redirect的区别)

    转发:服务器接收到客户端的请求后,在服务器内部传递的过程.最后回复结果给客户端. 重定向:服务器接收到客户端的请求后,回复一个新url给客户端,客户端跳转新url.

  7. 在WPF中自定义控件

    一, 不一定需要自定义控件在使用WPF以前,动辄使用自定义控件几乎成了惯性思维,比如需要一个带图片的按钮,但在WPF中此类任务却不需要如此大费周章,因为控件可以嵌套使用以及可以为控件外观打造一套新的样 ...

  8. GeneratedKeyHolder的作用:获得新建主键值

    Spring利用GeneratedKeyHolder,提供了一个可以返回新增记录对应主键值的方法: int update(PreparedStatementCreator psc, KeyHolder ...

  9. 三:Mybatis知识整理(3)

    一:mybatis中模糊查询的方法: 1.直接传参法:在java传参时进行拼接 -- %keyword% 2.mysql内置函数:concart('%',#{keyword},'%') -- 拼接sq ...

  10. Python基础学习总结(四)

    6.高阶特性 6.1迭代 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration).在Python中,迭代是通过for ... ...