Created by Jerry Wang, last modified on May 02, 2014

该report 实现了在同一session内:

  1. 创建新的Individual Object
  2. 创建新的IBASE
  3. 创建新的Object component,并将step1的IObject assign给该object component
  4. 修改Object component
  5. 删除Object component
  6. transaction save
    具体背景见该blog
REPORT ZIBASE_SOLUTION.
PARAMETERS: txt TYPE char40 OBLIGATORY DEFAULT 'description test',eid TYPE char30 OBLIGATORY DEFAULT 'PROGRAM',oid TYPE comm_product-product_id OBLIGATORY DEFAULT 'CHILDOB8',fam TYPE comm_product-object_family OBLIGATORY DEFAULT '0401',cat TYPE comt_category_id OBLIGATORY DEFAULT 'OBJ_0401'.
DATA: lt_param        TYPE crmt_name_value_pair_tab,ls_param        TYPE crmt_name_value_pair,lr_core         TYPE REF TO cl_crm_bol_core,ls_object       TYPE comm_product,lr_root         TYPE REF TO if_bol_entity_col,ls_comp_det     TYPE ibap_comp2,ls_comp_det_upd TYPE ibap_comp3,entity          TYPE REF TO cl_crm_bol_entity.
CHECK zcl_object_generator=>create_object( iv_id = oid iv_family = fam iv_catid = cat ) = abap_true.
ls_param-name  = cl_crm_ibase_il_constant=>createparam.
ls_param-value = '01'.
APPEND ls_param TO lt_param.
lr_core = cl_crm_bol_core=>get_instance( ).
lr_core->load_component_set('IBASE_ONLY').
CALL METHOD lr_core->root_createEXPORTINGiv_object_name  = cl_crm_ibase_il_constant=>root_objectiv_create_param = lt_paramiv_number       = 1RECEIVINGrv_result       = lr_root.
CHECK lr_root IS BOUND.
entity ?= lr_root->get_current( ).
CHECK entity IS BOUND.
IF entity->lock( ) = abap_true.entity->switch_to_change_mode( ).
ENDIF.
entity->set_property_as_string( iv_attr_name = 'DESCR' iv_value = CONV #( txt ) ).
entity->set_property_as_string( iv_attr_name = 'EXTID' iv_value = CONV #( eid ) ).
lr_core->modify( ).
DATA(lv_ibase_id) = entity->get_property_as_string( 'IBASE' ).
DATA(component) = entity->create_related_entity( 'FirstLevelComponent' ).
CHECK component IS NOT INITIAL.
DATA(obj_comp) = component->create_related_entity( 'IBCompObj').
CHECK obj_comp IS NOT INITIAL.
obj_comp->set_property_as_string( iv_attr_name = 'OBJECT_ID' iv_value = CONV #( oid ) ).
SELECT SINGLE * INTO ls_object FROM comm_product WHERE product_id = oid.
ASSERT sy-subrc = 0.
obj_comp->set_property_as_string( iv_attr_name = 'OBJECT_GUID' iv_value = CONV #( ls_object-product_guid ) ).
obj_comp->set_property_as_string( iv_attr_name = 'OBJECT_FAMILY' iv_value = CONV #( ls_object-product_guid ) ).
obj_comp->set_property_as_string( iv_attr_name = 'DESCR_EXT' iv_value = 'Jerry12345' ).
lr_core->modify( ).
DATA(lo_message_container) = entity->get_message_container( ).
CALL METHOD lo_message_container->get_messagesEXPORTINGiv_message_type = if_genil_message_container=>mt_allIMPORTINGet_messages     = DATA(lt_msg1).
LOOP AT lt_msg1 ASSIGNING FIELD-SYMBOL(<msg1>).WRITE:/ <msg1>-message COLOR COL_NEGATIVE.
ENDLOOP.
CHECK lt_msg1 IS INITIAL.
DATA(lo_transaction) = lr_core->get_transaction( ).
DATA(lv_changed) = lo_transaction->check_save_needed( ).
CHECK lv_changed EQ abap_true.
DATA: ls_header    TYPE ibap_head1,lt_struc_tab TYPE ibap_struc1_tab,ls_comp      TYPE ibap_dat1.
ls_header-ibase = lv_ibase_id.
CALL FUNCTION 'CRM_IBASE_GET_DETAIL'EXPORTINGi_ibase_head      = ls_headerIMPORTINGe_struc_ibase_tab = lt_struc_tabEXCEPTIONSnot_specified     = 1doesnt_exist      = 2no_authority      = 3.
CHECK sy-subrc = 0.
READ TABLE lt_struc_tab ASSIGNING FIELD-SYMBOL(<line>) INDEX 1.
ls_comp-instance = <line>-instance.
CALL FUNCTION 'CRM_IBASE_COMP_GET_DETAIL'EXPORTINGi_comp           = ls_compi_date           = sy-datloi_time           = sy-timloiv_do_auth_check = 'X'IMPORTINGe_comp_det       = ls_comp_detEXCEPTIONSnot_specified    = 1doesnt_exist     = 2no_authority     = 3OTHERS           = 4.
MOVE-CORRESPONDING ls_comp_det TO ls_comp_det_upd.
ls_comp_det_upd-deviceid    = '1'.
ls_comp_det_upd-descr       = '2'.
CALL FUNCTION 'CRM_IBASE_COMP_CHANGE'EXPORTINGi_comp              = ls_compi_comp_det          = ls_comp_det_updEXCEPTIONSdata_not_consistent = 1ibase_locked        = 2not_succesful       = 3no_authority        = 4OTHERS              = 5.
ASSERT sy-subrc = 0.
DATA(lv_success) = lo_transaction->save( ).
DATA(lo_glb_msg_cont) = lr_core->get_global_message_cont( ).
CALL METHOD lo_glb_msg_cont->if_genil_message_container~get_messagesEXPORTINGiv_message_type = if_genil_message_container=>mt_allIMPORTINGet_messages     = DATA(lt_msg).
LOOP AT lt_msg ASSIGNING FIELD-SYMBOL(<msg>).WRITE:/ <msg>-message.
ENDLOOP.
IF lv_success = abap_true.lo_transaction->commit( ).WRITE:/ 'IBASE Created Successfully: ', lv_ibase_id COLOR COL_NEGATIVE.
ELSE.lo_transaction->rollback( ).
ENDIF.
DATA: lv_datlo LIKE sy-datlo,lv_timlo LIKE sy-timlo,lv_valid_to LIKE ls_comp_det-valto.
lv_valid_to = ls_comp_det-valfr + 1.
CONVERT TIME STAMP lv_valid_to TIME ZONE sy-zonlo INTO DATE lv_datlo TIME lv_timlo.
CALL FUNCTION 'CRM_IBASE_COMP_DELETE'EXPORTINGi_comp              = ls_compi_date              = lv_datloi_time              = lv_timloEXCEPTIONSdata_not_consistent = 1ibase_locked        = 2not_succesful       = 3no_authority        = 4.
ASSERT sy-subrc = 0.
CALL FUNCTION 'CRM_IBASE_SAVE'.
COMMIT WORK AND WAIT.
CALL FUNCTION 'CRM_IBASE_COMP_GET_DETAIL'EXPORTINGi_comp           = ls_compi_date           = sy-datloi_time           = sy-timloiv_do_auth_check = 'X'IMPORTINGe_comp_det       = ls_comp_detEXCEPTIONSnot_specified    = 1doesnt_exist     = 2no_authority     = 3OTHERS           = 4.
IF sy-subrc = 2.WRITE: / 'Component does not exist!' COLOR COL_NEGATIVE.
ELSE.WRITE: / 'Detail returned:' , ls_comp_det-instance COLOR COL_POSITIVE.
ENDIF.
CLASS zcl_object_generator DEFINITIONPUBLICFINALCREATE PUBLIC .PUBLIC SECTION.TYPE-POOLS abap .CLASS-METHODS create_objectIMPORTING!iv_id              TYPE comm_product-product_id!iv_family          TYPE comm_product-object_family!iv_catid           TYPE comt_category_idRETURNINGVALUE(rv_create_ok) TYPE abap_bool .CLASS-METHODS class_constructor .PROTECTED SECTION.PRIVATE SECTION.CLASS-DATA so_core TYPE REF TO cl_crm_bol_core .CLASS-DATA so_fact TYPE REF TO cl_crm_bol_entity_factory .CLASS-DATA sv_id TYPE comm_product-product_id .CLASS-DATA sv_fam TYPE comm_product-object_family .CLASS-DATA sv_catid TYPE comt_category_id .CLASS-METHODS initIMPORTING!iv_id     TYPE comm_product-product_id!iv_family TYPE comm_product-object_family!iv_catid  TYPE comt_category_id .CLASS-METHODS create_header .TYPE-POOLS abap .CLASS-METHODS saveRETURNINGVALUE(rv_create_ok) TYPE abap_bool .
ENDCLASS.
CLASS ZCL_OBJECT_GENERATOR IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_OBJECT_GENERATOR=>CLASS_CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD class_constructor.so_core = cl_crm_bol_core=>get_instance( ).so_core->load_component_set( 'PROD_ALL' ).so_fact   = so_core->get_entity_factory( 'Product' ).ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_OBJECT_GENERATOR=>CREATE_HEADER
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD create_header.DATA: lt_param TYPE crmt_name_value_pair_tab,ls_param TYPE crmt_name_value_pair.ls_param-name = 'PRODUCT_ID'.ls_param-value = sv_id.APPEND ls_param TO lt_param.ls_param-name = 'PRODUCT_TYPE'.ls_param-value = '01'.APPEND ls_param TO lt_param.ls_param-name = 'ROOT_CAT_ID'.ls_param-value = sv_catid.APPEND ls_param TO lt_param.ls_param-name = 'ROOT_HIER_ID'.ls_param-value = 'R3PRODSTYP'.APPEND ls_param TO lt_param.ls_param-name = 'SHORT_TEXT'.ls_param-value = 'Dummy'.APPEND ls_param TO lt_param.ls_param-name = 'OBJECT_FAMILY'.ls_param-value = sv_fam.APPEND ls_param TO lt_param.DATA(lr_product) = so_fact->create( lt_param ).IF lr_product IS INITIAL.DATA(lo_glb_msg_cont) = so_core->get_global_message_cont( ).CALL METHOD lo_glb_msg_cont->if_genil_message_container~get_messagesEXPORTINGiv_message_type = if_genil_message_container=>mt_allIMPORTINGet_messages     = DATA(lt_msg).LOOP AT lt_msg ASSIGNING FIELD-SYMBOL(<msg>).WRITE:/ <msg>-message.ENDLOOP.ENDIF.ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_OBJECT_GENERATOR=>CREATE_OBJECT
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_ID                          TYPE        COMM_PRODUCT-PRODUCT_ID
* | [--->] IV_FAMILY                      TYPE        COMM_PRODUCT-OBJECT_FAMILY
* | [--->] IV_CATID                       TYPE        COMT_CATEGORY_ID
* | [<-()] RV_CREATE_OK                   TYPE        ABAP_BOOL
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD create_object.init( iv_id = iv_id iv_family = iv_family iv_catid = iv_catid ).create_header( ).rv_create_ok = save( ).ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_OBJECT_GENERATOR=>INIT
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_ID                          TYPE        COMM_PRODUCT-PRODUCT_ID
* | [--->] IV_FAMILY                      TYPE        COMM_PRODUCT-OBJECT_FAMILY
* | [--->] IV_CATID                       TYPE        COMT_CATEGORY_ID
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD init.sv_id = iv_id.sv_fam  = iv_family.sv_catid = iv_catid.ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_OBJECT_GENERATOR=>SAVE
* +-------------------------------------------------------------------------------------------------+
* | [<-()] RV_CREATE_OK                   TYPE        ABAP_BOOL
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD save.DATA(lo_transaction) = so_core->get_transaction( ).DATA(lv_changed) = lo_transaction->check_save_needed( ).CHECK lv_changed EQ abap_true.DATA(lv_success) = lo_transaction->save( ).IF lv_success = abap_true.lo_transaction->commit( ).rv_create_ok = abap_true.ELSE.lo_transaction->rollback( ).ENDIF.so_core->reset( ).ENDMETHOD.
ENDCLASS.

在同一session内创建, 修改和删除IBASE component相关推荐

  1. C#xml创建修改读取删除帮助类XmlHelper.cs

    <strong><span style="color:#ff0000;">[XML帮助类]C#xml创建修改读取删除帮助类XmlHelper.cs < ...

  2. 删除IBASE component时遇到data_not_consistent的exception

    Created by Jerry Wang, last modified on May 05, 2014 在删除IBASE component时传入的i_date和i_time设定为component ...

  3. BAPI : 计划订单的创建,修改和删除批导问题

    #遇见问题: 1.这三个BAPI一般用在批导程序中,有时候赋值过程中就会忽视计划订单的前导零.并且,在SE37里面对BAPI进行测试的时候,不输入前导零BAPI也会返回正确的结果,然而程序里并不行.个 ...

  4. oracle SEQUENCE 创建, 修改,删除

    oracle创建序列化: CREATE SEQUENCE seq_itv_collection             INCREMENT BY 1  -- 每次加几个               S ...

  5. SQL Server - 数据库(创建,修改管理-删除)-T-SQL 语句

    数据库 创建数据库 语法 CREATE DATABASE database_name ON(NAME = data_logical_file_name , FILENAME = 'data_os_fi ...

  6. 数据库(概念、语法、DBMS、SQL语言:创建数据库、表格,添加、修改、删除数据记录)...

    关系型数据库:以表作为实体,以主键和外键关系作为联系的一种数据结构. 主键:在关系型数据库中,用一个唯一的标识符来标志每一行,这个标识符就是主键.主键有两个特点:非空和不能重复. 外键:在关系型数据库 ...

  7. Mysql基础知识:创建、查看、修改和删除表

    Mysql 创建.查看.修改和删除表 1. 创建表 创建表的语法形式: CREATE TABLE 表名 ( 属性名 数据类型 约束条件,属性名 数据类型 约束条件,...) ENGINE=存储引擎名 ...

  8. ORACLE sequence各参数及创建修改删除使用详解示例

    ORACLE没有自增数据类型,如需生成业务无关的主键列或惟一约束列,可以用sequence序列实现. CREATE SEQUENCE语句及参数介绍: 详见官方文档:http://docs.oracle ...

  9. DDL语言(库和表的创建、修改、删除)——MySQL

    文章目录 DDL语言 1. 库的管理 1. 库的创建 2. 库的修改 3. 库的删除 2. 表的管理 1.表的创建 ★ 2.表的修改 (对表内的列进行操作) ①修改列名 ②修改列的类型或约束 ③添加新 ...

最新文章

  1. C#:CsvReader读取.CSV文件(转换成DataTable)
  2. 荐读:五月最值得阅读的15篇人工智能文章
  3. 搭建nginx服务器及文件的配置
  4. C++编程题,开心的小明
  5. 【错误记录】Flutter 组件报错 ( No Directionality widget found. | RichText widgets require a Directionality )
  6. shebang_Shebang来Java了吗?
  7. python支持中文路径_打开python遍历中文目录得到的文件路径报错
  8. cmder 基本配置和使用
  9. js 的prototype 属性和用法,外加__proto__
  10. 【华为云技术分享】【DevCloud · 敏捷智库】如何利用核心概念解决估算常见问题
  11. 速成pytorch学习——9天构建模型的3种方法
  12. JS 事件冒泡整理 浏览器的事件流
  13. web.xml 报错
  14. 《Ray Tracing in One Weekend》——Chapter 0: Overview
  15. 公式推导 11-21
  16. X1000之LCD部分的翻译
  17. 杭电多校(MINIEYE)第四场 补题
  18. 淘宝在线客服为什么回复那么慢
  19. python zipfile压缩文件夹
  20. 对8421码,5421码,2421码,余3码的认识

热门文章

  1. 【集合之HashMap】HashMap实现原理及非线程安全原因
  2. 用ModSecurity+PhantomJS进行服务器端XSS攻击检测
  3. sklearn自学指南(part5)--使用手册的目录
  4. 分类素材(part5)--大话Python机器学习(中)
  5. 特征工程(part3)--扁平化、过滤和分块
  6. android 图片气泡,android图片上显示气泡消息
  7. 如何将 winston log 库记录的日志写入 mongo DB 数据库
  8. SAP Spartacus 事件服务 Event Service 使用介绍
  9. 为什么按照 Angular 官网教程执行简单的测试代码,会遇到expect is not defined的错误消息
  10. 《SAP 传奇人物》系列人物故事:看透生死远没有操作0和1那么简单