Skip to Content
Author's profile photo Former Member

Extract files attached to business process objects e.g. Sales Order, Service Order, and Accounting Documents etc.

             

Recently I was looking for a pointer on SDN for one of my requirement. The requirement was to read the sales order attachment and send that attachment in an e-mail in the same format it is stored in the sales order. 

 

This started my quest to find how documents attached to any application objects like sales order, accounting documents, service order can be extracted.

 

I thought to blog this and hope it will give a clue to those who are still looking to crack this problem.* </p><p> </p><p>This blog describes how sales order attachment is read and sent in an e-mail as document attachment. Similar way documents attached to other application object can be read.</p><p> </p><p>To attach documents you need to do few settings, add a new parameter SD_SWU_ACTIVE, value X in parameter tab of SU01 transaction. Save and come out of the transaction. This will enable attachment icon in VA02 transaction.</p><p> </p><p>        !https://weblogs.sdn.sap.com/weblogs/images/251791491/POattachmentsu01parameter.jpg|height=125|alt=image|width=448|src=https://weblogs.sdn.sap.com/weblogs/images/251791491/POattachmentsu01parameter.jpg|border=0!</p><p> </p><p>        image </p><p> </p><p>        !https://weblogs.sdn.sap.com/weblogs/images/251791491/POattachmentdocument.jpg|height=182|alt=image|width=448|src=https://weblogs.sdn.sap.com/weblogs/images/251791491/POattachmentdocument.jpg|border=0!</p><p> </p><p>       !https://weblogs.sdn.sap.com/weblogs/images/251791491/POattachmentlist.jpg|height=174|alt=image|width=448|src=https://weblogs.sdn.sap.com/weblogs/images/251791491/POattachmentlist.jpg|border=0! </p><p> </p><p> </p><p>As you can see in the above picture that a word document is attached to a sales order, now we get into the code snippet to see how attachments are read.</p><p> </p><p style=”margin: 0cm 0cm 10pt; text-indent: 36pt” class=”MsoNormal”>“Prepare Data for attachment” Read Generic Object Services</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”> </p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>is_role_options-sign      = ‘I’.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>is_role_options-option   = ‘EQ’.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>is_role_options-low        = ‘GOSAPPLOBJ’.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>append is_role_options to it_role_options.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>clear is_role_options.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”> </p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”> </p><p style=”margin: 0cm 0cm 10pt; text-indent: 36pt” class=”MsoNormal”>”document relation

is_relation_options-sign      = ‘I’.

is_relation_options-option   = ‘EQ’.

is_relation_options-low        = ‘ATTA’.

append is_relation_options to it_relation_options.

clear is_relation_options .

 

 

“Prepare the email content & header</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>ls_document_data-obj_descr   = ‘Sales Order attachement’.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>ls_document_data-obj_langu   =  sy-langu.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”> </p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>ls_object_header-line    = ‘Sales order Attachment’.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>append ls_object_header to lt_object_header.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>clear ls_object_header.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”> </p><p style=”margin: 0cm 0cm 0pt 36pt; text-align: justify” class=”MsoNormal”>ls_contents_txt-line  = ‘Please find the document attached in the sales order’.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>Append ls_contents_txt to lt_contents_txt.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>Clear ls_contents_txt.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”> </p><p style=”margin: 0cm 0cm 10pt; text-indent: 36pt” class=”MsoNormal”>Describe table lt_contents_txt lines lv_lines.</p><p style=”margin: 0cm 0cm 10pt; text-indent: 36pt” class=”MsoNormal”> </p><p style=”margin: 0cm 0cm 10pt; text-indent: 36pt” class=”MsoNormal”>Clear ls_packing_list-transf_bin.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>ls_packing_list-head_start    = 1.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>ls_packing_list-head_num    = 0.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>ls_packing_list-body_start    = 1.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>ls_packing_list-body_num    = lv_lines.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>ls_packing_list-doc_type      = ‘RAW’.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>append ls_packing_list to lt_packing_list.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>clear ls_packing_list.</p><p style=”margin: 0cm 0cm 10pt; text-indent: 36pt” class=”MsoNormal”> </p><p style=”margin: 0cm 0cm 10pt; text-indent: 36pt” class=”MsoNormal”>“Get the binary releationship of the document

  TRY.

      CALL METHOD cl_binary_relation=>read_links

        EXPORTING

             is_object                          =  is_object

             ip_logsys                         =  ip_logsys

             it_role_options                  =  it_role_options

             it_relation_options             =  it_relation_options

             ip_no_buffer                     =  ip_no_buffer

        IMPORTING

             et_links                           =  gt_links.

 

    CATCH cx_obl_parameter_error.

    CATCH cx_obl_internal_error.

    CATCH cx_obl_model_error.

  ENDTRY.

 *”Read the each Ref. links and convert in hex. content

  LOOP AT gt_links INTO gs_links.

    lv_doc_id  = gs_links-instid_b.

    CALL FUNCTION ‘SO_DOCUMENT_READ_API1’

      EXPORTING

          document_id                       =  lv_doc_id

      IMPORTING

        document_data                      = ls_documdata

      TABLES

        object_content                       =  lt_objcont

        contents_hex                         =  lt_objconthex

      EXCEPTIONS

        document_id_not_exist           =  1

        operation_no_authorization     =  2

        x_error                                 =  3

        OTHERS                                =  4.

 

    IF sy-subrc = 0.

 

 “Convert the ref. links to Attachment in e-mail</p><p style=”margin: 0cm 0cm 10pt; text-indent: 36pt” class=”MsoNormal”>      DESCRIBE TABLE lt_objcont LINES lv_lines.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”> </p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>      ls_packing_list-transf_bin      = abap_true.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>      ls_packing_list-body_num     = lv_lines.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>      ls_packing_list-doc_type        = ls_documdata-obj_type.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>      ls_packing_list-obj_name      = ‘ATTACHMENT’.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>      ls_packing_list-obj_descr       = ls_documdata-obj_descr.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>      ls_packing_list-doc_size        = ls_documdata-doc_size.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”> </p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>      APPEND ls_packing_list TO packing_list.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>      CLEAR  ls_packing_list.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”> </p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>     LOOP AT lt_objcont INTO ls_objcont.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>        ls_contents_bin-line       = ls_objcont-line.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>        APPEND ls_contents_bin TO contents_bin.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>        CLEAR: ls_contents_bin,  ls_objcont.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>      ENDLOOP.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”> </p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”> </p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>      LOOP AT lt_objconthex INTO ls_objconthex.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>        ls_contents_hex-line     = ls_objconthex-line.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>        APPEND ls_contents_hex TO contents_hex.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>        CLEAR: ls_contents_hex, ls_objconthex.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>      ENDLOOP.</p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”> </p><p style=”margin: 0cm 0cm 0pt; text-indent: 36pt” class=”MsoNormal”>    ENDIF.</p><p style=”margin: 0cm 0cm 10pt; text-indent: 36pt” class=”MsoNormal”>  ENDLOOP.</p><p style=”margin: 0cm 0cm 10pt; text-indent: 36pt” class=”MsoNormal”> </p><p style=”margin: 0cm 0cm 10pt; text-indent: 36pt” class=”MsoNormal”>“Send attachment in the mail

 

  CALL FUNCTION ‘SO_NEW_DOCUMENT_ATT_SEND_API1’

    EXPORTING

      document_data                       = document_data

      put_in_outbox                         = put_in_outbox

      commit_work                           = commit_work

    IMPORTING 

      sent_to_all                              = sent_to_all

      new_object_id                          = new_object_id

    TABLES

      packing_list                            = packing_list

      object_header                         = object_header

      contents_bin                           = contents_bin

      contents_txt                            = contents_txt

      contents_hex                          = contents_hex

      object_para                             = object_para

      object_parb                             = object_parb

      receivers                                 = receivers

    EXCEPTIONS

      too_many_receivers                  = 1

      document_not_sent                  = 2

      document_type_not_exist          = 3

      operation_no_authorization       = 4

      parameter_error                       = 5

      x_error                                    = 6

      enqueue_error                         = 7

      OTHERS                                  = 8.

 

  CASE sy-subrc.

    WHEN ok.

    WHEN 1.

      RAISE too_many_receivers.

    WHEN 2.

      RAISE document_not_sent  .

    WHEN 3.

      RAISE document_type_not_exist.

    WHEN 4.

      RAISE operation_no_authorization.

    WHEN 5.

      RAISE parameter_error.

    WHEN 7.

      RAISE enqueue_error .

    WHEN OTHERS.

      RAISE x_error.

  ENDCASE.

 

To read service order(IW32) attachment use business object BUS2088. 

 

 

 

Assigned Tags

      6 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Former Member
      Former Member
      Good info.
      But you would have used CL_BCS class for sending mail instead of FM.
      see the blog by Thomas Jung
      Author's profile photo Sampath Adavelly
      Sampath Adavelly
      You can still use the FM as i think, it is not obsolete (atleast till 640) and see thomas blog that is for 610 and higher versions
      Author's profile photo Sampath Adavelly
      Sampath Adavelly
      Interesting blog.... .
      Author's profile photo Former Member
      Former Member
      I need to view the document attached instead of mail it. How can do it?

      Thanks.

      Author's profile photo Former Member
      Former Member
      Blog Post Author
      Go to attachment Icon in VA02 and click on Attachments, you can view all the attached documents
      Author's profile photo HariKrishna Malladi
      HariKrishna Malladi

      Nice Blog Surender.....

      i have a requirement, how can i create attachments through program in particular sales order please help on this.

      Thank you in advance,
      Harikrishna M.