Ayuda SAP

Función ABAP para Enviar correo al Outlook - (R/3)

sap-abap
Etiquetas: #<Tag:0x00007f73731da1d0>

#1

Hola a todos!!!
Los molesto con la siguiente consulta en R/3 …
Tengo un programa Z, donde debo mandar datos (una estructura) a un usuario determinado (via mail).
Tengo el programa, tengo los datos … tengo el/los usuarios …
Me falta la parte del mail.
Que función puedo utilizar (en procedural, nada de objetos ¡please!) para mandar mails???
Vi que hay una so_document_send …
Pero quiero saber si hay nuevas, mejores o como se usa ésta en su defecto.
Muchas gracias!


#2

Una posibilidad es la clase CL_BCS:

  CONSTANTS:
      lc_raw      TYPE char03 VALUE 'RAW'.

  DATA:
    lv_mlrec         TYPE so_obj_nam,
    lv_sent_to_all   TYPE os_boolean,
    lv_email         TYPE adr6-smtp_addr,
    lv_subject       TYPE so_obj_des,
    lv_text          TYPE bcsy_text,
    lv_facade        TYPE REF TO cl_bcs,
    lr_send_request  TYPE REF TO cl_send_request_bcs,
    lr_bcs_exception TYPE REF TO cx_bcs,
    lr_recipient     TYPE REF TO if_recipient_bcs,
    lr_sender        TYPE REF TO cl_sapuser_bcs,
    lr_document      TYPE REF TO cl_document_bcs,
    lv_mail_defecto  TYPE tvarv_val,
    lv_req_stat TYPE bcs_rqst VALUE 'A', "confirmar todos los status
    lv_statmail TYPE bcs_stml VALUE 'E'. "solo para status de error

  TRY.
*      Create send request
      lv_facade = cl_bcs=>create_persistent( ).
      lr_send_request = lv_facade->send_request.

*     Email FROM...
      lr_sender ?= cl_sapuser_bcs=>create( sy-uname ).

*     Email TO...
      lr_recipient = cl_cam_address_bcs=>create_internet_address( lv_email ).

*     Add recipient to send request
      CALL METHOD lr_send_request->add_recipient
        EXPORTING
          i_recipient = lr_recipient
          i_express   = 'X'.

      lr_document = cl_document_bcs=>create_from_text(
                    i_text = lv_text
                    i_importance = '5'
                    i_subject = lv_subject ).

*     Establecer documento
      CALL METHOD lr_send_request->setu_document( lr_document ).

*     Request error status
      CALL METHOD lr_send_request->setu_requested_status( lv_req_stat ).

*     Mail for which status?
      CALL METHOD lr_send_request->setu_status_mail( lv_statmail ).

*     Enviar
      CALL METHOD lr_send_request->release( i_with_error_screen = 'X' ).
*
      IF sy-subrc <> 0.
        e_cod_ret = gc_ok.
        e_msj = text-i01. " 'Email sent!'.
      ENDIF.

* Commit to send email
      COMMIT WORK.

* Exception handling
    CATCH cx_bcs INTO lr_bcs_exception.
      e_cod_ret = gc_ko.
      CONCATENATE text-i02 lr_bcs_exception->error_type INTO e_msj SEPARATED BY space.
  ENDTRY.

#3

Hola mira revisa este otro post, quizás te sea de utilidad

Saludos!


#4

Hola!

Yo he utilizado esta función:

             CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
                EXPORTING
                  DOCUMENT_DATA              = LT_MAILSUBJECT
                TABLES
                  OBJECT_CONTENT             = LT_MAILTXT
                  RECEIVERS                  = LT_MAILRECIPIENTS
                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.

saludos!


#5

Muchas gracias a todos!!!


#6

¿te ha servido alguna respuesta?