且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用ABAP代码给SAP CRM Business object创建附件Attachment

更新时间:2022-09-03 11:13:47

For a complete list of all my blogs regarding content management, please see here.


I create a utility class with method CREATE_DOC. It has following four input parameters:


iv_data type xstring – the binary data which you would like to store as attachment

iv_bor_type type string – the BOR type of your business object. You can view view business object model in tcode SWO1

iv_guid type raw16 – the guid of your business object instance

iv_file_name type string – the file name which will appear in attachment assignment block.

The source code of method below: ( in fact all attributes for an attachment could be available in the input parameters of this method. For simplicity reason I

just hard code them in the sample code )

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.

I write a piece of code to test it. After report runs I could see the generated attachment.

使用ABAP代码给SAP CRM Business object创建附件Attachment

You can also test whether the attachment is created successfully in the backend. Test class method get_info in SE24.

Specify importing parameter BUSINESS_OBJECT:


使用ABAP代码给SAP CRM Business object创建附件Attachment

Execute and you should get result as below: one physical object and one logical object according to how-is-attachment-physically-stored-in-database-table-in-cm-framework.


使用ABAP代码给SAP CRM Business object创建附件Attachment

Never forget to call COMMIT WORK in your code, since the persistence of the relationship between attachment and your business object are implemented via generic object service in a update process.You could easily find this via SAT trace on your code


使用ABAP代码给SAP CRM Business object创建附件Attachment

or switch on update debugging in your debugger settings.

使用ABAP代码给SAP CRM Business object创建附件Attachment