on 09-12-2007 8:08 AM
Dear all,
I am getting my pay slip in PDF file, if I download it to my Desktop, but when I am sending it as mail , PDF is sent , but at recievers end, that PDF content is not getting displayed, it is giving eror that data is not decoded properly,
I have changed the lenght for the file to 255 characters then also I am getting the same error.
Can Anyone please help me .
Thanks in Advance,
Regards,
Satya.
REPORT zpdf.
DATA: form_name TYPE rs38l_fnam.
DATA: wa_ctrlop TYPE ssfctrlop,
wa_outopt TYPE ssfcompop.
DATA: t_otfdata TYPE ssfcrescl,
t_pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE.
DATA: t_otf TYPE itcoo OCCURS 0 WITH HEADER LINE.
DATA: w_filesize TYPE i.
DATA: w_bin_filesize TYPE i.
DATA: fname1 TYPE string.
data : binfilesize type I,
file_name type string,
FILE_PATH TYPE STRING,
FULL_PATH TYPE STRING.
*SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME.
*PARAMETERS :p_name TYPE rs38l_fnam DEFAULT 'zpdf_g', "form name
p_fpath LIKE rlgrap-filename. "file path
*SELECTION-SCREEN: END OF BLOCK b1.
*
*PARAMETER: p_date LIKE sy-datum.
*PARAMETER: p_rea TYPE char255.
*
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fpath.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
FIELD_NAME = ' '
IMPORTING
file_name = p_fpath.
START-OF-SELECTION.
MOVE p_fpath TO fname1.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZPDF_G' "p_name
IMPORTING
fm_name = form_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
wa_ctrlop-getotf = 'X'.
wa_ctrlop-no_dialog = 'X'.
wa_outopt-tdnoprev = 'X'.
CALL FUNCTION form_name
EXPORTING
control_parameters = wa_ctrlop
output_options = wa_outopt
user_settings = 'X'
mydate = '20070608'
reason = 'asdf'
IMPORTING
job_output_info = t_otfdata
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'ZFM_OTC_PDF'
EXPORTING
v_fpath = fname1
w_otfdata = t_otfdata.
END-OF-SELECTION.
t_otf[] = t_otfdata-otfdata[].
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
max_linewidth = 132
ARCHIVE_INDEX = ' '
IMPORTING
bin_filesize = w_bin_filesize
TABLES
otf = t_otf
lines = t_pdf_tab
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
OTHERS = 4
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
----
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
WINDOW_TITLE =
DEFAULT_EXTENSION =
DEFAULT_FILE_NAME =
FILE_FILTER =
INITIAL_DIRECTORY =
WITH_ENCODING =
PROMPT_ON_OVERWRITE = 'X'
changing
filename = FILE_NAME
path = FILE_PATH
fullpath = FULL_PATH
USER_ACTION =
FILE_ENCODING =
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
others = 4
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
BIN_FILESIZE = w_bin_filesize
FILENAME = FULL_PATH "fname1
FILETYPE = 'BIN'
IMPORTING
FILELENGTH = w_filesize
TABLES
DATA_TAB = t_pdf_tab
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22
.
IF sy-subrc <> 0.
MESSAGE i000(zpdf).
ELSE.
MESSAGE i001(zpdf).
ENDIF.
Rewards if useful..............
Minal
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Are you using smart form or sapscript.
The below links may be of help:
https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/emailfromSAP&
https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/smartformtoMailasPDF+attachment&
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Anish How r u ? this is Satya
I am not using Script or Smart form, I am printing PAyslip like I have downloaded Payslip into an Internal table and got ABAP Spool for that, then I converted it as PDF File it is getting downloaded, After that I am using SO_NEW_DOCUMENT_ATT_SEND_API1 FM to send that Internal table as mail through PDF conversion.
There Also I am able to get the mail with PDF Attachment , but when opening that PDF I am facing this problem.
Thanks & Regards,
Satya.
The problem might be in the Packing list <b>MAILPACK</b> and <b>MAILBIN</b> internal table
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = MAILDATA
PUT_IN_OUTBOX = ' '
TABLES
PACKING_LIST = <b>MAILPACK</b>
OBJECT_HEADER = MAILHEAD
CONTENTS_BIN = <b>MAILBIN</b>
CONTENTS_TXT = MAILTXT
RECEIVERS = MAILREC
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
OPERATION_NO_AUTHORIZATION = 4
OTHERS = 99.
A sample perform to fill this is :
FORM PREPARE_PACKING_LIST.
CLEAR: MAILPACK, MAILBIN, MAILHEAD.
REFRESH: MAILPACK, MAILBIN, MAILHEAD.
DESCRIBE TABLE MAILTXT LINES TAB_LINES.
READ TABLE MAILTXT INDEX TAB_LINES.
MAILDATA-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( MAILTXT ).
Creation of the entry for the compressed document
CLEAR MAILPACK-TRANSF_BIN.
MAILPACK-HEAD_START = 1.
MAILPACK-HEAD_NUM = 0.
MAILPACK-BODY_START = 1.
MAILPACK-BODY_NUM = TAB_LINES.
MAILPACK-DOC_TYPE = 'RAW'.
APPEND MAILPACK.
LOOP AT SOLISTI1.
MOVE-CORRESPONDING SOLISTI1 TO MAILBIN.
APPEND MAILBIN.
ENDLOOP.
DESCRIBE TABLE MAILBIN LINES TAB_LINES.
MAILHEAD = 'ZFILE.PDF'.
APPEND MAILHEAD.
Creation of the entry for the compressed attachment
MAILPACK-TRANSF_BIN = 'X'.
MAILPACK-HEAD_START = 1.
MAILPACK-HEAD_NUM = 1.
MAILPACK-BODY_START = 1.
MAILPACK-BODY_NUM = TAB_LINES.
MAILPACK-DOC_TYPE = '<b>OTF</b>'. " Also check out this
MAILPACK-OBJ_NAME = 'ZFILE'.
Mail Subject
MAILPACK-OBJ_DESCR = ' Content'.
MAILPACK-DOC_SIZE = TAB_LINES * 255.
APPEND MAILPACK.
ENDFORM. " PREPARE_PACKING_LIST
Message was edited by:
Anish Thomas
Tried in the given way also
But ending up with Same Error ,
Please guide me.
This is the Code I have done.
init
CLEAR: P_FORM, P_INFO, PAYSLIP, FUNAME.
REFRESH: P_FORM, PAYSLIP.
determine name of function module
depending on CE or non CE
CALL FUNCTION 'HRO1_GET_FUNAME'
EXPORTING
pernr = PERNR-PERNR
IMPORTING
FUNAME = funame.
get raw version of payslip
CALL FUNCTION funame
EXPORTING
EMPLOYEE_NUMBER = PERNR-PERNR
SEQUENCE_NUMBER = SEQNR
PAYSLIP_VARIANT = 'AMP3'
IMPORTING
P_INFO = P_INFO
RETURN = RETURN
TABLES
P_FORM = P_FORM.
any errors occured
CHECK RETURN IS INITIAL.
DESCRIBE TABLE P_FORM LINES LINES.
IF LINES LE 0.
PERFORM FILL_RETURN USING 'I' '3G' 824 RETURN.
ERROR MESSAGE.
EXIT.
ENDIF.
CALL FUNCTION 'CONVERT_PAYSLIP_TO_SAPSCRIPT'
EXPORTING
P_INFO = p_info
TABLES
payslip = payslip
p_form = p_form
EXCEPTIONS
EMPTY_FORM = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*************************************
**************************************
Get print parameters from user defaults and form definition
CONSTANTS:
dataset TYPE pri_params-prdsn VALUE 'ESSEDT'.
DATA:
edtname TYPE syrepid,
listname TYPE pri_params-plist,
pri_params TYPE pri_params,
rc TYPE sysubrc,
valid TYPE xfeld.
CONCATENATE dataset sy-uzeit INTO listname.
PERFORM xedt_get_repna IN PROGRAM rpcljnx0
USING '40' edtname rc.
IF rc <> 0.
edtname = 'RPCEDTX0'.
ENDIF.
CALL FUNCTION 'HR_PL_DETERMINE_PRI_PARAMS'
EXPORTING
imp_linesize = p_info-pcols
imp_linecount = p_info-psize
imp_repid = edtname
IMPORTING
exp_new_params = pri_params.
CALL FUNCTION 'GET_PRINT_PARAMETERS'
EXPORTING
data_set = dataset " dataset name
expiration = '1' " one day in spool
immediately = space " no immediate print
in_parameters = pri_params " defaults
list_name = listname " listname
new_list_id = 'X' " new spool id
no_dialog = 'X' " no print popup
IMPORTING
out_parameters = pri_params
valid = valid
EXCEPTIONS
OTHERS = 4.
CHECK sy-subrc EQ 0
AND valid NE space.
Submit EDT to spool
EXPORT p_p_form FROM p_form TO MEMORY ID '%%_P_FORM_%%'.
EXPORT p_info FROM p_info TO MEMORY ID '%%_P_INFO_%%'.
SUBMIT rpcedt_list_to_memory
TO SAP-SPOOL
SPOOL PARAMETERS pri_params
WITHOUT SPOOL DYNPRO
AND RETURN.
Get Spool ID
DATA:
spool_ids TYPE STANDARD TABLE OF rsporq,
spoolname TYPE rspotype-rq0name,
spooldsn TYPE rspotype-rq2name,
spoolid TYPE tsp01-rqident.
FIELD-SYMBOLS: <spool> LIKE LINE OF spool_ids.
spooldsn = listname.
spoolname = dataset.
CALL FUNCTION 'RSPO_FIND_SPOOL_REQUESTS'
EXPORTING
rq0name = spoolname
rq2name = spooldsn
TABLES
spoolrequests = spool_ids
EXCEPTIONS
OTHERS = 0.
READ TABLE spool_ids ASSIGNING <spool> INDEX 1.
CHECK sy-subrc EQ 0.
spoolid = <spool>-rqident.
Convert to PDF
DATA:
pdf_table TYPE rcl_bag_tline,
pdf_fsize type i value '132'.
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = spoolid
no_dialog = 'X'
IMPORTING
pdf_bytecount = pdf_fsize
TABLES
pdf = pdf_table
EXCEPTIONS
OTHERS = 0.
Map PDF table into 'flat' table acording to Unicode flag
Data:
wa_pdfline like line of pdf_table,
pdf_xstring type xstring.
Field-symbols:
<l_xline> type x.
loop at pdf_table into wa_pdfline.
assign wa_pdfline to <l_xline> casting.
concatenate pdf_xstring <l_xline> into pdf_xstring in byte mode.
endloop.
Upto here Got Payslip.
Using this I am doing the below code for Mailing purpose.
DATA: I_OTF TYPE ITCOO OCCURS 0 WITH HEADER LINE,
I_TLINE TYPE TABLE OF TLINE WITH HEADER LINE,
I_RECEIVERS TYPE TABLE OF SOMLRECI1 WITH HEADER LINE,
I_RECORD LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
Objects to send mail.
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,
Work Area declarations
WA_OBJHEAD TYPE SOLI_TAB,
W_CTRLOP TYPE SSFCTRLOP,
wa_reclist LIKE LINE OF i_reclist,
W_COMPOP TYPE SSFCOMPOP,
W_RETURN TYPE SSFCRESCL,
WA_DOC_CHNG TYPE SODOCCHGI1,
W_DATA TYPE SODOCCHGI1,
WA_BUFFER TYPE STRING, "To convert from 132 to 255
Variables declarations
V_FORM_NAME TYPE RS38L_FNAM,
V_LEN_IN LIKE SOOD-OBJLEN,
V_LEN_OUT LIKE SOOD-OBJLEN,
V_LEN_OUTN TYPE I,
V_LINES_TXT TYPE I,
V_LINES_BIN TYPE I,
wa_0105 TYPE p0105.
Attachment
REFRESH: I_RECLIST,
I_OBJTXT,
I_OBJBIN,
I_OBJPACK.
CLEAR WA_OBJHEAD.
I_OBJBIN[] = P_FORM[].
Create Message Body Title and Description
I_OBJTXT = 'test with pdf-Attachment!'.
APPEND I_OBJTXT.
DESCRIBE TABLE I_OBJTXT LINES V_LINES_TXT.
READ TABLE I_OBJTXT INDEX V_LINES_TXT.
WA_DOC_CHNG-OBJ_NAME = 'smartform'.
WA_DOC_CHNG-EXPIRY_DAT = SY-DATUM + 10.
WA_DOC_CHNG-OBJ_DESCR = 'smartform'.
WA_DOC_CHNG-SENSITIVTY = 'F'.
WA_DOC_CHNG-DOC_SIZE = ( v_lines_txt - 1 ) * 255 + strlen( i_objtxt ).
.
wa_objHEAD = 'ZFILE.PDF'.
APPEND wa_objHEAD.
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-TRANSF_BIN = 'X'.
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-BODY_START = 1.
I_OBJPACK-DOC_SIZE = v_lines_bin * 255 .
I_OBJPACK-BODY_NUM = V_LINES_BIN.
I_OBJPACK-TRANSF_BIN = 'X'.
I_OBJPACK-DOC_TYPE = 'OTF'.
I_OBJPACK-OBJ_NAME = 'smart'.
I_OBJPACK-OBJ_DESCR = 'test'.
APPEND I_OBJPACK.
REFRESH i_reclist.
CLEAR wa_0105.
READ TABLE p0105 INTO wa_0105 WITH KEY usrty = '0010'
endda = '99991231'.
IF sy-subrc = 0.
ENDIF.
Email id 1 (Outlook)
CLEAR wa_reclist-receiver.
wa_reclist-rec_type = 'U'.
wa_reclist-express = 'X'.
wa_reclist-receiver = wa_0105-usrid_long.
APPEND wa_reclist TO 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:/ 'Mail sent'.
ENDIF.
I am getting the message Mail sent and all ,
But Unable to open that PDF file.
Regards,
Satya.
Regards,
Satya.
User | Count |
---|---|
86 | |
10 | |
10 | |
9 | |
6 | |
6 | |
6 | |
5 | |
4 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.