*&---------------------------------------------------------------------*
*& Subroutinepool YFAKTURA_EMAIL by TRON *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
* WARNING : NO POPUPS - NO COMMIT WORK IN HERE !!!!!!!!!!!!!!!!!!!!!!!!!
DATA: retcode
LIKE sy
-subrc
. "Returncode DATA: xscreen
(1) TYPE c
. "Output on printer or screen tnapr. "Programs & Forms
*&---------------------------------------------------------------------*
*& Form ENTRY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RETURN_CODE text
* -->US_SCREEN text
*----------------------------------------------------------------------*
FORM entry
USING return_code
TYPE i
us_screen TYPE c.
<p> TYPE ssfcrescl.
DATA pgnam
TYPE na_pgnam
." Programname DATA ronam
TYPE na_ronam
."Formname DATA fm_name
TYPE rs38l_fnam
. "genr.Druckbaustein DATA spoolid
TYPE rspoid
.
xscreen = us_screen.
* Call the "Original" Printroutine
* RVADIN01 = Sapscript
* RLB_INVOICE = Smartforms
*-Orig program------+
* |
*-Orig Form-+ |
* | |
PERFORM entry
(RLB_INVOICE
) USING return_code us_screen
.
* Try Sapscript
ASSIGN ('(SAPLSTXC)ITCPP') TO <f
>. NOT <f>-tdspoolid IS INITIAL AND
us_screen IS INITIAL.
PERFORM processing
USING <f
>-tdspoolid
. UNASSIGN <f>.
* Try Smartforms
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = tnapr-sform
IMPORTING
fm_name = fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
retcode = 1.
SELECT SINGLE pname
FROM tfdir
INTO lv_vec
WHERE funcname = fm_name.
NOT <p>-spoolids[] IS INITIAL AND
us_screen IS INITIAL.
LOOP AT <p
>-spoolids
INTO spoolid
. UNASSIGN <p>.
ENDIF." sapscript/smartforms
return_code = 1.
return_code = 0.
*&---------------------------------------------------------------------*
*& Form PROCESSING
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM processing
USING spoolid
TYPE itcpp
-tdspoolid
. pdfspoolid LIKE tsp01-rqident,
pdf_content TYPE table of solix,
BIN_FILE type xstring.
DATA: document_data
LIKE sodocchgi1
, object_txt LIKE solisti1 OCCURS 10 WITH HEADER LINE,
object_pack LIKE sopcklsti1 OCCURS 1 WITH HEADER LINE,
receiver_list LIKE somlreci1 OCCURS 1 WITH HEADER LINE,
tab_lines TYPE i.
* for Invoice Header Text
lv_ID type THEAD-TDID value 'YEML',
lv_LANGUAGE type THEAD-TDSPRAS,
lv_NAME type THEAD-TDNAME,
lv_OBJECT type THEAD-TDOBJECT value 'VBBK',
lt_lines type table of tline,
ls_line type tline.
* For partner Email
lv_ITEM_NUMBER type VBUP-POSNR value '000000',
lv_PARTNER_ROLE type VBPA-PARVW value 'RE'.
lv_DOCUMENT_NUMBER type VBUK-VBELN,
ls_vbpa type vbpa.
**** Main - Email ****
* Title and Description
document_data-obj_name = 'INVOICE'.
document_data-obj_descr = nast-objky.
* Text of Email
SEPARATED BY space.
lv_language = nast-spras.
lv_NAME = nast-objky.
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = lv_ID
LANGUAGE = lv_LANGUAGE
NAME = lv_NAME
OBJECT = lv_OBJECT
LINES = lt_lines
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
loop at lt_lines
into ls_line
. append ls_line
-TDLINE
to object_txt
.
* Packing List(Main-Part)
* Calculate the contens length
DESCRIBE TABLE object_txt LINES tab_lines.
READ TABLE object_txt INDEX tab_lines.
document_data-doc_size = ( tab_lines - 1 ) * 255 +
STRLEN( object_txt ).
* generate the Packing List
CLEAR object_pack
-transf_bin
. object_pack-head_start = 1.
object_pack-head_num = 0.
object_pack-body_start = 1.
object_pack-body_num = tab_lines.
object_pack-doc_type = 'RAW'.
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
EXPORTING
SRC_SPOOLID = spoolid
NO_DIALOG = 'X'
* DST_DEVICE =
PDF_DESTINATION = 'X'
NO_BACKGROUND = 'X'
* USE_CASCADING = ' '
IMPORTING
PDF_BYTECOUNT = numbytes
* PDF_SPOOLID =
* OTF_PAGECOUNT =
* BTC_JOBNAME =
* BTC_JOBCOUNT =
BIN_FILE = BIN_FILE
* TABLES
* PDF =
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.
.
* -------- convert document -------------------------------
pdf_content = cl_document_bcs=>xstring_to_solix( BIN_FILE ).
* Generate the Attachment
* Packing List(Att)
DESCRIBE TABLE pdf_content LINES tab_lines.
object_pack-doc_size = numbytes.
object_pack-transf_bin = 'X'.
object_pack-head_start = 1.
object_pack-head_num = 0.
object_pack-body_start = 1.
object_pack-body_num = tab_lines.
object_pack-doc_type = 'PDF'.
object_pack-obj_name = 'SPOOL'.
object_pack-obj_descr = nast-objky.
* generate the receiver list
lv_DOCUMENT_NUMBER = nast-objky.
* Get Partner RE Email
CALL FUNCTION 'SD_VBPA_SELECT'
EXPORTING
I_DOCUMENT_NUMBER = lv_DOCUMENT_NUMBER
I_ITEM_NUMBER = lv_ITEM_NUMBER
I_PARTNER_ROLE = lv_PARTNER_ROLE
IMPORTING
E_VBPA = ls_vbpa
EXCEPTIONS
PARTNER_NOT_FOUND = 1
OTHERS = 2.
* Internet User
select single SMTP_ADDR
from adr6
into receiver_list
-receiver where ADDRNUMBER = ls_vbpa-adrnr and FLGDEFAULT = 'X'.
if sy
-subrc
= 0 and not receiver_list
-receiver is initial. receiver_list-rec_type = 'U'.
receiver_list-com_type ='INT'.
receiver_list-receiver = 'SAPUSER@LOCALHOST'.
receiver_list-rec_type = 'U'.
receiver_list-com_type ='INT'.
* Send the mail
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = DOCUMENT_DATA
* PUT_IN_OUTBOX = ' '
COMMIT_WORK = ' '
* IMPORTING
* SENT_TO_ALL =
* NEW_OBJECT_ID =
PACKING_LIST = object_pack
* OBJECT_HEADER =
* CONTENTS_BIN =
CONTENTS_TXT = object_txt
CONTENTS_HEX = pdf_content
* OBJECT_PARA =
* OBJECT_PARB =
RECEIVERS = receiver_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.
retcode = 1.