enviar pdf por outlook desde proceso de fonfo

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • minerva0112
    Senior Member
    • nov
    • 116

    #1

    enviar pdf por outlook desde proceso de fonfo

    Hola estoy utilizando lo siguiente:


    LOOP AT it_correo.

    * Crear objeto OLE : outlook.application
    CREATE OBJECT appoutlook 'outlook.application' .
    * Mensajes vía MAPI
    CALL METHOD OF appoutlook 'GetNameSpace' = namespace
    EXPORTING
    #1 = 'MAPI'.
    * Crea objeto nuevo ITEM ( nuevo mensaje )
    CALL METHOD OF appoutlook 'CreateItem' = appitem
    EXPORTING
    #1 = '0'.
    * Propiedades TO , SUBJECT y BODY
    SET PROPERTY OF appitem 'To' = it_correo-correo.
    SET PROPERTY OF appitem 'Subject' = g_txt.
    SET PROPERTY OF appitem 'Body' = g_body.

    * Se adjunta el archivo
    IF NOT g_file IS INITIAL.
    CALL METHOD OF appitem 'Attachments' = attachments.
    CALL METHOD OF attachments 'Add'
    EXPORTING
    #1 = g_file.
    ENDIF.

    * Envíar directamente
    CALL METHOD OF appitem 'Send'.
    *Se muestra la pantalla del outlook
    ******* CALL METHOD OF appitem 'Display'.
    * Libera Espacio del objeto
    FREE OBJECT attachments.
    FREE OBJECT appitem.
    FREE OBJECT namespace.
    * Cierra Outlook ( solo si se quiere que quede cerrado )
    **CALL METHOD OF appoutlook 'Quit'.
    FREE OBJECT appoutlook.

    ENDLOOP.


    me sirve de maravilla cuando corro el reporte en linea, una vez que agendo los jobs simplemente no funciona

    por favor alguien me puede indicar un metodo para enviar un pdf por correo en proceso de fondo?

    gracias
  • Mauricio Hidalgo
    Senior Member
    • may
    • 481

    #2
    Claro por que OLE está en el front-end, no en el servidor de aplicaciones.

    Pregunta el PDF lo tienes a partir de que?:

    Una lista, un formulario, una orden spool, un PDF en tu disco local?...disco local imposible que lo puedas levantar en proceso de fondo.

    Saludos
    Editado por última vez por Mauricio Hidalgo; 09/07/2013, 18:47:41.

    Comentario

    • minerva0112
      Senior Member
      • nov
      • 116

      #3
      Originalmente publicado por Mauricio Hidalgo
      Claro por que OLE está en el front-end, no en el servidor de aplicaciones.

      Pregunta el PDF lo tienes a partir de que?:

      Una lista, un formulario, una orden spool, un PDF en tu disco local?...disco local imposible que lo puedas levantar en proceso de fondo.

      Saludos

      hola es un formulario (smartforms)

      Comentario

      • Mauricio Hidalgo
        Senior Member
        • may
        • 481

        #4
        Fijar lo siguientes atributos a la estructura de control de salida del formulario, parámetros CONTROL_PARAMETERS y OUTPUT_OPTIONS en el llamado del formulario .


        control-getotf = 'X'. "con esto tendras el OTF para poder enviar el PDF
        control-no_dialog = 'X' "Sin dialogo para selección de impresora
        output-tdnoprev = 'X'. "sin vista previa


        Te adjunto rutina para armar el envio del correo.

        FORM ENVIAR_MAIL_Usuario.
        DATA: OBJPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
        DATA: OBJHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
        DATA: OBJBIN LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
        DATA: OBJTXT LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
        DATA: RECLIST LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.
        DATA: DOC_CHNG LIKE SODOCCHGI1.
        DATA: TAB_LINES LIKE SY-TABIX.
        DATA L_NUM(3).
        DATA LARGO TYPE I.
        DATA SYSUBRC TYPE N.

        Data: v_ADDRNUMBER like ADRC-ADDRNUMBER,
        v_PERSNUMBER like ADRP-PERSNUMBER.


        DATA: BEGIN OF correo OCCURS 24.
        DATA: linea(255).
        DATA: END OF correo.

        DATA filesize TYPE I.

        * TOMAR OTF Y PASARLO A PDF
        CALL FUNCTION 'CONVERT_OTF'
        EXPORTING
        FORMAT = 'PDF'
        IMPORTING
        BIN_FILESIZE = FILESIZE
        TABLES
        OTF = T_OTF
        LINES = T_LINES
        EXCEPTIONS
        ERR_CONV_NOT_POSSIBLE = 1.

        * File Name
        DOC_CHNG-OBJ_NAME = 'MESSAGE'.
        * Mail Subject
        CONCATENATE 'Reclamo N° ' nast-objky
        into DOC_CHNG-OBJ_DESCR
        SEPARATED BY SPACE.

        * PACKING INFO TEXT DATA
        OBJTXT-LINE = 'Ver detalle de reclamo en Documento Adjunto.'.
        APPEND OBJTXT.

        DESCRIBE TABLE OBJTXT LINES TAB_LINES.
        READ TABLE OBJTXT INDEX TAB_LINES.
        DOC_CHNG-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJTXT ).

        * CLEAR OBJHEAD.
        * OBJHEAD = 'MiPDF.PDF'.
        * APPEND OBJHEAD.

        clear OBJPACK.
        OBJPACK-TRANSF_BIN = ''.
        OBJPACK-HEAD_START = 1.
        OBJPACK-HEAD_NUM = 0.
        OBJPACK-BODY_START = 1.
        OBJPACK-BODY_NUM = TAB_LINES.
        OBJPACK-DOC_TYPE = 'RAW'.
        APPEND OBJPACK.

        CALL FUNCTION 'QCE1_CONVERT'
        TABLES
        T_SOURCE_TAB = T_LINES
        T_TARGET_TAB = OBJBIN
        EXCEPTIONS
        CONVERT_NOT_POSSIBLE = 1.


        DESCRIBE TABLE OBJBIN LINES TAB_LINES.
        READ TABLE OBJBIN INDEX TAB_LINES.

        clear OBJPACK.
        OBJPACK-TRANSF_BIN = 'X'.
        OBJPACK-head_start = 1.
        OBJPACK-head_num = 0.
        OBJPACK-BODY_START = 1.
        OBJPACK-BODY_NUM = TAB_LINES.
        OBJPACK-DOC_TYPE = 'PDF'.
        OBJPACK-OBJ_NAME = 'COTIPDF'.

        CONCATENATE 'Cotizac_' nast-objky Into OBJPACK-OBJ_DESCR.

        * OBJPACK-OBJ_DESCR = 'Click para ver archivo'.
        OBJPACK-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJBIN ).
        APPEND OBJPACK.

        * Completing the recipient list target recipent
        clear RECLIST.
        select single ADDRNUMBER PERSNUMBER
        into (v_ADDRNUMBER, v_PERSNUMBER)
        from USR21
        where BNAME = sy-uname.

        if sy-subrc eq 0.
        select single SMTP_ADDR into RECLIST-RECEIVER
        from ADR6
        where ADDRNUMBER = v_ADDRNUMBER
        and PERSNUMBER = v_PERSNUMBER.
        if sy-subrc eq 0.
        RECLIST-REC_TYPE = 'U'.
        APPEND RECLIST.
        Else.
        * Si no encuentra el correo externo del usuario,
        * mandamos al correo interno de SAP.
        RECLIST-RECEIVER = sy-uname.
        RECLIST-REC_TYPE = 'B'.
        APPEND RECLIST.
        endif.
        ENDIF.

        *
        * Sending the document
        CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
        EXPORTING
        DOCUMENT_DATA = DOC_CHNG
        TABLES
        PACKING_LIST = OBJPACK
        * OBJECT_HEADER = OBJHEAD
        CONTENTS_BIN = OBJBIN
        CONTENTS_TXT = OBJTXT
        RECEIVERS = RECLIST
        EXCEPTIONS
        TOO_MANY_RECEIVERS = 1
        DOCUMENT_NOT_SENT = 2
        OPERATION_NO_AUTHORIZATION = 4
        OTHERS = 99.
        ENDFORM.

        Con eso debería poder armar tu programa para que pueda correr en segundo plano.

        Saludos

        Comentario

        • minerva0112
          Senior Member
          • nov
          • 116

          #5
          hola

          Originalmente publicado por Mauricio Hidalgo
          Fijar lo siguientes atributos a la estructura de control de salida del formulario, parámetros CONTROL_PARAMETERS y OUTPUT_OPTIONS en el llamado del formulario .


          control-getotf = 'X'. "con esto tendras el OTF para poder enviar el PDF
          control-no_dialog = 'X' "Sin dialogo para selección de impresora
          output-tdnoprev = 'X'. "sin vista previa


          Te adjunto rutina para armar el envio del correo.

          FORM ENVIAR_MAIL_Usuario.
          DATA: OBJPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
          DATA: OBJHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
          DATA: OBJBIN LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
          DATA: OBJTXT LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
          DATA: RECLIST LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.
          DATA: DOC_CHNG LIKE SODOCCHGI1.
          DATA: TAB_LINES LIKE SY-TABIX.
          DATA L_NUM(3).
          DATA LARGO TYPE I.
          DATA SYSUBRC TYPE N.

          Data: v_ADDRNUMBER like ADRC-ADDRNUMBER,
          v_PERSNUMBER like ADRP-PERSNUMBER.


          DATA: BEGIN OF correo OCCURS 24.
          DATA: linea(255).
          DATA: END OF correo.

          DATA filesize TYPE I.

          * TOMAR OTF Y PASARLO A PDF
          CALL FUNCTION 'CONVERT_OTF'
          EXPORTING
          FORMAT = 'PDF'
          IMPORTING
          BIN_FILESIZE = FILESIZE
          TABLES
          OTF = T_OTF
          LINES = T_LINES
          EXCEPTIONS
          ERR_CONV_NOT_POSSIBLE = 1.

          * File Name
          DOC_CHNG-OBJ_NAME = 'MESSAGE'.
          * Mail Subject
          CONCATENATE 'Reclamo N° ' nast-objky
          into DOC_CHNG-OBJ_DESCR
          SEPARATED BY SPACE.

          * PACKING INFO TEXT DATA
          OBJTXT-LINE = 'Ver detalle de reclamo en Documento Adjunto.'.
          APPEND OBJTXT.

          DESCRIBE TABLE OBJTXT LINES TAB_LINES.
          READ TABLE OBJTXT INDEX TAB_LINES.
          DOC_CHNG-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJTXT ).

          * CLEAR OBJHEAD.
          * OBJHEAD = 'MiPDF.PDF'.
          * APPEND OBJHEAD.

          clear OBJPACK.
          OBJPACK-TRANSF_BIN = ''.
          OBJPACK-HEAD_START = 1.
          OBJPACK-HEAD_NUM = 0.
          OBJPACK-BODY_START = 1.
          OBJPACK-BODY_NUM = TAB_LINES.
          OBJPACK-DOC_TYPE = 'RAW'.
          APPEND OBJPACK.

          CALL FUNCTION 'QCE1_CONVERT'
          TABLES
          T_SOURCE_TAB = T_LINES
          T_TARGET_TAB = OBJBIN
          EXCEPTIONS
          CONVERT_NOT_POSSIBLE = 1.


          DESCRIBE TABLE OBJBIN LINES TAB_LINES.
          READ TABLE OBJBIN INDEX TAB_LINES.

          clear OBJPACK.
          OBJPACK-TRANSF_BIN = 'X'.
          OBJPACK-head_start = 1.
          OBJPACK-head_num = 0.
          OBJPACK-BODY_START = 1.
          OBJPACK-BODY_NUM = TAB_LINES.
          OBJPACK-DOC_TYPE = 'PDF'.
          OBJPACK-OBJ_NAME = 'COTIPDF'.

          CONCATENATE 'Cotizac_' nast-objky Into OBJPACK-OBJ_DESCR.

          * OBJPACK-OBJ_DESCR = 'Click para ver archivo'.
          OBJPACK-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJBIN ).
          APPEND OBJPACK.

          * Completing the recipient list target recipent
          clear RECLIST.
          select single ADDRNUMBER PERSNUMBER
          into (v_ADDRNUMBER, v_PERSNUMBER)
          from USR21
          where BNAME = sy-uname.

          if sy-subrc eq 0.
          select single SMTP_ADDR into RECLIST-RECEIVER
          from ADR6
          where ADDRNUMBER = v_ADDRNUMBER
          and PERSNUMBER = v_PERSNUMBER.
          if sy-subrc eq 0.
          RECLIST-REC_TYPE = 'U'.
          APPEND RECLIST.
          Else.
          * Si no encuentra el correo externo del usuario,
          * mandamos al correo interno de SAP.
          RECLIST-RECEIVER = sy-uname.
          RECLIST-REC_TYPE = 'B'.
          APPEND RECLIST.
          endif.
          ENDIF.

          *
          * Sending the document
          CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
          EXPORTING
          DOCUMENT_DATA = DOC_CHNG
          TABLES
          PACKING_LIST = OBJPACK
          * OBJECT_HEADER = OBJHEAD
          CONTENTS_BIN = OBJBIN
          CONTENTS_TXT = OBJTXT
          RECEIVERS = RECLIST
          EXCEPTIONS
          TOO_MANY_RECEIVERS = 1
          DOCUMENT_NOT_SENT = 2
          OPERATION_NO_AUTHORIZATION = 4
          OTHERS = 99.
          ENDFORM.

          Con eso debería poder armar tu programa para que pueda correr en segundo plano.

          Saludos

          Debo de tener algo de mas o me esta faltando algo porque no me genera el correo ni en linea ni en proceso de fondo, please si me puedes ayudar te anexo el codigo

          FORM f_generar_archivo_pdf.


          * Funcion para llamar el formulario
          CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
          EXPORTING
          formname = 'ZHRO_LSTD_NTFCCNS'(031)
          IMPORTING
          fm_name = g_funcion
          EXCEPTIONS
          no_form = 1
          no_function_module = 2
          OTHERS = 3.


          g_control_parameters-getotf = 'X'.
          g_control_parameters-no_dialog = 'X'.
          g_output_options-tdnoprev = 'X'.
          g_output_options-tddest = 'PDF '.
          g_output_options-tdnewid = 'X'.
          g_output_options-tdimmed = 'X'.



          CALL FUNCTION g_funcion
          EXPORTING
          indicador = g_indicador
          texto = g_texto
          output_options = g_output_options
          control_parameters = g_control_parameters
          user_settings = space
          IMPORTING
          job_output_info = t_otf_from_fm
          TABLES
          it_data = it_data
          EXCEPTIONS
          formatting_error = 1
          internal_error = 2
          send_error = 3
          user_canceled = 4
          OTHERS = 5.


          IF sy-subrc EQ 0.
          t_otf[] = t_otf_from_fm-otfdata[].
          ENDIF.

          ENDFORM. "f_generar_archivo_pdf



          FORM f_enviar_correo.


          SELECT *
          FROM pa0105
          INTO TABLE it_pa0105a
          WHERE pernr IN p_remit
          AND endda EQ '99991231'
          AND subty EQ '0010'.

          LOOP AT it_pa0105a.
          MOVE: it_pa0105a-usrid_long TO it_correo-correo.
          APPEND it_correo.
          ENDLOOP.


          LOOP AT it_correo.
          * TOMAR OTF Y PASARLO A PDF
          CALL FUNCTION 'CONVERT_OTF'
          EXPORTING
          format = 'PDF'
          IMPORTING
          bin_filesize = filesize
          TABLES
          otf = t_otf
          lines = t_lines
          EXCEPTIONS
          err_conv_not_possible = 1.

          * File Name
          doc_chng-obj_name = 'MESSAGE'.
          * Mail Subject
          CONCATENATE 'Reclamo N° ' sy-datum
          INTO doc_chng-obj_descr
          SEPARATED BY space.

          * PACKING INFO TEXT DATA
          objtxt-line = 'Anexo Listado de Notificacion.'.
          APPEND objtxt.

          DESCRIBE TABLE objtxt LINES tab_lines.
          READ TABLE objtxt INDEX tab_lines.
          doc_chng-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( objtxt ).

          * CLEAR OBJHEAD.
          * OBJHEAD = 'MiPDF.PDF'.
          * APPEND OBJHEAD.

          CLEAR objpack.
          objpack-transf_bin = ''.
          objpack-head_start = 1.
          objpack-head_num = 0.
          objpack-body_start = 1.
          objpack-body_num = tab_lines.
          objpack-doc_type = 'RAW'.
          APPEND objpack.

          CALL FUNCTION 'QCE1_CONVERT'
          TABLES
          t_source_tab = t_lines
          t_target_tab = objbin
          EXCEPTIONS
          convert_not_possible = 1.


          DESCRIBE TABLE objbin LINES tab_lines.
          READ TABLE objbin INDEX tab_lines.

          CLEAR objpack.
          objpack-transf_bin = 'X'.
          objpack-head_start = 1.
          objpack-head_num = 0.
          objpack-body_start = 1.
          objpack-body_num = tab_lines.
          objpack-doc_type = 'PDF'.
          objpack-obj_name = 'COTIPDF'.

          CONCATENATE 'Listado Notificacion' sy-datum INTO objpack-obj_descr.

          * OBJPACK-OBJ_DESCR = 'Click para ver archivo'.
          objpack-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( objbin ).
          APPEND objpack.

          * Completing the recipient list target recipent
          CLEAR reclist.
          * SELECT SINGLE addrnumber persnumber
          * INTO (v_addrnumber, v_persnumber)
          * FROM usr21
          * WHERE bname = sy-uname.
          *
          * IF sy-subrc EQ 0.
          * SELECT SINGLE smtp_addr INTO reclist-receiver
          * FROM adr6
          * WHERE addrnumber = v_addrnumber
          * AND persnumber = v_persnumber.
          * IF sy-subrc EQ 0.
          * reclist-rec_type = 'U'.
          * APPEND reclist.
          * ELSE.
          ** Si no encuentra el correo externo del usuario,
          ** mandamos al correo interno de SAP.
          * reclist-receiver = sy-uname.
          * reclist-rec_type = 'B'.
          * APPEND reclist.
          * ENDIF.
          * ENDIF.
          reclist-receiver = it_correo-correo.
          reclist-rec_type = 'B'.
          APPEND reclist.

          * Sending the document
          CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
          EXPORTING
          document_data = doc_chng
          TABLES
          packing_list = objpack
          * OBJECT_HEADER = OBJHEAD
          contents_bin = objbin
          contents_txt = objtxt
          receivers = reclist
          EXCEPTIONS
          too_many_receivers = 1
          document_not_sent = 2
          operation_no_authorization = 4
          OTHERS = 99.

          ENDLOOP.

          Comentario

          • Mauricio Hidalgo
            Senior Member
            • may
            • 481

            #6
            Quita esto:

            g_output_options-tddest = 'PDF '.
            g_output_options-tdnewid = 'X'.
            g_output_options-tdimmed = 'X'.

            Son correos SAP Office?...porque si son externo el tipo debe ser 'U' no 'B'.

            Saludos

            Comentario

            Trabajando...