如何使用 ABAP 编程的方式,给 Business Object 创建 attachment

简介: 如何使用 ABAP 编程的方式,给 Business Object 创建 attachment

在我的日常工作中,出于复用性考虑,我使用方法 CREATE_DOC 创建一个实用程序类。 它有以下四个输入参数:


  • iv_data type xstring - 想要存储为附件的二进制数据
  • iv_bor_type type string - 业务对象的 BOR 类型。 您可以在tcode SWO1中查看查看业务对象模型
  • iv_guid type raw16 - 您的业务对象实例的 guid
  • iv_file_name 类型 string - 将出现在附件分配块中的文件名。

下面是该方法的完整源代码。

事实上,附件的所有属性都可以在此方法的输入参数中使用。为简单起见,我只需将它们硬编码到示例代码中即可。

DATA:ls_bo              TYPE sibflporb,
         ls_prop            TYPE LINE OF sdokproptys,
         lt_prop            TYPE sdokproptys,
         lt_properties_attr TYPE crmt_attr_name_value_t,
         ls_file_info       TYPE sdokfilaci,
         lt_file_info       TYPE sdokfilacis,
         lt_file_content    TYPE sdokcntbins,
         lv_length          TYPE i,
         lv_file_xstring    TYPE xstring,
         ls_loio            TYPE skwf_io,
         ls_phio            TYPE skwf_io,
         ls_error           TYPE skwf_error.
    ls_prop-name = 'DESCRIPTION'.
    ls_prop-value = 'created by Tool'. " replace it with your own description for attachment
    APPEND ls_prop TO lt_prop.
    ls_prop-name = 'KW_RELATIVE_URL'.
    ls_prop-value = iv_file_name. " in the sample code I just reuse file name as relative url
    APPEND ls_prop TO lt_prop.
    ls_prop-name = 'LANGUAGE'.
    ls_prop-value = sy-langu.
    APPEND ls_prop TO lt_prop.
    lv_file_xstring = iv_data.
    CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
      EXPORTING
        buffer        = lv_file_xstring
      IMPORTING
        output_length = lv_length
      TABLES
        binary_tab    = lt_file_content.
    ls_file_info-binary_flg = 'X'.
    ls_file_info-file_name = iv_file_name.
    ls_file_info-file_size = lv_length.
    ls_file_info-mimetype = 'image/jpeg'. "use the correct mime type for your attachment
    APPEND ls_file_info TO lt_file_info.
    ls_bo-INSTID = iv_guid.
    ls_bo-typeid = iv_bor_type.
    ls_bo-catid = 'BO'.
    CALL METHOD cl_crm_documents=>create_with_table
      EXPORTING
        business_object     = ls_bo
        properties          = lt_prop
        properties_attr     = lt_properties_attr
        file_access_info    = lt_file_info
        file_content_binary = lt_file_content
        raw_mode            = 'X'
      IMPORTING
        loio                = ls_loio
        phio                = ls_phio
        error               = ls_error. " evaluate if there is anything wrong during creation
COMMIT WORK.

我写了一段代码来测试一下。ABAP 报表运行后,我可以在 WebClient UI 上看到生成的附件。

我们还可以在后台测试附件是否创建成功。 在 SE24 中测试类方法 get_info。

指定输入参数 BUSINESS_OBJECT:


记得在代码中调用 COMMIT WORK,因为附件和业务对象之间关系的持久性是通过更新过程中的通用对象服务实现的。我们可以通过代码上的 SAT 跟踪轻松找到这一点。


COMMIT WORK 是 SAP ABAP 中的一个关键字,用于提交数据库事务。在 ABAP 程序中,当需要对数据库进行更新操作时,通常会开启一个事务,将所有相关的数据库操作打包在一起,以确保这些操作要么全部成功执行,要么全部失败回滚,保持数据库的一致性。COMMIT WORK 的作用就是将当前事务中的所有数据库更新操作提交,使其永久生效,同时释放数据库锁定并结束当前事务。


在 SAP 系统中,COMMIT WORK 的使用非常普遍,特别是在需要保证数据完整性和一致性的场景下,比如在修改或创建重要的业务数据时,如订单、发票、付款等。通过提交事务,可以确保数据的修改是持久的,并且其他事务能够看到这些变化。

或者在调试器中,启用 update debugging:

相关文章
|
1月前
|
数据库
ABAP 泛型编程实战 - 分享一个数据库表内容的拷贝工具试读版
ABAP 泛型编程实战 - 分享一个数据库表内容的拷贝工具试读版
20 0
|
6月前
|
JavaScript 前端开发 API
DOM编程:Document Object Model
DOM编程:Document Object Model
|
20天前
|
存储
使用 ABAP 代码打印出 SAP CRM 系统里所有维护了 Sales Area 的 business partner id
使用 ABAP 代码打印出 SAP CRM 系统里所有维护了 Sales Area 的 business partner id
20 0
|
1月前
|
API 数据库 开发者
如何使用编码方式获取一个 Business Object 的所有 Attachment 数据
如何使用编码方式获取一个 Business Object 的所有 Attachment 数据
13 0
|
1月前
|
JavaScript 前端开发 Java
编程笔记 html5&css&js 073 JavaScript Object数据类型
编程笔记 html5&css&js 073 JavaScript Object数据类型
|
6月前
|
JavaScript 前端开发 Java
如何使用 SAP ABAP Development Tool 连接 SAP BTP 上的免费 ABAP 编程环境试读版
如何使用 SAP ABAP Development Tool 连接 SAP BTP 上的免费 ABAP 编程环境试读版
38 0
|
5月前
|
Java
java判断Object对象是否为空demo
java判断Object对象是否为空demo
|
16天前
|
JavaScript
js 字符串String转对象Object
该代码示例展示了如何将一个以逗号分隔的字符串(`'1.2,2,3,4,5'`)转换为对象数组。通过使用`split(',')`分割字符串并`map(parseFloat)`处理每个元素,将字符串转换成浮点数数组,最终得到一个对象数组,其类型为`object`。
|
1月前
|
存储 设计模式 Python
Python中的类(Class)和对象(Object)
Python中的类(Class)和对象(Object)
30 0
|
1月前
|
存储 JavaScript
JS中Map对象与object的区别
JS中Map对象与object的区别