Skip to Content
0
Dec 06, 2011 at 05:30 AM

Problem in displaying smartform as pdf in mail attachment

43 Views

Hi Gurus,

I have generated a Smartform, converted to PDF and sent as attachment to email, upto this everything working fine.

Now the email is generated with the PDF attachment but Adobe Reader encounters an error when opening.

Error display as below mentioned

Adobe Reader could not open 'abc_X.PDF' because it is either not a supported file type or because the file has been damaged(for example, it was sent as an email attachment and wasn't correctly decoded).

The program cods as below mentioned

TYPES:BEGIN OF ty_viqmel,

qmnum TYPE viqmel-qmnum,

qmart TYPE viqmel-qmart,

objnr TYPE viqmel-objnr,

qmtxt TYPE viqmel-qmtxt,

erdat TYPE viqmel-erdat,

erzeit TYPE viqmel-erzeit,

aenam TYPE viqmel-aenam,

aufnr TYPE viqmel-aufnr,

qmdab TYPE viqmel-qmdab,

swerk TYPE viqmel-swerk,

END OF ty_viqmel.

TYPES: BEGIN OF ty_t001w,

werks TYPE werks,

name1 TYPE name1,

END OF ty_t001w.

DATA:IT_VIQMEL TYPE TABLE OF TY_VIQMEL,

WA_VIQMEL TYPE TY_VIQMEL,

IT_T001W TYPE TABLE OF TY_T001W,

WA_T001W TYPE TY_T001W,

IT_FINAL TYPE TABLE OF ZPM_T_MAINTENACE,

WA_FINAL TYPE ZPM_T_MAINTENACE.

data: it_diff like it_viqmel,

wa_diff like line of it_diff.

  • Smartforms data declarations

DATA: lv_fmname TYPE rs38l_fnam, "value 'ZPM_F_MAINTENANCE_REQUEST'.

w_cparam TYPE ssfctrlop ," To display smart form in arabic.

w_compop type ssfcompop,

W_bin_filesize TYPE i, " Binary File Size

w_FILE_NAME type string,

w_File_path type string,

w_FULL_PATH type string,

WA_BUFFER TYPE STRING. "To convert from 132 to 255

  • Internal table to hold the OTF data

DATA:

t_otf TYPE itcoo OCCURS 0 WITH HEADER LINE,

  • Internal table to hold OTF data recd from the SMARTFORM

t_otf_from_fm TYPE ssfcrescl,

  • Internal table to hold the data from the FM CONVERT_OTF

T_pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE.

  • Objects to send mail.

data:I_OBJPACK LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,

I_OBJTXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,

I_OBJBIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,

I_RECLIST LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE,

I_RECORD LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,

WA_OBJHEAD TYPE SOLI_TAB,

WA_DOC_CHNG TYPE SODOCCHGI1.

DATA: V_LEN_IN LIKE SOOD-OBJLEN,

I_TLINE TYPE TABLE OF TLINE WITH HEADER LINE,

V_LEN_OUT LIKE SOOD-OBJLEN,

V_LEN_OUTN TYPE I,

V_LINES_TXT TYPE I,

V_LINES_BIN TYPE I.

START-OF-SELECTION.

SELECT QMNUM

QMART

QMTXT

ERDAT

ERZEIT

AENAM

AUFNR

QMDAB

SWERK

OBJNR

FROM VIQMEL

INTO CORRESPONDING FIELDS OF TABLE IT_VIQMEL

WHERE aufnr = SPACE

and qmdab = '00000000'

AND ( QMART EQ 'M1' OR QMART EQ 'M2' OR QMART EQ 'M3' ).

IF SY-SUBRC = 0.

sort it_viqmel by qmnum.

ENDIF.

loop at it_viqmel into wa_viqmel.

perform 72hours.

endloop.

SELECT WERKS

NAME1 FROM T001W INTO TABLE IT_T001W

FOR ALL ENTRIES IN IT_diff

WHERE WERKS = IT_diff-SWERK.

IF SY-SUBRC = 0.

LOOP AT IT_diff INTO WA_diff.

READ TABLE IT_T001W INTO WA_T001W WITH KEY WERKS = WA_diff-SWERK.

IF SY-SUBRC = 0.

WA_FINAL-QMNUM = WA_diff-QMNUM.

WA_FINAL-QMTXT = WA_diff-QMTXT.

WA_FINAL-ERDAT = WA_diff-ERDAT.

WA_FINAL-ERZEIT = WA_diff-ERZEIT.

WA_FINAL-SWERK = WA_diff-SWERK.

WA_FINAL-NAME1 = WA_T001W-NAME1.

WA_FINAL-AENAM = WA_diff-AENAM.

APPEND WA_FINAL TO IT_FINAL.

CLEAR WA_FINAL.

ENDIF.

ENDLOOP.

ENDIF.

clear:w_cparam,w_compop.

w_cparam-langu = 'AR'.

w_cparam-getotf = 'X'.

w_cparam-no_dialog = 'X'. " Suppressing the dialog box

W_COMPOP-TDNOPREV = 'X'.

w_compop-tddest = 'LP01'.

W_COMPOP-TDPRINTER = 'PRINTER'.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

EXPORTING

formname = 'ZPM_F_MAINTENANCE_REQUEST'

  • VARIANT = ' '

  • DIRECT_CALL = ' '

IMPORTING

FM_NAME = lv_fMNAME

EXCEPTIONS

NO_FORM = 1

NO_FUNCTION_MODULE = 2

OTHERS = 3

.

IF sy-subrc <> 0.

  • Implement suitable error handling here

ENDIF.

CALL FUNCTION lv_fmname

EXPORTING

  • ARCHIVE_INDEX =

  • ARCHIVE_INDEX_TAB =

  • ARCHIVE_PARAMETERS =

CONTROL_PARAMETERS = w_cparam

  • MAIL_APPL_OBJ =

  • MAIL_RECIPIENT =

  • MAIL_SENDER =

OUTPUT_OPTIONS = w_compop

  • USER_SETTINGS = 'X'

IMPORTING

  • DOCUMENT_OUTPUT_INFO =

JOB_OUTPUT_INFO = t_otf_from_fm

  • JOB_OUTPUT_OPTIONS =

TABLES

it_final = it_final

EXCEPTIONS

FORMATTING_ERROR = 1

INTERNAL_ERROR = 2

SEND_ERROR = 3

USER_CANCELED = 4

OTHERS = 5

.

IF sy-subrc <> 0.

  • Implement suitable error handling here

ENDIF.

t_otf[] = t_otf_from_fm-otfdata[].

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

FORMAT = 'PDF'

MAX_LINEWIDTH = 132

  • ARCHIVE_INDEX = ' '

  • COPYNUMBER = 0

  • ASCII_BIDI_VIS2LOG = ' '

  • PDF_DELETE_OTFTAB = ' '

  • PDF_USERNAME = ' '

IMPORTING

BIN_FILESIZE = w_bin_FILESIZE

  • BIN_FILE =

TABLES

otf = T_OTF

lines = T_PDF_TAB

EXCEPTIONS

ERR_MAX_LINEWIDTH = 1

ERR_FORMAT = 2

ERR_CONV_NOT_POSSIBLE = 3

ERR_BAD_OTF = 4

OTHERS = 5

.

IF sy-subrc <> 0.

  • Implement suitable error handling here

ENDIF.

LOOP AT T_PDF_TAB.

TRANSLATE T_PDF_TAB USING '~'.

CONCATENATE WA_BUFFER T_PDF_TAB 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 = 'Maintenance Request'.

APPEND I_OBJTXT.

DESCRIBE TABLE I_OBJTXT LINES V_LINES_TXT.

READ TABLE I_OBJTXT INDEX V_LINES_TXT.

WA_DOC_CHNG-OBJ_NAME = 'ZPM_F_MAINTENANCE_REQUEST'.

*WA_DOC_CHNG-EXPIRY_DAT = SY-DATUM + 10.

WA_DOC_CHNG-OBJ_DESCR = 'Maintenance Request'.

WA_DOC_CHNG-SENSITIVTY = 'F'.

WA_DOC_CHNG-DOC_SIZE = V_LINES_TXT * 255.

  • Main Text

CLEAR I_OBJPACK-TRANSF_BIN.

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 = 0.

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 = 'ZPM_F_MAINTENANCE_REQUEST'.

I_OBJPACK-OBJ_DESCR = 'Maintenance Request'.

APPEND I_OBJPACK.

CLEAR I_RECLIST.

I_RECLIST-RECEIVER = 'abc@.com'.

I_RECLIST-REC_TYPE = 'U'.

APPEND I_RECLIST.

ENDLOOP.

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'

EXPORTING

document_data = WA_DOC_CHNG

PUT_IN_OUTBOX = 'X'

  • SENDER_ADDRESS = SY-UNAME

  • SENDER_ADDRESS_TYPE = 'B'

COMMIT_WORK = 'X'

  • IMPORTING

  • SENT_TO_ALL = w_sent_all

  • NEW_OBJECT_ID =

  • SENDER_ID =

tables

packing_list = I_OBJPACK

OBJECT_HEADER = WA_OBJHEAD

CONTENTS_BIN = I_OBJBIN

CONTENTS_TXT = I_OBJTXT

  • CONTENTS_HEX =

  • OBJECT_PARA =

  • OBJECT_PARB =

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:/ 'Mail sent'.

ENDIF.

ENDIF.

ENDIF.

Please let me know what could be the problem.

Thanks in advance.

vs.sarvan.