Untitled

 avatar
unknown
plain_text
3 years ago
7.3 kB
6
Indexable
class ZCL_MAILHANDLER definition
  public
  final
  create public .

public section.

  class-methods SEND_MAIL
    importing
      !IP_MAILTITLE type TLINE
      !IP_MAILBODY type BCSY_TEXT optional
      !IP_SENDERADDRESS type COMM_ID_LONG
      !IP_RECEIVERADDRESS type Z_EMAIL
      !IP_ATT_CONTENT_HEX type SOLIX_TAB optional
      !IP_SIZE type SO_OBJ_LEN optional
    exporting
      !EP_SUCCESS type BOOLEAN .
  class-methods GET_TEXT
    importing
      !IP_PERNR type PERNR_D optional
      !IP_REINR type REINR optional
      !IP_BEGDA type BEGDA optional
      !IP_ENDDA type ENDDA optional
      !IP_ENAME type CHAR50 optional
      !IP_FILE_NAME type DOKU_OBJ
    exporting
      !EP_MAILBODY type TLINE_TAB
      !EP_MAILTITLE type TLINE .
protected section.
private section.
ENDCLASS.



CLASS ZCL_MAILHANDLER IMPLEMENTATION.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_MAILHANDLER=>GET_TEXT
* +-------------------------------------------------------------------------------------------------+
* | [--->] IP_PERNR                       TYPE        PERNR_D(optional)
* | [--->] IP_REINR                       TYPE        REINR(optional)
* | [--->] IP_BEGDA                       TYPE        BEGDA(optional)
* | [--->] IP_ENDDA                       TYPE        ENDDA(optional)
* | [--->] IP_ENAME                       TYPE        CHAR50(optional)
* | [--->] IP_FILE_NAME                   TYPE        DOKU_OBJ
* | [<---] EP_MAILBODY                    TYPE        TLINE_TAB
* | [<---] EP_MAILTITLE                   TYPE        TLINE
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD get_text.

    DATA lt_readtable TYPE TABLE OF tline.
    DATA ls_line LIKE LINE OF lt_readtable.

    DATA: lv_pernr TYPE pernr_d,
          lv_reinr TYPE reinr,
          lv_begda TYPE char10,
          lv_endda TYPE char10,
          lv_ename TYPE char50,
          lv_topic TYPE char50.

*ZPKA_TEKSTTESTOWY
    CALL FUNCTION 'DOCU_GET'
      EXPORTING
        id                     = 'DT'
        langu                  = sy-langu
        object                 = ip_file_name
        typ                    = 'E'
        version                = 0
      TABLES
        line                   = lt_readtable.


    " Usuwanie zer poprzedzajacych numer
    lv_pernr = ip_pernr.
    lv_reinr = ip_reinr.
    SHIFT lv_pernr LEFT DELETING LEADING '0'.
    SHIFT lv_reinr LEFT DELETING LEADING '0'.

    " Zmiana formatu wyswietlania daty
    CONCATENATE ip_begda+6(2) ip_begda+4(2) ip_begda(4) INTO lv_begda SEPARATED BY '.'.
    CONCATENATE ip_endda+6(2) ip_endda+4(2) ip_endda(4) INTO lv_endda SEPARATED BY '.'.

    LOOP AT lt_readtable INTO ls_line.

      " Zastapienie na zmienne
      REPLACE ALL OCCURRENCES OF '[ip_pernr]' IN ls_line-tdline WITH lv_pernr.
      REPLACE ALL OCCURRENCES OF '[ip_reinr]' IN ls_line-tdline WITH lv_reinr.
      REPLACE ALL OCCURRENCES OF '[ip_begda]' IN ls_line-tdline WITH lv_begda.
      REPLACE ALL OCCURRENCES OF '[ip_endda]' IN ls_line-tdline WITH lv_endda.
      REPLACE ALL OCCURRENCES OF '[ip_ename]' IN ls_line-tdline WITH ip_ename.

      " Pobranie tytulu jesli pierwsza iteracja
      IF sy-tabix = 1.
        lv_topic = ls_line-tdline.
        " Zapis do tabeli jesli nastepne iteracje
      ELSE.
        MODIFY lt_readtable FROM ls_line INDEX sy-tabix TRANSPORTING tdline.
      ENDIF.
      CLEAR ls_line.

    ENDLOOP.
    DELETE lt_readtable INDEX 1.

    ep_mailbody = lt_readtable.
    ep_mailtitle = lv_topic.

  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_MAILHANDLER=>SEND_MAIL
* +-------------------------------------------------------------------------------------------------+
* | [--->] IP_MAILTITLE                   TYPE        TLINE
* | [--->] IP_MAILBODY                    TYPE        BCSY_TEXT(optional)
* | [--->] IP_SENDERADDRESS               TYPE        COMM_ID_LONG
* | [--->] IP_RECEIVERADDRESS             TYPE        Z_EMAIL
* | [--->] IP_ATT_CONTENT_HEX             TYPE        SOLIX_TAB(optional)
* | [--->] IP_SIZE                        TYPE        SO_OBJ_LEN(optional)
* | [<---] EP_SUCCESS                     TYPE        BOOLEAN
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD send_mail.

    DATA:
      gv_sent_to_all   TYPE os_boolean,
      gv_email         TYPE adr6-smtp_addr,
      gv_subject       TYPE so_obj_des,
      gv_text          TYPE bcsy_text,
      gr_send_request  TYPE REF TO cl_bcs,
      gr_bcs_exception TYPE REF TO cx_bcs,
      gr_recipient     TYPE REF TO if_recipient_bcs,
      gr_sender        TYPE REF TO cl_cam_address_bcs,
      gr_document      TYPE REF TO cl_document_bcs,
      temp_receivers   LIKE LINE OF ip_receiveraddress,
      lx_document_bcs  TYPE REF TO cx_document_bcs.

    DATA ls_line TYPE tline.

    TRY.
        "Create send request
        gr_send_request = cl_bcs=>create_persistent( ).

        "Email FROM
        gr_sender    = cl_cam_address_bcs=>create_internet_address( ip_senderaddress ).
        "Add sender to send request
        CALL METHOD gr_send_request->set_sender
          EXPORTING
            i_sender = gr_sender.

        "Email TO
        LOOP AT ip_receiveraddress INTO temp_receivers.
          "gv_email = 'frodo.baggins@outlook.com'.
          gr_recipient = cl_cam_address_bcs=>create_internet_address( temp_receivers ).
          "Add recipient to send request
          CALL METHOD gr_send_request->add_recipient
            EXPORTING
              i_recipient = gr_recipient
              i_express   = 'X'.
        ENDLOOP.

        "Email TITLE
        gv_subject = ip_mailtitle.


        gr_document = cl_document_bcs=>create_document(
                        i_type    = 'RAW'
                        i_text    = ip_mailbody
                        i_length  = '12'
                        i_subject = gv_subject ).

    if ip_size > 0.
        TRY.
            gr_document->add_attachment(
              EXPORTING
                i_attachment_type = 'XLS'
                i_attachment_subject = 'Form'
                i_attachment_size    = ip_size
                i_att_content_hex = ip_att_content_hex ).
        ENDTRY.
     ENDIF.

        gr_send_request->set_document( gr_document ).
        CALL METHOD gr_send_request->set_document( gr_document ).

        "Send email
        CALL METHOD gr_send_request->send(
          EXPORTING
            i_with_error_screen = 'X'
          RECEIVING
            result              = gv_sent_to_all ).
        IF gv_sent_to_all = 'X'.
          ep_success = abap_true.
        ELSE.
          ep_success = abap_false.
        ENDIF.

        "Commit to send email
        COMMIT WORK.

        "Exception handling
      CATCH cx_bcs INTO gr_bcs_exception.
        WRITE:
          'Error!',
          'Error type:',
          gr_bcs_exception->error_type.
    ENDTRY.

  ENDMETHOD.
ENDCLASS.
Editor is loading...