Skip to Content
0
Former Member
Sep 12, 2007 at 03:07 PM

Problem sending Smartform to email as PDF attachment.

45 Views

Hello everybody,

I'm having trouble sending a smartform output to an email address as a pdf attachment using function SO_NEW_DOCUMENT_ATT_SEND_API1. I have read many of the topics posted in this forum regarding that issue and incorporated some of the suggestions in my code but still I have not been able to see the pdf attachment.

I am using function CONVERT_OTFSPOOLJOB_2_PDF to convert the spool job to a pdf document and I was able to attach it to an email and to deliver it to an email recipient. The problem is that when the recipient opens the attached file only can see a blank page. Does anybody knows why this happens?

Here is a piece of my code:

START-OF-SELECTION.

  PERFORM READ TABLES.

  PERFORM GET_SM_FUNCTION_MODULE_NAME.

  PERFORM CALL_SM_FUNCTION_MODULE.

  PERFORM GET_SPOOL_NUMBER.

  PERFORM CONVERT_TO_PDF.

  PERFORM SEND_TO_EMAIL.

*&---------------------------------------------------------------------*
*&      Form  GET_SM_FUNCTION_MODULE_NAME
*&---------------------------------------------------------------------*
FORM GET_SM_FUNCTION_MODULE_NAME.

  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME           = 'ZFINARF003'
    IMPORTING
      FM_NAME            = FUNC_MODULE_NAME
    EXCEPTIONS
      NO_FORM            = 1
      NO_FUNCTION_MODULE = 2
      OTHERS             = 3.


*&---------------------------------------------------------------------*
*&      Form  CALL_SM_FUNCTION_MODULE
*&---------------------------------------------------------------------*
FORM CALL_SM_FUNCTION_MODULE.

  SORT IT_KNA1 BY KUKLA KUNNR.

  DESCRIBE TABLE IT_KNA1 LINES LINEAS.

  LOOP AT IT_KNA1 INTO WA_KNA1.

    CALL FUNCTION FUNC_MODULE_NAME
      EXPORTING
          CONTROL_PARAMETERS = WA_CTRLOP
          OUTPUT_OPTIONS     = WA_COMPOP
          USER_SETTINGS      = 'X'
          LOGO               = P_LOGO
          POS_DAT1           = BUDAT01
          POS_DAT2           = BUDAT02
          COMPANY            = COMPANY
      IMPORTING
          JOB_OUTPUT_INFO    = WA_OUTPUT_INFO
          JOB_OUTPUT_OPTIONS = WA_OUTPUT_OPTIONS
      TABLES
          TBSID              = IT_BSID
          TKNA1              = T_KNA1
      EXCEPTIONS
          FORMATTING_ERROR   = 1
          INTERNAL_ERROR     = 2
          SEND_ERROR         = 3
          USER_CANCELED      = 4
          OTHERS             = 5.
    CLEAR T_KNA1.  REFRESH T_KNA1.
    APPEND WA_KNA1 TO T_KNA1.
    COMMIT WORK.
  ENDLOOP.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  get_spool_number
*&---------------------------------------------------------------------*
FORM GET_SPOOL_NUMBER .
  SELECT * FROM TSP01
    APPENDING CORRESPONDING FIELDS OF TABLE SPOOLID
    WHERE RQOWNER = SY-UNAME
    ORDER BY RQCRETIME DESCENDING.

  LOOP AT SPOOLID.
    SPOOL_NUM = SPOOLID-RQIDENT.
    EXIT.
  ENDLOOP.
ENDFORM.                    " get_spool_number

*&---------------------------------------------------------------------*
*&      Form  convert_to_pdf
*&---------------------------------------------------------------------*
FORM CONVERT_TO_PDF .

  I_OTF[] = WA_OUTPUT_INFO-OTFDATA[].
  CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
    EXPORTING
      SRC_SPOOLID                    = spool_num
*     NO_DIALOG                      =
*     DST_DEVICE                     =
*     PDF_DESTINATION                =
    IMPORTING
      PDF_BYTECOUNT                  = numbytes
      PDF_SPOOLID                    = pdfspoolid
*     OTF_PAGECOUNT                  =
      BTC_JOBNAME                    = jobname
      BTC_JOBCOUNT                   = jobcount
    TABLES
      PDF                            = IT_LINES
    EXCEPTIONS
      ERR_NO_OTF_SPOOLJOB            = 1
      ERR_NO_SPOOLJOB                = 2
      ERR_NO_PERMISSION              = 3
      ERR_CONV_NOT_POSSIBLE          = 4
      ERR_BAD_DSTDEVICE              = 5
      USER_CANCELLED                 = 6
      ERR_SPOOLERROR                 = 7
      ERR_TEMSEERROR                 = 8
      ERR_BTCJOB_OPEN_FAILED         = 9
      ERR_BTCJOB_SUBMIT_FAILED       = 10
      ERR_BTCJOB_CLOSE_FAILED        = 11
      OTHERS                         = 12.

  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    " SEND_TO_EMAIL

*&---------------------------------------------------------------------*
*&      Form  SEND_TO_EMAIL
*&---------------------------------------------------------------------*
FORM SEND_TO_EMAIL .

  LOOP AT IT_LINES.
    TRANSLATE IT_LINES USING '~'.
    CONCATENATE WA_BUFFER IT_LINES INTO WA_BUFFER.
  ENDLOOP.
  TRANSLATE WA_BUFFER USING '~'.

  DO.
    I_RECORD = WA_BUFFER.
    APPEND I_RECORD.
    SHIFT WA_BUFFER LEFT BY 255 PLACES.
    IF WA_BUFFER IS INITIAL.
      EXIT.
    ENDIF.
  ENDDO.

* Attachment
  REFRESH: I_RECLIST,
  I_OBJTXT,
  I_OBJBIN,
  I_OBJPACK.
  CLEAR WA_OBJHEAD.
  I_OBJBIN[] = I_RECORD[].

* Create Message Body Title and Description
  I_OBJTXT = 'Estado de cuenta para el periodo de '.
  APPEND I_OBJTXT.
  DESCRIBE TABLE I_OBJTXT LINES V_LINES_TXT.
  READ TABLE I_OBJTXT INDEX V_LINES_TXT.
  WA_DOC_CHNG-OBJ_DESCR = 'Estado de cuenta'.
  WA_DOC_CHNG-EXPIRY_DAT = SY-DATUM + 10.
  WA_DOC_CHNG-OBJ_NAME = 'Smartform'.
  WA_DOC_CHNG-SENSITIVTY = 'F'.
  WA_DOC_CHNG-DOC_SIZE = V_LINES_TXT * 255.

* Main Text
  CLEAR I_OBJPACK.
  REFRESH I_OBJPACK.
  I_OBJPACK-TRANSF_BIN = SPACE.
  I_OBJPACK-HEAD_START = 1.
  I_OBJPACK-HEAD_NUM = 0.
  I_OBJPACK-BODY_START = 1.
  I_OBJPACK-BODY_NUM = V_LINES_TXT.
  I_OBJPACK-DOC_TYPE = 'RAW'.
  APPEND I_OBJPACK.

* Attachment (pdf-Attachment)
  I_OBJPACK-TRANSF_BIN = 'X'.
  I_OBJPACK-HEAD_START = 1.
  I_OBJPACK-HEAD_NUM = 1.
  I_OBJPACK-BODY_START = 1.

  DESCRIBE TABLE I_OBJBIN LINES V_LINES_BIN.
  READ TABLE I_OBJBIN INDEX V_LINES_BIN.

  I_OBJPACK-DOC_SIZE = V_LINES_BIN * 255 .
  I_OBJPACK-BODY_NUM = V_LINES_BIN.
  I_OBJPACK-DOC_TYPE = 'PDF'.
  I_OBJPACK-OBJ_NAME = 'Smartform'.
  I_OBJPACK-OBJ_DESCR = 'Account_statement'.
  APPEND I_OBJPACK.

  CLEAR I_RECLIST.

  I_RECLIST-RECEIVER = 'orlrivera@evertecinc.com'.
  I_RECLIST-REC_TYPE = 'U'.
  I_RECLIST-EXPRESS = 'X'.
  APPEND I_RECLIST.

  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
      DOCUMENT_DATA              = WA_DOC_CHNG
      PUT_IN_OUTBOX              = 'X'
      COMMIT_WORK                = 'X'
    TABLES
      PACKING_LIST               = I_OBJPACK
      OBJECT_HEADER              = WA_OBJHEAD
      CONTENTS_BIN               = I_OBJBIN
      CONTENTS_TXT               = I_OBJTXT
      RECEIVERS                  = I_RECLIST
    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.

  IF SY-SUBRC <> 0.
    WRITE:/ 'Error When Sending the File', SY-SUBRC.
  ELSE.
    WRITE:/ 'Se adjunto el estado de cuenta'.
  ENDIF.
ENDFORM.                    " convert_to_pdf

As I said the recipient is getting the email but when opens it whit the Acrobat Reader only displays a blank page.

Any help will be appreciated.

Thanks,

Orlando