03-05-2008 6:52 AM
Hi all,
i have an requirement of converting script output i.e., otf to pdf converting and i want send that account statement to the mail id which is maintatined in XD03 t.code,based on different customers differnt account statement should post ,
please suggest me ASAP.
03-05-2008 8:34 AM
Hello,
Check the documentation for the func module SO_NEW_DOCUMENT_ATT_SEND_API1
Ull find the sample code for attaching and sending thru mail.
Neeraj
03-05-2008 8:34 AM
Hello,
Check the documentation for the func module SO_NEW_DOCUMENT_ATT_SEND_API1
Ull find the sample code for attaching and sending thru mail.
Neeraj
03-05-2008 8:59 AM
use the function module
CONVERT to pdf
SX_OBJECT_CONVERT_OTF_PDF
- Email the PDF data using
SO_NEW_DOCUMENT_ATT_SEND_API1
examples
Option 1.
- converting OTF data returned from CLOSE_FORM (requested in OPEN_FORM) to PDF format using SX_OBJECT_CONVERT_OTF_PDF
- Email the PDF data using SO_NEW_DOCUMENT_ATT_SEND_API1
Result
>> Everything works fine except that the output cannot be sent to spool and previewed (due the request of OTF table in OPEN_FORM)
>> The PDF attachment can be downloaded and view directly.
Option 2.
- converting spool to PDF format using CONVERT_OTFSPOOLJOB_2_PDF
- Email the PDF data using
SO_NEW_DOCUMENT_ATT_SEND_API1
Result
>> The output can be previewed and sent to spool. No error returned from sending mail.
>> However, the attachment of PDF file cannot be downloaded (from SBWP Business Workspace). An error message "Database error for <GET DATA FROM KPRO>" was displayed when I try to download the PDF file
You can try something like this
IF SY-UCOMM = 'VIEW'.
CLEAR ITCPO-TDGETOTF.
ENDIF.
***OPEN_FORM
*etc
***CLOSE_FORM
IF NOT SY-UCOMM = 'VIEW'.
**SEND MAIL
ENDIF.
example code
REPORT ZSENDPDF NO STANDARD PAGE HEADING.
TABLES: TST05,
TSP01,
NAST,
T685B,
USR01.
DATA: BEGIN OF TAB_PDF OCCURS 0,
TLINE(255).
DATA : END OF TAB_PDF.
DATA: BEGIN OF TAB_OTF OCCURS 0,
TLINE(255).
DATA : END OF TAB_OTF.
DATA: BEGIN OF TAB_DATA_SET OCCURS 0,
DATA_LENGTH(5),
PRECOL(1),
DATA_LINE(1000).
DATA : END OF TAB_DATA_SET.
DATA: BEGIN OF TAB_OTF_PAGE OCCURS 0.
INCLUDE STRUCTURE ITCOO.
DATA: END OF TAB_OTF_PAGE.
DATA : BEGIN OF TAB_OTF_PAGE_INDEX OCCURS 0,
LINE_NUM TYPE P.
DATA : END OF TAB_OTF_PAGE_INDEX.
DATA: BEGIN OF TAB_DATA_SET_LINE,
DATA_LENGTH(5),
PRECOL(1),
DATA_LINE(1000).
DATA : END OF TAB_DATA_SET_LINE.
DATA : BEGIN OF TAB_TSP01 OCCURS 0,
RQIDENT LIKE TSP01-RQIDENT,
RQCOPIES LIKE TSP01-RQCOPIES.
DATA : END OF TAB_TSP01.
DATA :
LEN_OUT LIKE SOOD-OBJLEN,
LEN_IN LIKE SOOD-OBJLEN,
OTF_PAGES TYPE P,
*otf_max_pages type p value 100,
OTF_MAX_PAGES TYPE P VALUE 1000,
DATA_SET_LINECOUNT TYPE P,
*data_set_max_lines type p value 1000000,
DATA_SET_MAX_LINES TYPE P VALUE 100000,
DATA_SET_IS_OTF TYPE C VALUE ' ',
DATA_SET_LENGTH(5) TYPE C,
DSN_TYPE( TYPE C,
RC(10) TYPE C,
ERRMSG(100) TYPE C,
LINE_MAX TYPE P VALUE '100000',
STATUS LIKE SY-SUBRC,
H_PATH(20) TYPE C,
H_MASK(20) TYPE C VALUE ',.pdf ,.pdf. ',
FILE_NAME(20),
FILENAME LIKE RLGRAP-FILENAME,
C_PAGE_BREAK TYPE I,
K_PAGE_BREAK TYPE I.
PARAMETER : P_RQID(5) TYPE C.
START-OF-SELECTION.
END-OF-SELECTION.
PERFORM GET_TAB_OTF.
CLEAR K_PAGE_BREAK.
LOOP AT TAB_OTF_PAGE WHERE TDPRINTCOM = 'EP'.
ADD 1 TO K_PAGE_BREAK.
ENDLOOP.
CLEAR C_PAGE_BREAK.
LOOP AT TAB_OTF_PAGE.
IF TAB_OTF_PAGE-TDPRINTCOM EQ 'EP'.
ADD 1 TO C_PAGE_BREAK.
IF C_PAGE_BREAK GE 3 AND C_PAGE_BREAK LT K_PAGE_BREAK.
TAB_OTF-TLINE = 'EP'.
APPEND TAB_OTF.
ENDIF.
ENDIF.
TAB_OTF-TLINE = TAB_OTF_PAGE.
APPEND TAB_OTF.
ENDLOOP.
CALL FUNCTION 'SX_OBJECT_CONVERT_OTF_PDF'
EXPORTING
FORMAT_SRC = 'OTF'
FORMAT_DST = 'PDF'
DEVTYPE = 'ASCIIPRI'
LEN_IN = LEN_IN
IMPORTING
LEN_OUT = LEN_OUT
TABLES
CONTENT_IN = TAB_OTF
CONTENT_OUT = TAB_PDF
EXCEPTIONS
ERR_CONV_FAILED = 1
OTHERS = 2.
PERFORM GET_PATH USING 'PDF_FILE'.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = FILENAME
FILETYPE = 'BIN'
BIN_FILESIZE = LEN_OUT
TABLES
DATA_TAB = TAB_PDF
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
OTHERS = 8.
&----
*& Form GET_tab_otf
&----
FORM GET_TAB_OTF.
DATA: PART(4) VALUE '0001',
BEGIN OF MSG,
A(40),
B(40),
C(40),
END OF MSG.
REFRESH TAB_DATA_SET.
DATA_SET_LINECOUNT = 0.
DATA_SET_IS_OTF = ' '.
OTF_PAGES = 0.
REFRESH TAB_OTF_PAGE_INDEX.
CALL 'RSPOACSD'.
SELECT * FROM TST05 WHERE DTHREAD = 'X'.
CALL 'RSPOAOSD'
ID 'ID' FIELD P_RQID
ID 'TYPE' FIELD TST05-DTYPE
ID 'RECTYP' FIELD 'VYL----'
ID 'RC' FIELD RC
ID 'ERRMSG' FIELD ERRMSG.
STATUS = SY-SUBRC.
IF STATUS = 0.
DSN_TYPE = TST05-DTYPE.
IF DSN_TYPE(3) = 'OTF'.
DATA_SET_IS_OTF = 'X'.
ENDIF.
ENDIF.
IF STATUS <> 24. EXIT. ENDIF.
ENDSELECT.
DATA_SET_MAX_LINES = ( LINE_MAX * '1.1' ) + 100.
DO.
CLEAR: TAB_DATA_SET_LINE, DATA_SET_LENGTH.
CALL 'RSPOARSD'
ID 'BUFF' FIELD TAB_DATA_SET_LINE+5
ID 'DATALEN' FIELD DATA_SET_LENGTH
ID 'RC' FIELD RC
ID 'ERRMSG' FIELD ERRMSG.
STATUS = SY-SUBRC.
IF STATUS = 36.
WHILE STATUS = 36.
CALL 'RSPOACSD'
ID 'RC' FIELD RC
ID 'ERRMSG' FIELD ERRMSG.
ADD 1 TO PART.
IF DATA_SET_IS_OTF = ' '.
CALL 'RSPOAOSD'
ID 'ID' FIELD P_RQID
ID 'TYPE' FIELD DSN_TYPE
ID 'PART' FIELD PART
ID 'RECTYP' FIELD 'VYL----'
ID 'RC' FIELD RC
ID 'ERRMSG' FIELD ERRMSG.
ELSE.
CALL 'RSPOAOSD'
ID 'ID' FIELD P_RQID
ID 'PART' FIELD PART
ID 'TYPE' FIELD DSN_TYPE
ID 'RECTYP' FIELD 'VYL----'
ID 'RC' FIELD RC
ID 'ERRMSG' FIELD ERRMSG.
ENDIF.
IF SY-SUBRC NE 0. EXIT. ENDIF.
CLEAR: TAB_DATA_SET_LINE, DATA_SET_LENGTH.
CALL 'RSPOARSD'
ID 'BUFF' FIELD TAB_DATA_SET_LINE+5
ID 'DATALEN' FIELD DATA_SET_LENGTH
ID 'RC' FIELD RC
ID 'ERRMSG' FIELD ERRMSG.
STATUS = SY-SUBRC.
ENDWHILE.
ENDIF.
IF STATUS <> 0 AND STATUS <> 40. EXIT. ENDIF.
TAB_DATA_SET = TAB_DATA_SET_LINE.
IF NOT ( DATA_SET_LENGTH IS INITIAL ).
TAB_DATA_SET-DATA_LENGTH = DATA_SET_LENGTH - 1.
ENDIF.
APPEND TAB_DATA_SET.
ADD 1 TO DATA_SET_LINECOUNT.
IF DATA_SET_IS_OTF = ' '.
IF DATA_SET_LINECOUNT >= DATA_SET_MAX_LINES.
CLEAR TAB_DATA_SET.
APPEND TAB_DATA_SET.
MOVE '----
' TO TAB_DATA_SET-DATA_LINE.
APPEND TAB_DATA_SET.
CLEAR TAB_DATA_SET.
APPEND TAB_DATA_SET.
WRITE: 'Abbruch nach'(029) TO MSG-A.
WRITE: DATA_SET_MAX_LINES TO MSG-B.
WRITE: 'Zeilen.'(030) TO MSG-C.
CONDENSE MSG.
TAB_DATA_SET-DATA_LINE = MSG.
APPEND TAB_DATA_SET.
EXIT.
ENDIF.
ELSE.
MOVE TAB_DATA_SET_LINE-DATA_LINE TO TAB_OTF_PAGE.
APPEND TAB_OTF_PAGE.
IF TAB_OTF_PAGE(2) = 'EP'.
ADD 1 TO OTF_PAGES.
IF OTF_PAGES >= OTF_MAX_PAGES.
MESSAGE S229(PO) WITH OTF_MAX_PAGES.
EXIT.
ENDIF.
ELSEIF TAB_OTF_PAGE(2) = 'OP'.
TAB_OTF_PAGE_INDEX-LINE_NUM = DATA_SET_LINECOUNT.
APPEND TAB_OTF_PAGE_INDEX.
ENDIF.
ENDIF.
ENDDO.
IF STATUS <> 0 AND STATUS <> 12.
CALL 'RSPOACSD'.
MESSAGE E112(PO) WITH STATUS RC ERRMSG.
ENDIF.
CALL 'RSPOACSD'.
STATUS = SY-SUBRC.
IF STATUS <> 0.
MESSAGE E112(PO) WITH STATUS RC ERRMSG.
ENDIF.
ENDFORM.
&----
*& Form GET_PATH
&----
FORM GET_PATH USING P_FILENAME.
CLEAR: H_PATH, FILE_NAME.
FILE_NAME = P_FILENAME.
CALL FUNCTION 'WS_QUERY'
EXPORTING
QUERY = 'CD' "// Current Directory
IMPORTING
RETURN = H_PATH.
CONCATENATE FILE_NAME '.pdf' INTO FILE_NAME.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = FILE_NAME
DEF_PATH = H_PATH
MASK = H_MASK
MODE = 'O'
IMPORTING
FILENAME = FILENAME"dbname
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
ENDFORM. " GET_PATH
<REMOVED BY MODERATOR>
Edited by: Alvaro Tejada Galindo on Mar 5, 2008 9:50 AM
03-07-2008 6:26 AM
dear sharad,
can you please tell me what is the reason for geting the error like "data base error" unable to read from kpro" even i am getting the same error
03-05-2008 2:44 PM
03-07-2008 6:29 AM
dear sharad,
can you please tell me why is that data base error occurs?like unable to pick up from the database,unable to read from KPRO.because even i am facing this problem
03-12-2008 10:58 AM