Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

SAP Script

Former Member
0 Likes
688

Hi all,

I want to convert SAP Script output into pdf format to send it thro e-mail.

How to do it?

ravi,

5 REPLIES 5
Read only

Former Member
0 Likes
596

check sample program RSTXPDF4/5.

regards

Prabhu

Read only

Former Member
0 Likes
596

You just need to enter the SPOOL request number from tcode SP01 and execute RSTXPDFT4 program from SE38.

Read only

Former Member
0 Likes
596

Hi

After calling the fm CLOSE_FORM pick up the OTF data of your sapscript and convert it to pdf:

CALL FUNCTION 'CLOSE_FORM'

TABLES

otfdata = t_otfdata

CALL FUNCTION 'CONVERT_OTF_2_PDF'

IMPORTING

bin_filesize = filesize

TABLES

otf = job_output_info-otfdata

doctab_archive = doctab_archive

lines = t_pdf

EXCEPTIONS

err_conv_not_possible = 1

err_otf_mc_noendmarker = 2

OTHERS = 3.

Here you have your pdf, now you can send it.

You can use SO_NEW_DOCUMENT_ATT_SEND_API1 to send mail by SCOT:

docdata-obj_name = <NAME>.

docdata-obj_descr = 'Test including PDF Attachment'.

  • Main Text

objtxt = 'Test Document.'.

append objtxt.

objtxt = 'You will find an PDFL attachment in this message.'.

append objtxt.

objtxt = 'Have a nice day.'.

append objtxt.

  • Write Packing List (Main)

describe table objtxt lines tab_lines.

read table objtxt index tab_lines.

docdata-doc_size = ( tab_lines - 1 ) * 255 + strlen( objtxt ).

clear 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.

  • Create Message Attachment

  • Write Packing List (Attachment)

att_type = 'PDF'.

describe table objbin lines tab_lines.

read table objbin index tab_lines.

objpack-doc_size = ( tab_lines - 1 ) * 255 + strlen( objbin ).

objpack-transf_bin = 'X'.

objpack-head_start = 1.

objpack-head_num = 0.

objpack-body_start = 1.

objpack-body_num = tab_lines.

objpack-doc_type = att_type.

objpack-obj_name = 'ATTACHMENT'.

objpack-obj_descr = 'Attached Document'.

append objpack.

  • Create receiver list

reclist-receiver = <address mail>.

reclist-rec_type = 'U'.

append reclist.

reclist-receiver = sy-uname.

reclist-rec_type = 'B'.

append reclist.

  • Send Message

call function 'SO_NEW_DOCUMENT_ATT_SEND_API1'

exporting

document_data = docdata

put_in_outbox = 'X'

commit_work = 'X' "used from rel. 6.10

tables

packing_list = objpack

object_header = objhead

contents_bin = t_pdf

contents_txt = objtxt

receivers = reclist

........

Max

Read only

Former Member
0 Likes
596

Hai Ravi

Go through the following Code

REPORT ZRICH_0003.

DATA: ITCPO LIKE ITCPO,

TAB_LINES LIKE SY-TABIX.

  • Variables for EMAIL functionality

DATA: MAILDATA LIKE SODOCCHGI1.

DATA: MAILPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.

DATA: MAILHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.

DATA: MAILBIN LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.

DATA: MAILTXT LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.

DATA: MAILREC LIKE SOMLREC90 OCCURS 0 WITH HEADER LINE.

DATA: SOLISTI1 LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE.

PERFORM SEND_FORM_VIA_EMAIL.

************************************************************************

  • FORM SEND_FORM_VIA_EMAIL *

************************************************************************

FORM SEND_FORM_VIA_EMAIL.

CLEAR: MAILDATA, MAILTXT, MAILBIN, MAILPACK, MAILHEAD, MAILREC.

REFRESH: MAILTXT, MAILBIN, MAILPACK, MAILHEAD, MAILREC.

  • Creation of the document to be sent File Name

MAILDATA-OBJ_NAME = 'TEST'.

  • Mail Subject

MAILDATA-OBJ_DESCR = 'Subject'.

  • Mail Contents

MAILTXT-LINE = 'Here is your file'.

APPEND MAILTXT.

  • Prepare Packing List

PERFORM PREPARE_PACKING_LIST.

  • Set recipient - email address here!!!

MAILREC-RECEIVER = 'itsme@whatever.com'.

MAILREC-REC_TYPE = 'U'.

APPEND MAILREC.

  • Sending the document

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

DOCUMENT_DATA = MAILDATA

PUT_IN_OUTBOX = ' '

TABLES

PACKING_LIST = MAILPACK

OBJECT_HEADER = MAILHEAD

CONTENTS_BIN = MAILBIN

CONTENTS_TXT = MAILTXT

RECEIVERS = MAILREC

EXCEPTIONS

TOO_MANY_RECEIVERS = 1

DOCUMENT_NOT_SENT = 2

OPERATION_NO_AUTHORIZATION = 4

OTHERS = 99.

ENDFORM.

************************************************************************

  • Form PREPARE_PACKING_LIST

************************************************************************

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.

  • Creation of the document attachment

  • This form gets the OTF code from the SAPscript form.

  • If you already have your OTF code, I believe that you may

  • be able to skip this form. just do the following code, looping thru

  • your SOLISTI1 and updating MAILBIN.

PERFORM GET_OTF_CODE.

LOOP AT SOLISTI1.

MOVE-CORRESPONDING SOLISTI1 TO MAILBIN.

APPEND MAILBIN.

ENDLOOP.

DESCRIBE TABLE MAILBIN LINES TAB_LINES.

MAILHEAD = 'TEST.OTF'.

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

MAILPACK-OBJ_NAME = 'TEST'.

MAILPACK-OBJ_DESCR = 'Subject'.

MAILPACK-DOC_SIZE = TAB_LINES * 255.

APPEND MAILPACK.

ENDFORM.

************************************************************************

  • Form GET_OTF_CODE

************************************************************************

FORM GET_OTF_CODE.

DATA: BEGIN OF OTF OCCURS 0.

INCLUDE STRUCTURE ITCOO .

DATA: END OF OTF.

DATA: ITCPO LIKE ITCPO.

DATA: ITCPP LIKE ITCPP.

CLEAR ITCPO.

ITCPO-TDGETOTF = 'X'.

  • Start writing OTF code

CALL FUNCTION 'OPEN_FORM'

EXPORTING

FORM = 'ZTEST_FORM'

LANGUAGE = SY-LANGU

OPTIONS = ITCPO

DIALOG = ' '

EXCEPTIONS

OTHERS = 1.

CALL FUNCTION 'START_FORM'

EXCEPTIONS

ERROR_MESSAGE = 01

OTHERS = 02.

CALL FUNCTION 'WRITE_FORM'

EXPORTING

WINDOW = 'MAIN'

EXCEPTIONS

ERROR_MESSAGE = 01

OTHERS = 02.

  • Close up Form and get OTF code

CALL FUNCTION 'END_FORM'

EXCEPTIONS

ERROR_MESSAGE = 01

OTHERS = 02.

MOVE-CORRESPONDING ITCPO TO ITCPP.

CALL FUNCTION 'CLOSE_FORM'

IMPORTING

RESULT = ITCPP

TABLES

OTFDATA = OTF

EXCEPTIONS

OTHERS = 1.

  • Move OTF code to structure SOLI form email

CLEAR SOLISTI1. REFRESH SOLISTI1.

LOOP AT OTF.

SOLISTI1-LINE = OTF.

APPEND SOLISTI1.

ENDLOOP.

ENDFORM.

Thanks & regards

Sreenivasulu P

Read only

Former Member
0 Likes
596

Hi Rave,

i use 2 ways.

when i have an Spool id try this exampe:

REPORT ZGRO_EMAIL_01.

*

************************************************************************

  • Eingabe festlegen

*

SELECTION-SCREEN: BEGIN OF BLOCK A01 WITH FRAME TITLE T_BLOCK1.

*

SELECTION-SCREEN: BEGIN OF LINE.

SELECTION-SCREEN: COMMENT 01(31) T_SPO_ID.

PARAMETERS: P_SPO_ID LIKE TSP01-RQIDENT.

SELECTION-SCREEN: END OF LINE.

*

SELECTION-SCREEN: END OF BLOCK A01.

*

************************************************************************

  • --- Parameter für SO_NEW_DOCUMENT_ATT_SEND_API1

DATA: OBJ_PACK LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,

OBJ_BIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,

OBJ_TXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,

REC_LIST LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE,

DOC_DATA LIKE SODOCCHGI1.

  • Hilfsparameter

DATA: TAB_LINES LIKE SY-TABIX. " Anzahl Tabellenelemente

DATA: REAL_TYPE LIKE SOPCKLSTI1-DOC_TYPE.

*

************************************************************************

*

INITIALIZATION.

*

T_BLOCK1 = 'Datenselektion'.

T_SPO_ID = 'Spoolnummer'.

*

************************************************************************

  • Programmanfang

************************************************************************

*

START-OF-SELECTION.

*

  • email füllen

  • Betreff-Zeile

DOC_DATA-OBJ_NAME = 'ZGRO_EMAIL_01'.

CONCATENATE SY-SYSID '/' SY-MANDT ':'

'Übertragung von Testdaten'

INTO DOC_DATA-OBJ_DESCR SEPARATED BY SPACE.

  • Empfängerliste

CLEAR REC_LIST.

  • email-User (U)

CLEAR REC_LIST.

REC_LIST-RECEIVER = 'XXX@XXX.de'.

REC_LIST-REC_TYPE = 'U'.

APPEND REC_LIST.

*

*emailinhalt

OBJ_TXT-LINE = '1. Zeile in der email'.

APPEND OBJ_TXT.

OBJ_TXT-LINE = '2. Zeile in der email mit mehr Zeichen'.

APPEND OBJ_TXT.

*

  • PACKING_LIST: Eintrag für Inhalt von OBJ_TXT erstellen (email Inhalt)

CLEAR OBJ_PACK.

OBJ_PACK-HEAD_START = 1.

OBJ_PACK-HEAD_NUM = 0.

OBJ_PACK-BODY_START = 1.

OBJ_PACK-DOC_TYPE = 'RAW'.

DESCRIBE TABLE OBJ_TXT LINES TAB_LINES.

OBJ_PACK-BODY_NUM = TAB_LINES.

APPEND OBJ_PACK.

*

  • Anhang aus SPOOL-Datei, Format wird mit übernommen

CALL FUNCTION 'RSPO_RETURN_SPOOLJOB'

EXPORTING

RQIDENT = P_SPO_ID

IMPORTING

REAL_TYPE = REAL_TYPE

TABLES

BUFFER = OBJ_BIN

EXCEPTIONS

NO_SUCH_JOB = 1

JOB_CONTAINS_NO_DATA = 2

SELECTION_EMPTY = 3

NO_PERMISSION = 4

CAN_NOT_ACCESS = 5

READ_ERROR = 6

TYPE_NO_MATCH = 7

OTHERS = 8.

*

IF SY-SUBRC <> 0.

WRITE: / 'Fehler Lesen Spool. Code:', SY-SUBRC.

EXIT.

ENDIF.

*

  • PACKING_LIST: Eintrag für Inhalt von OBJ_BIN erstellen (Anhang Inhalt)

CLEAR OBJ_PACK.

OBJ_PACK-TRANSF_BIN = 'X'.

OBJ_PACK-HEAD_START = 1.

OBJ_PACK-HEAD_NUM = 1.

OBJ_PACK-BODY_START = 1.

OBJ_PACK-DOC_TYPE = REAL_TYPE.

OBJ_PACK-OBJ_NAME = 'Anhang'.

OBJ_PACK-OBJ_DESCR = 'Anhangname'.

DESCRIBE TABLE OBJ_BIN LINES TAB_LINES.

OBJ_PACK-BODY_NUM = TAB_LINES.

APPEND OBJ_PACK.

*

  • --- Versenden des Dokuments

  • ab 470 ist COMMIT_WORK zu setzen

  • und SO_DOCUMENT_SEND_API1 lt. 190669

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'

EXPORTING

DOCUMENT_DATA = DOC_DATA

PUT_IN_OUTBOX = 'X'

COMMIT_WORK = 'X'

TABLES

PACKING_LIST = OBJ_PACK

CONTENTS_TXT = OBJ_TXT

CONTENTS_BIN = OBJ_BIN

RECEIVERS = REC_LIST

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.

*

CASE SY-SUBRC.

WHEN 1.

WRITE: / 'Zu viele Empfänger, fehlende Berechtigung !'.

WHEN 2.

WRITE: / 'Das Dokument wurde nicht versendet !'.

WHEN 3.

WRITE: / 'Dokument- oder ein Anlagentyp existiert nicht !'.

WHEN 4.

WRITE: / 'Keine Berechtigung zum Senden/Anlegen !'.

WHEN 5.

WRITE: / 'Unzulässige Kombination von Parameterwerten !'.

WHEN 6.

WRITE: / 'Interner Fehler oder Datenbank-Inkonsistenz !'.

WHEN 7.

WRITE: / 'Benötigte Sperren konnten nicht gesetzt werden !'.

WHEN 8.

WRITE: / 'Unbekannter Fehler !'.

ENDCASE.

END-OF-SELECTION.

*

************************************************************************

when i create an sapscript in my report

i use this:

REPORT ZGRO_TEST_MAHN.

*

  • Druckparameter für Briefausgabe

DATA: BEGIN OF DR_PARAM.

INCLUDE STRUCTURE ITCPO.

DATA: END OF DR_PARAM.

*

  • Tabellenausgabe

DATA: OTFDATA LIKE SOLI OCCURS 0 WITH HEADER LINE.

DATA: PDFDATA LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE.

DATA: PDF_FILESIZE LIKE SOOD-OBJLEN.

*

*

  • --- Parameter für SO_NEW_DOCUMENT_ATT_SEND_API1

DATA: OBJ_PACK LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,

OBJ_HEAD LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,

OBJ_BIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,

OBJ_TXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,

REC_LIST LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE,

DOC_DATA LIKE SODOCCHGI1.

*

************************************************************************

*

DR_PARAM-TDDEST = 'LOCAL'. "Ausgabegerät

DR_PARAM-TDIMMED = ' '. "Sofort ausgeben

DR_PARAM-TDPREVIEW = 'X'. "Druckvoschau

DR_PARAM-TDGETOTF = 'X'. "Ausgabe in Tabelle

*

CALL FUNCTION 'OPEN_FORM'

EXPORTING

DEVICE = 'PRINTER'

DIALOG = ' '

OPTIONS = DR_PARAM

FORM = 'ZMEDRUCK_MAHN'

LANGUAGE = SY-LANGU

EXCEPTIONS

CANCELED = 01

DEVICE = 02

OTHERS = 03.

*

IF SY-SUBRC <> 0. WRITE: / SY-SUBRC. EXIT. ENDIF.

*

CALL FUNCTION 'WRITE_FORM'

EXPORTING

WINDOW = 'ADDRESS'

EXCEPTIONS

WINDOW = 1.

*

IF SY-SUBRC <> 0. WRITE: / SY-SUBRC. EXIT. ENDIF.

*

CALL FUNCTION 'WRITE_FORM'

EXPORTING

WINDOW = 'MAIN'

ELEMENT = 'ANSCHREIBEN_ANFANG'

EXCEPTIONS

WINDOW = 1.

*

IF SY-SUBRC <> 0. WRITE: / SY-SUBRC. EXIT. ENDIF.

*

CALL FUNCTION 'CLOSE_FORM'

TABLES

OTFDATA = OTFDATA.

*

  • exit.

*

CALL FUNCTION 'SX_OBJECT_CONVERT_OTF_PDF'

EXPORTING

FORMAT_SRC = 'OTF'

FORMAT_DST = 'PDF'

DEVTYPE = ''

LEN_IN = ''

IMPORTING

LEN_OUT = PDF_FILESIZE

TABLES

CONTENT_IN = OTFDATA

CONTENT_OUT = PDFDATA.

*

CALL FUNCTION 'RFC_MAIL' DESTINATION 'LOCAL_EXEC'

EXPORTING

USER = 'groehn@telerob.de'

TABLES

MAIL = PDFDATA.

  • exit.

  • email füllen

  • Betreff-Zeile

DOC_DATA-OBJ_NAME = 'Report: ZGRO_EMAIL_01'.

CONCATENATE SY-SYSID '/' SY-MANDT ':'

'Übertragung von Testdaten'

INTO DOC_DATA-OBJ_DESCR SEPARATED BY SPACE.

  • Empfängerliste

  • email-User (U)

CLEAR REC_LIST.

CLEAR REC_LIST.

REC_LIST-RECEIVER = 'XXX@XXX.de'.

REC_LIST-REC_TYPE = 'U'.

APPEND REC_LIST.

*

  • PACKING_LIST: 1. Zeile gilt immer für email-Inhalt

CLEAR OBJ_PACK.

OBJ_PACK-TRANSF_BIN = ' '.

OBJ_PACK-BODY_START = 01.

OBJ_PACK-BODY_NUM = 02.

OBJ_PACK-DOC_TYPE = 'RAW'.

APPEND OBJ_PACK.

*

  • PACKING_LIST: 2. und Folgezeilen gelten immer für Anlagen

  • Wird OBJ_PACK-TRANSF_BIN Feld gesetzt, wird aus OBJ_BIN genommen,

  • sonst OBJ_TXT

CLEAR OBJ_PACK.

OBJ_PACK-TRANSF_BIN = 'X'.

OBJ_PACK-BODY_START = 01.

  • Anzahl der Zeilen dynamisch ermitteln

DESCRIBE TABLE PDFDATA LINES OBJ_PACK-BODY_NUM.

OBJ_PACK-DOC_TYPE = 'PDF'.

  • Size ist bei PDF mit anzugeben

OBJ_PACK-DOC_SIZE = PDF_FILESIZE.

OBJ_PACK-OBJ_NAME = 'Anhang'. "Gilt nur für Anhänge

OBJ_PACK-OBJ_DESCR = 'Lieferantenmahnung'. "Gilt nur für Anhänge

APPEND OBJ_PACK.

*

*emailinhalt

OBJ_TXT-LINE = '1. Zeile in der email'.

APPEND OBJ_TXT.

OBJ_TXT-LINE = '2. Zeile in der email mit mehr Zeichen'.

APPEND OBJ_TXT.

*Anlageninhalt wird aus convertierte PDF-Datei genommen

LOOP AT PDFDATA.

OBJ_BIN-LINE = PDFDATA-LINE.

APPEND OBJ_BIN.

ENDLOOP.

  • --- Versenden des Dokuments

*

  • --- Versenden des Dokuments

  • ab 470 ist COMMIT_WORK zu setzen

  • und SO_DOCUMENT_SEND_API1 lt. 190669

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'

EXPORTING

DOCUMENT_DATA = DOC_DATA

PUT_IN_OUTBOX = 'X'

COMMIT_WORK = 'X'

TABLES

PACKING_LIST = OBJ_PACK

CONTENTS_TXT = OBJ_TXT

CONTENTS_BIN = OBJ_BIN

RECEIVERS = REC_LIST

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.

*

CASE SY-SUBRC.

WHEN 1.

WRITE: / 'Zu viele Empfänger, fehlende Berechtigung !'.

WHEN 2.

WRITE: / 'Das Dokument wurde nicht versendet !'.

WHEN 3.

WRITE: / 'Dokument- oder ein Anlagentyp existiert nicht !'.

WHEN 4.

WRITE: / 'Keine Berechtigung zum Senden/Anlegen !'.

WHEN 5.

WRITE: / 'Unzulässige Kombination von Parameterwerten !'.

WHEN 6.

WRITE: / 'Interner Fehler oder Datenbank-Inkonsistenz !'.

WHEN 7.

WRITE: / 'Benötigte Sperren konnten nicht gesetzt werden !'.

WHEN 8.

WRITE: / 'Unbekannter Fehler !'.

ENDCASE.

************************************************************************

  • Programmende *

************************************************************************

Regards, Dieter

Message was edited by: Dieter Gröhn