Report To Send Automtic Mail

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 18

REPORT y_r_eitan_test_10_02 .

TYPE-POOLS: abap .
TYPE-POOLS: rsds .
TYPES: tty_adr6 TYPE TABLE OF adr6 .
TYPES: tp_rsdsfields TYPE STANDARD TABLE OF rsdsfields WITH DEFAULT KEY .
*----------------------------------------------------------------------*
FIELD-SYMBOLS: <it_data> TYPE ANY TABLE .
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
CLASS cl_string DEFINITION .
PUBLIC SECTION.
CONSTANTS: cr_lf TYPE string VALUE '<cr_lf>' .
DATA: htm_string TYPE string .
DATA: csv_string TYPE string .
METHODS: append_htm
IMPORTING fragment TYPE any .
METHODS: append_csv
IMPORTING fragment TYPE any .
PRIVATE SECTION.
METHODS: edit_value
IMPORTING fragment TYPE any
CHANGING buffer TYPE so_text255 .
ENDCLASS.
"CL_string DEFINITION
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
CLASS cl_string IMPLEMENTATION.
*----------------------------------------------------------------------*
METHOD: append_htm .
DATA: buffer TYPE so_text255 .
me->edit_value( EXPORTING fragment = fragment CHANGING buffer = buffer ) .
CONDENSE buffer .
CONCATENATE htm_string buffer INTO htm_string .
ENDMETHOD.
"append_htm
*----------------------------------------------------------------------*
METHOD: append_csv .
DATA: buffer TYPE so_text255 .
DATA: strlen TYPE i .
DATA: inttype TYPE inttype .
me->edit_value( EXPORTING fragment = fragment CHANGING buffer = buffer ) .

DESCRIBE FIELD fragment TYPE inttype .


IF buffer EQ cl_string=>cr_lf .
strlen = STRLEN( csv_string ) - 1 .
REPLACE SECTION OFFSET strlen LENGTH 1 OF csv_string WITH ' ' .
CONCATENATE csv_string cl_abap_char_utilities=>cr_lf INTO csv_string .
RETURN .
ENDIF .
CONDENSE buffer .
REPLACE cl_abap_char_utilities=>cr_lf IN buffer WITH ' ' .
REPLACE cl_abap_char_utilities=>newline IN buffer WITH ' ' .
REPLACE cl_abap_char_utilities=>horizontal_tab IN buffer WITH ' ' .
DATA: quote TYPE abap_bool VALUE abap_false .
* quote this value ?
IF buffer CS '"' OR buffer CS ',' .
quote = abap_true .
ENDIF.
REPLACE ALL OCCURRENCES OF '"' IN buffer WITH '""' .
IF quote EQ abap_true .
CONCATENATE '"' buffer '"' INTO buffer .
ENDIF .
CASE inttype .
WHEN 'N' .
CONCATENATE '="' buffer '"' INTO buffer .
ENDCASE .
CONCATENATE csv_string buffer ',' INTO csv_string .
ENDMETHOD.
"append_htm
*----------------------------------------------------------------------*
METHOD: edit_value .
DATA: inttype TYPE inttype .
DESCRIBE FIELD fragment TYPE inttype .
WRITE fragment TO buffer LEFT-JUSTIFIED .
IF buffer EQ cl_string=>cr_lf .
RETURN .
ENDIF .
CASE inttype .
WHEN 'I' OR 'P' .
IF fragment LT 0 .
WRITE fragment TO buffer+1 NO-SIGN LEFT-JUSTIFIED .
WRITE '-' TO buffer+0(1) .
ENDIF .
WHEN 'N' .

buffer = fragment .
ENDCASE .
ENDMETHOD.
"edit_minus_value
*----------------------------------------------------------------------*
ENDCLASS.
"cl_string IMPLEMENTATION
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK block04 WITH FRAME .
PARAMETERS: p_rcpn_1 TYPE adsmtp-smtp_addr .
PARAMETERS: p_rcpn_2 TYPE adsmtp-smtp_addr .
SELECTION-SCREEN SKIP .
PARAMETERS: p_sbjct TYPE so_obj_des .
SELECTION-SCREEN SKIP .
PARAMETERS: p_table TYPE dd03l-tabname OBLIGATORY DEFAULT 'SFLIGHT' VALUE CHECK
.
PARAMETERS: p_maxsel TYPE tbmaxsel DEFAULT 10 .
SELECTION-SCREEN SKIP .
PARAMETERS: p_file TYPE localfile ." OBLIGATORY .
PARAMETERS: p_filf TYPE write_pc .
SELECTION-SCREEN END OF BLOCK block04 .
SELECTION-SCREEN BEGIN OF BLOCK block06 WITH FRAME .
PARAMETERS: p_tdname TYPE thead-tdname OBLIGATORY DEFAULT 'S_DEMO_1' .
SELECTION-SCREEN END OF BLOCK block06 .
*PARAMETERS h_fields TYPE tp_rsdsfields NO-DISPLAY .
*PARAMETERS h_trange TYPE rsds_trange NO-DISPLAY .
*----------------------------------------------------------------------*
INITIALIZATION.
PERFORM at_initialization .
AT SELECTION-SCREEN .
PERFORM at_selection_screen_input USING sy-ucomm .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_tdname .
PERFORM f4_tdname CHANGING p_tdname .
START-OF-SELECTION.
PERFORM at_start_of_selection .
*----------------------------------------------------------------------*
FORM at_initialization .
DATA: st_address TYPE bapiaddr3 .
DATA: it_return TYPE bapirettab .
CALL FUNCTION 'BAPI_USER_GET_DETAIL'
EXPORTING
username = sy-uname

IMPORTING
address = st_address
TABLES
return = it_return.
p_rcpn_1 = st_address-e_mail .
* p_rcpn_2 = st_address-e_mail .
CONCATENATE 'Hi there-' sy-datum '-' sy-uzeit '(EX)' INTO p_sbjct .
ENDFORM .
"at_initialization
*----------------------------------------------------------------------*
FORM at_selection_screen_input
USING
my_ucomm TYPE syucomm .
CHECK my_ucomm EQ 'ONLI' .
DATA: it_dfies_tab TYPE ddfields .
FIELD-SYMBOLS: <st_dfies_tab> LIKE LINE OF it_dfies_tab .
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
tabname
= p_table
TABLES
dfies_tab
= it_dfies_tab
EXCEPTIONS
not_found
= 1
internal_error = 2
OTHERS
= 3.
DELETE it_dfies_tab WHERE checktable IS INITIAL OR
fieldname EQ 'MANDT' .
DATA: it_fields
DATA: it_texts

TYPE tp_rsdsfields WITH HEADER LINE .


TYPE TABLE OF rsdstexts WITH HEADER LINE .

LOOP AT it_dfies_tab ASSIGNING <st_dfies_tab> .


it_fields-tablename = <st_dfies_tab>-tabname .
it_fields-fieldname = <st_dfies_tab>-fieldname .
it_fields-type
= 'S'
.
APPEND it_fields .
IF LINES( it_fields ) EQ 75 .
EXIT .
ENDIF .
ENDLOOP .
DATA: selection_id TYPE rsdynsel-selid .

*
*
*
*
*

CALL FUNCTION 'FREE_SELECTIONS_INIT'


EXPORTING
kind
= 'T'
kind
= 'F'
EXPRESSIONS
=
FIELD_RANGES_INT
=
FIELD_GROUPS_KEY
=
RESTRICTION
=

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

ALV
CURR_QUAN_PROG
CURR_QUAN_RELATION
IMPORTING
selection_id
WHERE_CLAUSES
EXPRESSIONS
FIELD_RANGES
NUMBER_OF_ACTIVE_FIELDS
TABLES
fields_tab
FIELD_DESC
field_texts
EVENTS
EVENT_FIELDS
FIELDS_NOT_SELECTED
NO_INT_CHECK
ALV_QINFO
EXCEPTIONS
fields_incomplete
fields_no_join
field_not_found
no_tables
table_not_found
expression_not_supported
incorrect_expression
illegal_kind
area_not_found
inconsistent_area
kind_f_no_fields_left
kind_f_no_fields
too_many_fields
dup_field
field_no_type
field_ill_type
dup_event_field
node_not_in_ldb
area_no_field
OTHERS

=
= SY-CPROG
=
= selection_id
=
=
=
=
= it_fields
=
= it_texts
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 .

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
DATA: it_where_clauses TYPE rsds_twhere .
DATA: it_expressions TYPE rsds_texpr .
DATA: it_field_ranges TYPE rsds_trange .
* it_field_ranges[] = h_trange[] .

*
*
*
*

CALL FUNCTION 'FREE_SELECTIONS_DIALOG'


EXPORTING
selection_id
= selection_id
title
= 'My Title'
frame_text
= 'My Frame Text'
STATUS
=
AS_WINDOW
= ' '
START_ROW
= 2
START_COL
= 2

*
*
*
*
*
*
*
*
*

*
*
*

NO_INTERVALS
just_display
PFKEY
ALV
tree_visible
DIAG_TEXT_1
DIAG_TEXT_2
WARNING_TITLE
AS_SUBSCREEN
NO_FRAME
IMPORTING
where_clauses
expressions
field_ranges
NUMBER_OF_ACTIVE_FIELDS
TABLES
fields_tab
FCODE_TAB
FIELDS_NOT_SELECTED
EXCEPTIONS
internal_error
no_action
selid_not_found
illegal_status
OTHERS

=
=
=
=
=
=
=
=
=
=

' '
abap_true
' '
' '

' '

= it_where_clauses
= it_expressions
= it_field_ranges
=
= it_fields
=
=
=
=
=
=
=

1
2
3
4
5 .

CHECK sy-subrc EQ 0 .
* h_fields[] = it_fields[] .
* h_trange[] = it_field_ranges[] .
CHECK my_ucomm EQ 'ONLI' OR my_ucomm EQ 'PRIN' .
PERFORM get_data_1
USING
it_where_clauses .
IF <it_data>[] IS INITIAL .
MESSAGE e668(vl).
ENDIF .
PERFORM mail_1_main
USING
<it_data> .
ENDFORM .
"at_selection_screen_input
*----------------------------------------------------------------------*
FORM at_start_of_selection .
ENDFORM.
"at_start_of_selection
*----------------------------------------------------------------------*
FORM get_data_1
USING
it_where_clauses TYPE rsds_twhere .
DATA: st_where_clauses LIKE LINE OF it_where_clauses .
READ TABLE it_where_clauses INTO st_where_clauses
WITH KEY
p_table .

DATA: dref TYPE REF TO data.


CREATE DATA dref TYPE STANDARD TABLE OF (p_table) WITH NON-UNIQUE DEFAULT KEY.
ASSIGN dref->* TO <it_data> .
SELECT * INTO TABLE <it_data>
FROM (p_table)
UP TO p_maxsel ROWS
WHERE (st_where_clauses-where_tab[]) .
ENDFORM .
"GET_DATA_1
*----------------------------------------------------------------------*
FORM f4_tdname
CHANGING p_tdname TYPE thead-tdname .
DATA: st_header TYPE thead .

*
*
*
*
*

CALL FUNCTION 'RETRIEVAL_TEXT'


EXPORTING
name
= p_tdname
ID
= 'ST'
LANGUAGE
= SY-LANGU
SELECTION_SCREEN
= 'X'
TEXTTYPE
= '*'
SHORT_SELECTION
= ' '
IMPORTING
header
= st_header
EXCEPTIONS
canceled
= 1
retrieval_error
= 2
invalid_id
= 3
invalid_language
= 4
OTHERS
= 5 .
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
RETURN .
ENDIF.
p_tdname = st_header-tdname .

ENDFORM .
"f4_month
*----------------------------------------------------------------------*
FORM get_rgb
CHANGING
color TYPE char15 .
DATA: field_x TYPE x .
DATA: field_c TYPE c LENGTH 2 .
DATA: rnd_value TYPE datatype-integer4 .
CLEAR color .
* Get HTML RGB color (<tag ATTRIBUTE="#RRGGBB">)
DO 3 TIMES .

CALL FUNCTION
EXPORTING
rnd_min
rnd_max
IMPORTING
rnd_value

'RANDOM_I4'
= 0
= 255
= rnd_value.

field_x = rnd_value .
field_c = field_x .
CONCATENATE color field_c INTO color .
ENDDO .
CONCATENATE '"#' color '"' INTO color .
ENDFORM .
"get_rgb
*----------------------------------------------------------------------*
FORM mail_1_main
USING
it_data TYPE table .
DATA: it_receivers TYPE tty_adr6 ,
st_receivers LIKE LINE OF it_receivers .
st_receivers-smtp_addr = p_rcpn_1 .
APPEND st_receivers TO it_receivers.
IF p_rcpn_2 IS NOT INITIAL .
st_receivers-smtp_addr = p_rcpn_2 .
APPEND st_receivers TO it_receivers.
ENDIF .
DATA: ob_document_bcs TYPE REF TO cl_document_bcs.
PERFORM mail_1_prep_1
USING
it_receivers
CHANGING
ob_document_bcs .
PERFORM mail_1_prep_2
USING
it_data
CHANGING
ob_document_bcs .
PERFORM mail_1_prep_3
USING
it_data
CHANGING
ob_document_bcs .
PERFORM mail_1_prep_4
CHANGING
ob_document_bcs .
PERFORM mail_1_prep_5

CHANGING
ob_document_bcs .
DATA:
DATA:
DATA:
DATA:

ob_bcs TYPE
ob_sapuser_bcs
ob_recipient_bcs
ob_cam_address_bcs

REF TO cl_bcs.
TYPE REF TO cl_sapuser_bcs.
TYPE REF TO if_recipient_bcs.
TYPE REF TO cl_cam_address_bcs .

ob_bcs = cl_bcs=>create_persistent( ).
CALL METHOD ob_bcs->set_document( ob_document_bcs ).
ob_sapuser_bcs = cl_sapuser_bcs=>create( sy-uname ).
CALL METHOD ob_bcs->set_sender
EXPORTING
i_sender = ob_sapuser_bcs.
* Create multiple recipients
LOOP AT it_receivers INTO st_receivers .
* ob_recipient_bcs = cl_cam_address_bcs=>create_internet_address( st_receive
rs-smtp_addr ).
ob_cam_address_bcs = cl_cam_address_bcs=>create_internet_address( st_receive
rs-smtp_addr ).

CALL METHOD ob_bcs->add_recipient


EXPORTING
i_recipient = ob_recipient_bcs .
i_recipient = ob_cam_address_bcs .
ENDLOOP.
DATA: result TYPE abap_bool .
CALL METHOD ob_bcs->send
EXPORTING
i_with_error_screen = abap_true
RECEIVING
result
= result.
COMMIT WORK .

ENDFORM.
"mail_1_main
*----------------------------------------------------------------------*
FORM mail_1_prep_1
USING
it_receivers
TYPE tty_adr6
CHANGING
ob_document_bcs TYPE REF TO cl_document_bcs .
FIELD-SYMBOLS: <st_receivers> LIKE LINE OF it_receivers .
DATA: ob_string TYPE REF TO cl_string .
CREATE OBJECT ob_string .
CALL METHOD ob_string->append_htm
EXPORTING
fragment = : '<FONT SIZE="4">' .

CALL METHOD ob_string->append_htm


EXPORTING
fragment = : 'Date: ', sy-datum ,'Time: ', sy-uzeit , '<BR><BR>' .
DATA: my_tabix_1 TYPE sytabix .
CALL METHOD ob_string->append_htm
EXPORTING
fragment = : 'To: ' , '<ul style="list-style-type:none;" >' .
LOOP AT it_receivers ASSIGNING <st_receivers> .
CALL METHOD ob_string->append_htm
EXPORTING
fragment = : '<li>' , <st_receivers>-smtp_addr , '<li>' .
ENDLOOP .
CALL METHOD ob_string->append_htm
EXPORTING
fragment = : '</ul>' .
CALL METHOD ob_string->append_htm
EXPORTING
fragment = : '<U>Hello world!</U>' ,
'<H3>Hello world!</H3>'

CALL METHOD ob_string->append_htm


EXPORTING
fragment = : '</FONT>' .
CALL METHOD ob_string->append_htm
EXPORTING
fragment = :
'This e-mail was sent from an automated system...<BR>' ,
'Do not reply to this message. <BR>' ,
'<BR>' .
* DATA: it_soli TYPE soli_tab .
*
* CALL METHOD cl_bcs_convert=>string_to_soli
*
EXPORTING
*
iv_string = ob_string->htm_string
*
RECEIVING
*
et_soli = it_soli.
DATA: it_solix TYPE solix_tab .
CALL METHOD cl_bcs_convert=>string_to_solix
EXPORTING
iv_string = ob_string->htm_string
IMPORTING
et_solix = it_solix.
CALL METHOD cl_document_bcs=>create_document
EXPORTING
i_type
= 'HTM'
i_subject = p_sbjct
*
i_text
= it_soli

i_hex
RECEIVING
result

= it_solix
= ob_document_bcs.

ENDFORM .
"mail_1_prep_1
*----------------------------------------------------------------------*
FORM mail_1_prep_2
USING
it_data
TYPE table
CHANGING
ob_document_bcs TYPE REF TO cl_document_bcs .
DATA: it_ddfields TYPE ddfields .
FIELD-SYMBOLS: <st_ddfields> LIKE LINE OF it_ddfields .
* Get DDIC Information
CALL METHOD cl_salv_ddic=>get_by_data
EXPORTING
data
= it_data
RECEIVING
t_dfies = it_ddfields.
DELETE it_ddfields WHERE fieldname EQ 'MANDT' .
DATA: ob_string TYPE REF TO cl_string .
CREATE OBJECT ob_string .
ob_string->append_htm( fragment = '<table border="1" cellspacing="0">' ) .
ob_string->append_htm( fragment = '<tr>' ) .
LOOP AT it_ddfields ASSIGNING <st_ddfields> .
ob_string->append_htm( fragment = '<th>' ) .
ob_string->append_htm( fragment = <st_ddfields>-scrtext_l ) .
ob_string->append_htm( fragment = '</th>' ) .
ENDLOOP .
ob_string->append_htm( fragment = '</tr>' ) .
FIELD-SYMBOLS: <st_data> TYPE ANY .
FIELD-SYMBOLS: <component> TYPE ANY .
DATA: dref TYPE REF TO data .
CREATE DATA dref LIKE LINE OF it_data .
ASSIGN dref->* TO <st_data> .
DATA: color TYPE char15 .
LOOP AT it_data ASSIGNING <st_data> .
ob_string->append_htm( fragment = '<tr>' ) .
LOOP AT it_ddfields ASSIGNING <st_ddfields> .
* This is just a "show off"

PERFORM get_rgb
CHANGING
color .
CALL METHOD ob_string->append_htm
EXPORTING
fragment = : '<td nowrap bgcolor=' , color , '>' .
ASSIGN COMPONENT <st_ddfields>-lfieldname OF STRUCTURE <st_data> TO <compo
nent> .
ob_string->append_htm( fragment = <component> ) .
ob_string->append_htm( fragment = '</td>' ) .
ENDLOOP .
ob_string->append_htm( fragment = '</tr>' ) .
ENDLOOP .
ob_string->append_htm( fragment = '</table>' ) .
DATA: it_soli TYPE soli_tab .
CALL METHOD cl_bcs_convert=>string_to_soli
EXPORTING
iv_string = ob_string->htm_string
RECEIVING
et_soli = it_soli.
DATA: attachment_subject TYPE so_obj_des .
MESSAGE s000(oo) WITH 'attachment HTM (htm)' space INTO attachment_subject .
TRY.
CALL METHOD ob_document_bcs->add_attachment
EXPORTING
i_attachment_type
= 'htm'
i_attachment_subject = attachment_subject
i_att_content_text = it_soli.
CATCH cx_document_bcs .
ENDTRY.
ENDFORM .
"mail_1_prep_2
*----------------------------------------------------------------------*
FORM mail_1_prep_3
USING
it_data
TYPE table
CHANGING
ob_document_bcs TYPE REF TO cl_document_bcs .
DATA: it_ddfields TYPE ddfields .
FIELD-SYMBOLS: <st_ddfields> LIKE LINE OF it_ddfields .
* Get DDIC Information
CALL METHOD cl_salv_ddic=>get_by_data
EXPORTING
data
= it_data
RECEIVING

t_dfies = it_ddfields.
DELETE it_ddfields WHERE fieldname EQ 'MANDT' .
DATA: ob_string TYPE REF TO cl_string .
CREATE OBJECT ob_string .
LOOP AT it_ddfields ASSIGNING <st_ddfields> .
IF <st_ddfields>-fieldname EQ 'CURRENCY' .
CONCATENATE '"' <st_ddfields>-scrtext_l '"' INTO <st_ddfields>-scrtext_l .
ENDIF .
ob_string->append_csv( fragment = <st_ddfields>-scrtext_l ) .
ENDLOOP .
ob_string->append_csv( fragment = cl_string=>cr_lf ) .
FIELD-SYMBOLS: <st_data> TYPE ANY .
FIELD-SYMBOLS: <component> TYPE ANY .
DATA: dref TYPE REF TO data .
CREATE DATA dref LIKE LINE OF it_data .
ASSIGN dref->* TO <st_data> .
LOOP AT it_data ASSIGNING <st_data> .
LOOP AT it_ddfields ASSIGNING <st_ddfields> .
ASSIGN COMPONENT <st_ddfields>-lfieldname OF STRUCTURE <st_data> TO <compo
nent> .
ob_string->append_csv( fragment = <component> ) .
ENDLOOP .
ob_string->append_csv( fragment = cl_string=>cr_lf ) .
ENDLOOP .
DATA: it_solix TYPE solix_tab .
CALL METHOD cl_bcs_convert=>string_to_solix
EXPORTING
iv_string = ob_string->csv_string
IMPORTING
et_solix = it_solix.
DATA: attachment_subject TYPE so_obj_des .
MESSAGE s000(oo) WITH 'attachment CSV hex' space INTO attachment_subject .
TRY.
CALL METHOD ob_document_bcs->add_attachment
EXPORTING
i_attachment_type
= 'csv'

i_attachment_subject = attachment_subject
i_att_content_hex
= it_solix.
CATCH cx_document_bcs .
ENDTRY.
MESSAGE s000(oo) WITH 'attachment CSV txt' space INTO attachment_subject .
DATA: it_soli TYPE soli_tab .
CALL METHOD cl_bcs_convert=>string_to_soli
EXPORTING
iv_string = ob_string->csv_string
RECEIVING
et_soli = it_soli.
TRY.
CALL METHOD ob_document_bcs->add_attachment
EXPORTING
i_attachment_type
= 'csv'
i_attachment_subject = attachment_subject
i_att_content_text = it_soli.
CATCH cx_document_bcs .
ENDTRY.
ENDFORM .
"mail_1_prep_3
*----------------------------------------------------------------------*
FORM mail_1_prep_4
CHANGING
ob_document_bcs TYPE REF TO cl_document_bcs .
DATA: st_thead TYPE thead .
DATA: it_lines TYPE tline_tab .
st_thead-tdobject
st_thead-tdname
st_thead-tdid
st_thead-tdspras

=
=
=
=

'TEXT' .
p_tdname .
'ST' .
'E' .

CALL FUNCTION 'READ_TEXT'


EXPORTING
id
language
name
object
IMPORTING
header
TABLES
lines
EXCEPTIONS
id
language
name
not_found
object
reference_check
wrong_access_to_archive
OTHERS
IF sy-subrc NE 0 .

=
=
=
=

st_thead-tdid
st_thead-tdspras
st_thead-tdname
st_thead-tdobject

= st_thead
= it_lines
=
=
=
=
=
=
=
=

1
2
3
4
5
6
7
8.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno


WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
ENDIF.
* CALL FUNCTION 'INIT_TEXT'
*
EXPORTING
*
id
= st_thead-tdid
*
language = st_thead-tdspras
*
name
= st_thead-tdname
*
object = st_thead-tdobject
*
TABLES
*
lines
= it_lines
*
EXCEPTIONS
*
id
= 1
*
language = 2
*
name
= 3
*
object = 4
*
OTHERS = 5.
DATA: st_lines LIKE LINE OF it_lines .
DO 1000 TIMES .
st_lines-tdformat = '*' .
st_lines-tdline = 'This is a test ++++++++++++++++++++++++++++++++++++++++++
+++++' .
APPEND st_lines TO it_lines .
ENDDO .
DATA: it_otfdata TYPE otf_t_itcoo .
DATA: st_options TYPE itcpo.
st_options-tdgetotf = abap_true .
CALL FUNCTION 'PRINT_TEXT'
EXPORTING
dialog
header
OPTIONS
TABLES
lines
otfdata
EXCEPTIONS
canceled
device
form
OPTIONS
unclosed
unknown
format
textformat
communication
bad_pageformat_for_print
OTHERS

= abap_false
= st_thead
= st_options
= it_lines
= it_otfdata
=
=
=
=
=
=
=
=
=
=
=

1
2
3
4
5
6
7
8
9
10
11.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

DATA: it_otfdata_m TYPE otf_t_itcoo .


* "Merge pdf output demo"
APPEND LINES OF it_otfdata TO it_otfdata_m .
DATA: bin_file TYPE xstring .
DATA: it_lines_dummy TYPE tline_tab .
DATA: bin_filesize TYPE i .
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format
=
IMPORTING
bin_file
=
bin_filesize
=
TABLES
otf
=
lines
=
EXCEPTIONS
err_max_linewidth
=
err_format
=
err_conv_not_possible =
err_bad_otf
=
OTHERS
=

'PDF'
bin_file
bin_filesize
it_otfdata_m
it_lines_dummy
1
2
3
4
5.

DATA: it_solix TYPE solix_tab .


CALL METHOD cl_bcs_convert=>xstring_to_solix
EXPORTING
iv_xstring = bin_file
RECEIVING
et_solix = it_solix.
DATA: attachment_subject TYPE so_obj_des .
MESSAGE s000(oo) WITH 'attachment PDF hex' space INTO attachment_subject .
TRY.
CALL METHOD ob_document_bcs->add_attachment
EXPORTING
i_attachment_type
= 'pdf'
i_attachment_subject = attachment_subject
i_att_content_hex
= it_solix.
CATCH cx_document_bcs .
ENDTRY.
ENDFORM .
"mail_1_prep_4
*----------------------------------------------------------------------*
FORM mail_1_prep_5
CHANGING
ob_document_bcs TYPE REF TO cl_document_bcs .
DATA: bin_file TYPE string .
* For testing purpose a test file is created.
IF p_filf EQ abap_true .
OPEN DATASET p_file FOR OUTPUT IN BINARY MODE .
DO 1000 TIMES .

TRANSFER 'This is a test +++++++++++++++++++++++++++++++++++++++' TO p_fil


e .
TRANSFER cl_abap_char_utilities=>cr_lf TO p_file .
ENDDO .
CLOSE DATASET p_file .
ENDIF .
DATA mess TYPE string .
OPEN DATASET p_file FOR INPUT IN LEGACY BINARY MODE CODE PAGE '1800' MESSAGE m
ess.
break r_eitan .
CHECK sy-subrc EQ 0 .
READ DATASET p_file INTO bin_file .
CHECK sy-subrc EQ 0 .
DATA: it_solix TYPE solix_tab .
CALL METHOD cl_bcs_convert=>string_to_solix
EXPORTING
iv_string = bin_file
IMPORTING
et_solix = it_solix.
DATA: long_filename TYPE string .
DATA: pure_filename TYPE string .
DATA: pure_extension TYPE string .
long_filename = p_file .
PERFORM split_filename
USING
long_filename
CHANGING
pure_filename
pure_extension.
DATA: attachment_subject TYPE so_obj_des .
CONCATENATE pure_filename space INTO attachment_subject .
DATA: attachment_type TYPE so_obj_tp .
attachment_type = pure_extension .
TRY.
CALL METHOD ob_document_bcs->add_attachment
EXPORTING
i_attachment_type
= attachment_type
i_attachment_subject = attachment_subject
i_att_content_hex
= it_solix.
CATCH cx_document_bcs .
ENDTRY.

ENDFORM .
"mail_1_prep_5
*----------------------------------------------------------------------*
FORM split_filename
USING
long_filename
CHANGING
pure_filename
pure_extension .
DATA: it_fragments TYPE TABLE OF string .
DATA: lines TYPE i .
SPLIT long_filename AT '\' INTO TABLE it_fragments IN CHARACTER MODE .
lines = LINES( it_fragments ) .
CHECK lines GT 0 .
READ TABLE it_fragments INTO pure_filename INDEX lines .
SPLIT pure_filename AT '.' INTO TABLE it_fragments IN CHARACTER MODE .
lines = LINES( it_fragments ) .
CHECK lines GT 1 .
READ TABLE it_fragments INTO pure_extension INDEX lines .
ENDFORM .

"split_filename

You might also like