如何使用编程的方式,删除 CRM 文档的 attachment 数据

简介: 如何使用编程的方式,删除 CRM 文档的 attachment 数据

因为在工作中,我需要对 SAP CRM 的 attachment 模型,进行增删改查操作,因此我就编写了一个工具类。本文介绍 attachment 的 deletion 即删除操作。

我定义了一种方法,其中包含以下两个导入参数和一个返回参数:

  • iv_bor_type type string:业务对象的 BOR 类型
  • iv_uuid type raw16:您的业务对象实例的 guid
  • rv_successful 类型 abap_bool:表示删除是否成功

删除代码如下:

DATA:     ls_bo          TYPE SIBFLPORB,
          lt_loios    TYPE SKWF_IOS,
          ls_loios    TYPE SKWF_IO,
          ls_error    TYPE SKWF_ERROR,
          lt_badios   TYPE SKWF_IOERRS,
          lv_del_flag TYPE ABAP_BOOL.
    ls_bo-instid = iv_uuid.
    ls_bo-typeid = iv_bor_type.
    ls_bo-catid  = 'BO'.
    rv_successful = abap_false.
    CALL METHOD cl_crm_documents=>get_info
      EXPORTING
        business_object = ls_bo
      IMPORTING
        loios           = lt_loios.
    LOOP AT lt_loios INTO ls_loios.
      CALL METHOD cl_crm_documents=>lock
        EXPORTING
          is_bo    = ls_bo
          is_loio  = ls_loios
        IMPORTING
          es_error = ls_error.
      IF ls_error IS NOT INITIAL.
         RETURN.
      ENDIF.
    ENDLOOP.
    CALL METHOD cl_crm_documents=>delete
      EXPORTING
         business_object = ls_bo
         ios             = lt_loios
      IMPORTING
         bad_ios         = lt_badios
         error           = ls_error.
    IF ls_error IS INITIAL. " deletion failed
       rv_successful = abap_true.
    ENDIF.

通过测试,我发现它与大多数 BOR 类型的产品、IBASE、BP 和一份订单完美配合。


但是,它不适用于 SAP CRM7.0 EHP3 中的新 BOR 类型 CRMSOCPOST - 在报告中写入显式调用 COMMIT WORK 之前,我的 BO 和附件之间的关系并未真正删除。 但是,对于任何其他标准 CRM BOR 类型,不需要 COMMIT WORK。


是什么原因造成了这种差异呢?


经过一番调试终于找到答案。不知道大家是否已经观察到下面代码里的注释了吗? 写得很清楚:如果业务对象存在于数据库中,则不需要COMMIT WORK。

回到我的例子,由于CRMSOCPOST 是 CRM7.0 EHP3 中创建的新 BOR 类型,功能模块无法识别它,因此代码到达第 225 行,并且那么该 BO 实例就被认为在 DB 中不存在。 因此,要使删除工作始终需要显式 COMMIT WORK.


COMMIT WORK 是 SAP ABAP 中的一个关键字,用于提交事务,将事务中的所有数据库更新操作永久保存到数据库中。在 SAP 系统中,数据库更新操作通常是在事务内执行的,为了保证数据的一致性和完整性,需要将这些更新操作一起提交到数据库中,而 COMMIT WORK 就是用来实现这一目的的。


在 SAP 系统中,事务是指一组数据库操作的逻辑单元,它们要么全部执行成功,要么全部失败,不存在部分执行成功的情况。事务的执行是原子性的,即要么全部执行,要么全部回滚。当一个事务包含了一系列的数据库更新操作时,这些操作并不会立即生效,而是暂时存储在 SAP 数据库内存中,直到事务被提交才会将这些操作永久保存到数据库中。


使用 COMMIT WORK 关键字可以触发事务的提交,将事务中的所有数据库更新操作一次性提交到数据库中。一旦执行了 COMMIT WORK,所有在该事务内进行的数据库更新操作都会立即生效,并且变得不可逆转。

相关文章
|
1月前
|
存储 数据管理 数据处理
SAP CRM 里 Attachment 搜索的实现逻辑介绍
SAP CRM 里 Attachment 搜索的实现逻辑介绍
21 0
|
1月前
在 CRM WebClient UI Attachment 区域,创建支持 Web Service 的 Word 文档
在 CRM WebClient UI Attachment 区域,创建支持 Web Service 的 Word 文档
21 0
|
1月前
如何实现 CRM Attachment UI 的 Advanced 按钮
如何实现 CRM Attachment UI 的 Advanced 按钮
24 0
|
6月前
使用 ABAP CRM 函数 CRM_BSP_OIC_1O_SEARCH_FROM_RF 查找指定 guid的数据
使用 ABAP CRM 函数 CRM_BSP_OIC_1O_SEARCH_FROM_RF 查找指定 guid的数据
42 0
|
1月前
|
搜索推荐 API 数据安全/隐私保护
什么是 SAP CRM Attachment 创建的 Internal mode
什么是 SAP CRM Attachment 创建的 Internal mode
11 0
|
6月前
SAP CRM 如何使用 ABAP 代码读取 Campaign 的数据
SAP CRM 如何使用 ABAP 代码读取 Campaign 的数据
28 0
|
2月前
|
存储 对象存储 开发者
SAP CRM attachment 存储模型的技术属性详解
SAP CRM attachment 存储模型的技术属性详解
19 1
SAP CRM attachment 存储模型的技术属性详解
|
2月前
|
存储 数据管理 数据安全/隐私保护
如何动态控制 CRM attachment UI 的可编辑性(editability)
如何动态控制 CRM attachment UI 的可编辑性(editability)
22 0
|
6月前
|
存储 XML 编解码
使用 ABAP 函数读取 SAP CRM Survey 数据并解析
使用 ABAP 函数读取 SAP CRM Survey 数据并解析
43 0
|
6月前
|
API
使用 BOL API 创建 SAP CRM IBASE 数据
使用 BOL API 创建 SAP CRM IBASE 数据
48 0