在我的日常工作中,出于复用性考虑,我使用方法 CREATE_DOC 创建一个实用程序类。 它有以下四个输入参数:
下面是该方法的完整源代码。
事实上,附件的所有属性都可以在此方法的输入参数中使用。为简单起见,我只需将它们硬编码到示例代码中即可。
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
:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。