IBASE component deletion_comp delete-程序员宅基地

技术标签: CRM  

Created by Jerry Wang, last modified on Oct 18, 2014

在使用FM CRM_IBASE_COMP_DELETE删除一个IBASE component时(使用下列report 测试),

 

clipboard1

 

 

通过ST05 trace能发现component deletion不包含物理的Database 删除动作,仅仅是把相关的IBASE数据的valid to time stamp设置成deletion时的time stamp。

 

clipboard2

 

 

删除后在tcode IB52里无法再找到component 110059:

 

clipboard3

 

 

只有在tcode IB53里将valid on的时间设置成deletion之前的时间,

 

clipboard4

 

 

才能看到被删除的component 信息:

 

clipboard5

 

 

 

 

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_create

 

  EXPORTING

 

    iv_object_name  = cl_crm_ibase_il_constant=>root_object

 

    iv_create_param = lt_param

 

    iv_number       = 1

 

  RECEIVING

 

    rv_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_messages

 

  EXPORTING

 

    iv_message_type = if_genil_message_container=>mt_all

 

  IMPORTING

 

    et_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'

 

  EXPORTING

 

    i_ibase_head      = ls_header

 

  IMPORTING

 

    e_struc_ibase_tab = lt_struc_tab

 

  EXCEPTIONS

 

    not_specified     = 1

 

    doesnt_exist      = 2

 

    no_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'

 

  EXPORTING

 

    i_comp           = ls_comp

 

    i_date           = sy-datlo

 

    i_time           = sy-timlo

 

    iv_do_auth_check = 'X'

 

  IMPORTING

 

    e_comp_det       = ls_comp_det

 

  EXCEPTIONS

 

    not_specified    = 1

 

    doesnt_exist     = 2

 

    no_authority     = 3

 

    OTHERS           = 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'

 

  EXPORTING

 

    i_comp              = ls_comp

 

    i_comp_det          = ls_comp_det_upd

 

  EXCEPTIONS

 

    data_not_consistent = 1

 

    ibase_locked        = 2

 

    not_succesful       = 3

 

    no_authority        = 4

 

    OTHERS              = 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_messages

 

  EXPORTING

 

    iv_message_type = if_genil_message_container=>mt_all

 

  IMPORTING

 

    et_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.

 

 

 

CALL FUNCTION 'CRM_IBASE_COMP_DELETE'

 

  EXPORTING

 

    i_comp              = ls_comp

 

  EXCEPTIONS

 

    data_not_consistent = 1

 

    ibase_locked        = 2

 

    not_succesful       = 3

 

    no_authority        = 4.

 

 

ASSERT sy-subrc = 0.

 

 

CALL FUNCTION 'CRM_IBASE_SAVE'.

 

 

COMMIT WORK AND WAIT.

 

 

CALL FUNCTION 'CRM_IBASE_COMP_GET_DETAIL'

 

  EXPORTING

 

    i_comp           = ls_comp

 

    i_date           = sy-datlo

 

    i_time           = sy-timlo

 

    iv_do_auth_check = 'X'

 

  IMPORTING

 

    e_comp_det       = ls_comp_det

 

  EXCEPTIONS

 

    not_specified    = 1

 

    doesnt_exist     = 2

 

    no_authority     = 3

 

    OTHERS           = 4.

 

 

IF sy-subrc = 2.

 

  WRITE: / 'Component does not exist:' , ls_comp-instance COLOR COL_NEGATIVE.

 

ELSE.

 

  WRITE: / 'Detail returned:' , ls_comp_det-instance COLOR COL_POSITIVE.

 

ENDIF.

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/i042416/article/details/95861774

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签