Senin, 04 Maret 2013

Sending Email with XLS Attachments



REPORT MESSAGE-ID 00
NO STANDARD PAGE HEADING LINE-SIZE 200 LINE-COUNT 65.

TABLES: bsik, lfa1, somlreci1.

SELECT-OPTIONS: s_email FOR somlreci1-receiver NO INTERVALS.
PARAMETERS : p_sub TYPE char50 DEFAULT 'Notification',
             p_file TYPE char50 DEFAULT 'Open DP'.



DATA BEGIN OF t_bsik OCCURS 0,
  bukrs TYPE bsik-bukrs,
  zuonr  TYPE bsik-zuonr,
  belnr  TYPE bsik-belnr,
  gjahr TYPE bsik-gjahr,
  blart  TYPE bsik-blart,
  bldat  TYPE bsik-bldat,
  budat  TYPE bsik-budat,
  xblnr  TYPE bsik-xblnr,
  zumsk  TYPE bsik-zumsk,
  bschl  TYPE bsik-bschl,
  zlspr  TYPE bsik-zlspr,
  vertn  TYPE bsik-vertn,
  dmbtr  TYPE bsik-dmbtr,
  wrbtr  TYPE bsik-wrbtr,
  waers  TYPE bsik-waers,
  augbl  TYPE bsik-augbl,
  bktxt  TYPE bkpf-bktxt,
  sgtxt  TYPE bsik-sgtxt,
  saknr  TYPE bsik-saknr,
  lifnr  TYPE bsik-lifnr,
  name1 TYPE lfa1-name1,
  usnam  TYPE bkpf-usnam,
  prctr TYPE bsik-prctr,
  ebeln TYPE ekbe-ebeln,
  ebelp TYPE ekbe-ebelp,
END OF t_bsik.

DATA BEGIN OF t_bkpf OCCURS 0,
       bukrs TYPE bkpf-bukrs,
       belnr TYPE bkpf-belnr,
       gjahr TYPE bkpf-gjahr,
       bktxt TYPE bkpf-bktxt,
       usnam TYPE bkpf-usnam,
  END OF t_bkpf.

DATA BEGIN OF t_lfa1 OCCURS 0,
  lifnr TYPE lfa1-lifnr,
  name1 TYPE lfa1-name1,
END OF t_lfa1.

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 WITH HEADER LINE,
        t_contents LIKE solisti1 OCCURS WITH HEADER LINE,
        t_receivers LIKE somlreci1 OCCURS WITH HEADER LINE,
        t_attachment LIKE solisti1 OCCURS WITH HEADER LINE,
        t_object_header LIKE solisti1 OCCURS 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.
  PERFORM get_data.
  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 'XLS'
        'filename'
        ' '
        ' '
  CHANGING gd_error
           gd_reciever.

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


*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_data.
  DATA : tgl TYPE sy-datum.
  tgl = sy-datum - 14.
*select BUKRS LIFNR=tidak sama dengan 52* GJAHR BELNR=15* BLART=KZ from Tables : bsik bktxt usnam
  SELECT bukrs zuonr belnr gjahr blart bldat budat xblnr zumsk bschl zlspr vertn dmbtr wrbtr waers
         augbl sgtxt  saknr lifnr prctr ebeln ebelp
    INTO CORRESPONDING FIELDS OF TABLE t_bsik
    FROM bsik
    UP TO 25 ROWS.

  IF t_bsik[] IS NOT INITIAL.
    SELECT bukrs belnr gjahr bktxt usnam
      INTO CORRESPONDING FIELDS OF TABLE t_bkpf
      FROM bkpf
      FOR ALL ENTRIES IN t_bsik
      WHERE bukrs = t_bsik-bukrs
        AND belnr = t_bsik-belnr
        AND gjahr = t_bsik-gjahr.

    SELECT lifnr name1
      INTO CORRESPONDING FIELDS OF TABLE t_lfa1
      FROM lfa1
      FOR ALL ENTRIES IN t_bsik
      WHERE lifnr = t_bsik-lifnr.
  ENDIF.

  FIELD-SYMBOLS  LIKE LINE OF t_bsik.
  LOOP AT t_bsik ASSIGNING .
    READ TABLE t_bkpf WITH KEY bukrs = -bukrs belnr = -belnr gjahr = -gjahr.
    IF sy-subrc = 0.
      -bktxt = t_bkpf-bktxt.
      -usnam = t_bkpf-usnam.
    ENDIF.

    READ TABLE t_lfa1 WITH KEY lifnr = -lifnr.
    IF sy-subrc = 0.
      REPLACE ALL OCCURRENCES OF '"' IN t_lfa1-name1 WITH ''.
      -name1 = t_lfa1-name1.
    ENDIF.
  ENDLOOP.

  SORT t_bsik BY lifnr.
ENDFORM.                    " DATA_RETRIEVAL


*&---------------------------------------------------------------------*
*&      Form  build_xls_data_table
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM build_xls_data_table.
  DATA : nilai TYPE char30,
         post_date TYPE char10.
  CONSTANTS:
  con_tab  TYPE VALUE cl_abap_char_utilities=>horizontal_tab,
  con_cret TYPE VALUE cl_abap_char_utilities=>cr_lf.

  CONCATENATE 'ASSIGNMENT' 'DOC NUMBER' 'DOC TYPE' 'POSTING DATE' 'REFERENCE' 'POST.KEY' 'PAYMENT BLOCK'
              'G/L ACCOUNT' 'NO VENDOR' 'NAMA' 'NILAI' 'CURRENCY' 'DOC. HEADER TEXT'  'TEXT' 'PO' 'ITEM' 'USERNAME' 'PROFIT CENTER'
  INTO it_attach SEPARATED BY con_tab.

  CONCATENATE con_cret it_attach  INTO it_attach.
  APPEND  it_attach.

  IF t_bsik[] IS NOT INITIAL.
    LOOP AT t_bsik.
      CLEAR : nilai, post_date.
      WRITE t_bsik-wrbtr CURRENCY t_bsik-waers TO nilai.
      CONCATENATE t_bsik-budat+6(2) t_bsik-budat+4(2) t_bsik-budat(4) INTO post_date SEPARATED BY '/'.
      CONCATENATE t_bsik-zuonr t_bsik-belnr t_bsik-blart post_date t_bsik-xblnr t_bsik-bschl t_bsik-zlspr
                  t_bsik-saknr t_bsik-lifnr t_bsik-name1 nilai t_bsik-waers t_bsik-bktxt t_bsik-sgtxt
                  t_bsik-ebeln t_bsik-ebelp t_bsik-usnam t_bsik-prctr INTO it_attach SEPARATED BY con_tab.
      CONCATENATE con_cret it_attach INTO it_attach.
      APPEND it_attach.
      CLEAR it_attach.
    ENDLOOP.
  ENDIF.

ENDFORM.                    " BUILD_XLS_DATA_TABLE


*&---------------------------------------------------------------------*
*&      Form  send_file_as_email_attachment
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PIT_MESSAGE           text
*      -->PIT_ATTACH            text
*      -->P_EMAIL               text
*      -->P_MTITLE              text
*      -->P_FORMAT              text
*      -->P_FILENAME            text
*      -->P_ATTDESCRIPTION      text
*      -->P_SENDER_ADDRESS      text
*      -->P_SENDER_ADDRES_TYPE  text
*      -->P_ERROR               text
*      -->P_RECIEVER            text
*----------------------------------------------------------------------*
FORM send_file_as_email_attachment
TABLES pit_message
       pit_attach
USING p_format
      p_filename
      p_sender_address
      p_sender_addres_type
CHANGING p_error
         p_reciever.

  DATA: ld_error    TYPE sy-subrc,
        ld_reciever TYPE sy-subrc,
        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_format              = p_format.
  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 = p_sub .
  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 - ) * 255 + STRLEN( it_attach ).
  w_doc_data-obj_langu  = sy-langu.
  w_doc_data-obj_name   = 'SAPRPT'.
  w_doc_data-obj_descr  = p_sub.
  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  =  p_file.
  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.

  LOOP AT s_email.
    t_receivers-receiver = s_email-low.
    t_receivers-rec_type = 'U'.
    t_receivers-com_type = 'INT'.
    t_receivers-notif_del = 'X'.
    t_receivers-notif_ndel = 'X'.
    APPEND t_receivers.
    CLEAR t_receivers.
  ENDLOOP.

  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
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM initiate_mail_execute_program.
  WAIT UP TO SECONDS.
  SUBMIT rsconn01 WITH mode 'INT'
  WITH output ''
  AND RETURN.
ENDFORM.                    " INITIATE_MAIL_EXECUTE_PROGRAM


*&---------------------------------------------------------------------*
*&      Form  populate_email_message_body
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM populate_email_message_body.
  REFRESH it_message.
  it_message = 'DH.'.
  APPEND it_message.
  it_message = ''.
  APPEND it_message.
  it_message = 'Please find attached a list Open DP records.'.
  APPEND it_message.
  it_message = ''.
  APPEND it_message.
  it_message = 'Matursuwon.'.
  APPEND it_message.
ENDFORM.                    " POPULATE_EMAIL_MESSAGE_BODY

Tidak ada komentar:

Posting Komentar