前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我攻克的技术难题:如何使用 ABAP 编程的方式,给 Business Object 创建 attachment

我攻克的技术难题:如何使用 ABAP 编程的方式,给 Business Object 创建 attachment

原创
作者头像
Jerry Wang
修改2024-02-06 15:41:03
1220
修改2024-02-06 15:41:03
举报

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

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

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

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

代码语言:sql
复制
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:

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档