SAP发带excel附件的邮件,转自SAP砍刀的blog

tables: ekko.

 

parameters: p_email   type somlreci1-receiver.

 

types: begin of t_ekpo,

  ebeln type ekpo-ebeln,

  ebelp type ekpo-ebelp,

  aedat type ekpo-aedat,

  matnr type ekpo-matnr,

 end of t_ekpo.

data: it_ekpo type standard table of t_ekpo initial size 0,

      wa_ekpo type t_ekpo.

 

types: begin of t_charekpo,

  ebeln(10) type c,

  ebelp(5)  type c,

  aedat(8)  type c,

  matnr(18) type c,

 end of t_charekpo.

data: wa_charekpo type t_charekpo.

 

data:   it_message type standard table of solisti1 initial size 0

                with header line.

data:   it_attach type standard table of solisti1 initial size 0

                with header line.

 

data:   t_packing_list like sopcklsti1 occurs 0 with header line,

        t_contents like solisti1 occurs 0 with header line,

        t_receivers like somlreci1 occurs 0 with header line,

        t_attachment like solisti1 occurs 0 with header line,

        t_object_header like solisti1 occurs 0 with header line,

        w_cnt type i,

        w_sent_all(1) type c,

        w_doc_data like sodocchgi1,

        gd_error    type sy-subrc,

        gd_reciever type sy-subrc.

 

 

************************************************************************

*START_OF_SELECTION

start-of-selection.

*   Retrieve sample data from table ekpo

  perform data_retrieval.

 

*   Populate table with detaisl to be entered into .xls file

  perform build_xls_data_table.

 

 

************************************************************************

*END-OF-SELECTION

end-of-selection.

* Populate message body text

  perform populate_email_message_body.

 

* Send file by email as .xls speadsheet

  perform send_file_as_email_attachment

                               tables it_message

                                      it_attach

                                using p_email

                                      'Example .xls documnet attachment'

                                      'CSV'

                                      '12345.CSV'

                                      '1'

                                      ''

                                      ''

                             changing gd_error

                                      gd_reciever.

 

*   Instructs mail send program for SAPCONNECT to send email(rsconn01)

  perform initiate_mail_execute_program.

 

 

*&---------------------------------------------------------------------*

*&      Form  DATA_RETRIEVAL

*&---------------------------------------------------------------------*

*       Retrieve data form EKPO table and populate itab it_ekko

*----------------------------------------------------------------------*

form data_retrieval.

  select ebeln ebelp aedat matnr

   up to 10 rows

    from ekpo

    into table it_ekpo.

endform.                    " DATA_RETRIEVAL

 

 

*&---------------------------------------------------------------------*

*&      Form  BUILD_XLS_DATA_TABLE

*&---------------------------------------------------------------------*

*       Build data table for .xls document

*----------------------------------------------------------------------*

form build_xls_data_table.

*  CONSTANTS: con_cret TYPE x VALUE '0D',  "OK for non Unicode

*             con_tab TYPE x VALUE '09'.   "OK for non Unicode

 

*If you have Unicode check active in program attributes thnen you will

*need to declare constants as follows

*class cl_abap_char_utilities definition load.

  constants:

      con_tab  type c value cl_abap_char_utilities=>horizontal_tab,

      con_cret type c value cl_abap_char_utilities=>cr_lf.

 

*  CONCATENATE 'EBELN' 'EBELP' 'AEDAT' 'MATNR'

*         INTO it_attach SEPARATED BY con_tab.

  concatenate 'EBELN' 'EBELP' 'AEDAT' 'MATNR'

         into it_attach separated by ','.

  concatenate con_cret it_attach  into it_attach.

  append  it_attach.

 

  loop at it_ekpo into wa_charekpo.

*    CONCATENATE wa_charekpo-ebeln wa_charekpo-ebelp

*                wa_charekpo-aedat wa_charekpo-matnr

*           INTO it_attach SEPARATED BY con_tab.

    concatenate wa_charekpo-ebeln wa_charekpo-ebelp

                wa_charekpo-aedat wa_charekpo-matnr

           into it_attach separated by ','.

    concatenate con_cret it_attach  into it_attach.

    append  it_attach.

  endloop.

endform.                    " BUILD_XLS_DATA_TABLE

 

 

*&---------------------------------------------------------------------*

*&      Form  SEND_FILE_AS_EMAIL_ATTACHMENT

*&---------------------------------------------------------------------*

*       Send email

*----------------------------------------------------------------------*

form send_file_as_email_attachment tables pit_message

                                          pit_attach

                                    using p_email

                                          p_mtitle

                                          p_format

                                          p_filename

                                          p_attdescription

                                          p_sender_address

                                          p_sender_addres_type

                                 changing p_error

                                          p_reciever.

 

 

  data: ld_error    type sy-subrc,

        ld_reciever type sy-subrc,

        ld_mtitle like sodocchgi1-obj_descr,

        ld_email like  somlreci1-receiver,

        ld_format type  so_obj_tp ,

        ld_attdescription type  so_obj_nam ,

        ld_attfilename type  so_obj_des ,

        ld_sender_address like  soextreci1-receiver,

        ld_sender_address_type like  soextreci1-adr_typ,

        ld_receiver like  sy-subrc.

 

  ld_email   = p_email.

  ld_mtitle = p_mtitle.

  ld_format              = p_format.

  ld_attdescription      = p_attdescription.

  ld_attfilename         = p_filename.

  ld_sender_address      = p_sender_address.

  ld_sender_address_type = p_sender_addres_type.

 

 

* Fill the document data.

  w_doc_data-doc_size = 1.

 

* Populate the subject/generic message attributes

  w_doc_data-obj_langu = sy-langu.

  w_doc_data-obj_name  = 'SAPRPT'.

  w_doc_data-obj_descr = ld_mtitle .

  w_doc_data-sensitivty = 'F'.

 

* Fill the document data and get size of attachment

  clear w_doc_data.

  read table it_attach index w_cnt.

  w_doc_data-doc_size =

     ( w_cnt - 1 ) * 255 + strlen( it_attach ).

  w_doc_data-obj_langu  = sy-langu.

  w_doc_data-obj_name   = 'SAPRPT'.

  w_doc_data-obj_descr  = ld_mtitle.

  w_doc_data-sensitivty = 'F'.

  clear t_attachment.

  refresh t_attachment.

  t_attachment[] = pit_attach[].

 

* Describe the body of the message

  clear t_packing_list.

  refresh t_packing_list.

  t_packing_list-transf_bin = space.

  t_packing_list-head_start = 1.

  t_packing_list-head_num = 0.

  t_packing_list-body_start = 1.

  describe table it_message lines t_packing_list-body_num.

  t_packing_list-doc_type = 'RAW'.

  append t_packing_list.

 

* Create attachment notification

  t_packing_list-transf_bin = 'X'.

  t_packing_list-head_start = 1.

  t_packing_list-head_num   = 1.

  t_packing_list-body_start = 1.

 

  describe table t_attachment lines t_packing_list-body_num.

  t_packing_list-doc_type   =  ld_format.

  t_packing_list-obj_descr  =  ld_attdescription.

  t_packing_list-obj_name   =  ld_attfilename.

  t_packing_list-doc_size   =  t_packing_list-body_num * 255.

  append t_packing_list.

 

* Add the recipients email address

  clear t_receivers.

  refresh t_receivers.

  t_receivers-receiver = ld_email.

  t_receivers-rec_type = 'U'.

  t_receivers-com_type = 'INT'.

  t_receivers-notif_del = 'X'.

  t_receivers-notif_ndel = 'X'.

  append t_receivers.

 

  call function 'SO_DOCUMENT_SEND_API1'

    exporting

      document_data              = w_doc_data

      put_in_outbox              = 'X'

      sender_address             = ld_sender_address

      sender_address_type        = ld_sender_address_type

      commit_work                = 'X'

    importing

      sent_to_all                = w_sent_all

    tables

      packing_list               = t_packing_list

      contents_bin               = t_attachment

      contents_txt               = it_message

      receivers                  = t_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.

 

* Populate zerror return code

  ld_error = sy-subrc.

 

* Populate zreceiver return code

  loop at t_receivers.

    ld_receiver = t_receivers-retrn_code.

  endloop.

endform.                    "send_file_as_email_attachment

 

 

*&---------------------------------------------------------------------*

*&      Form  INITIATE_MAIL_EXECUTE_PROGRAM

*&---------------------------------------------------------------------*

*       Instructs mail send program for SAPCONNECT to send email.

*----------------------------------------------------------------------*

form initiate_mail_execute_program.

  wait up to 2 seconds.

  submit rsconn01 with mode = 'INT'

                with output = 'X'

                and return.

endform.                    " INITIATE_MAIL_EXECUTE_PROGRAM

 

 

*&---------------------------------------------------------------------*

*&      Form  POPULATE_EMAIL_MESSAGE_BODY

*&---------------------------------------------------------------------*

*        Populate message body text

*----------------------------------------------------------------------*

form populate_email_message_body.

  refresh it_message.

  it_message = 'Please find attached a list test ekpo records'.

  append it_message.

endform.                    "populate_email_message_body

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值