0% found this document useful (0 votes)
116 views

Report To Send Automtic Mail

This document defines classes and methods for generating HTML and CSV strings from table data. It includes a CL_STRING class with methods to append data fragments to HTML and CSV strings. There are also methods to edit values, get RGB colors, and send emails with attached documents generated from table data. Selection screen parameters and events are defined to filter and select the table data.

Uploaded by

Vky Veera
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
116 views

Report To Send Automtic Mail

This document defines classes and methods for generating HTML and CSV strings from table data. It includes a CL_STRING class with methods to append data fragments to HTML and CSV strings. There are also methods to edit values, get RGB colors, and send emails with attached documents generated from table data. Selection screen parameters and events are defined to filter and select the table data.

Uploaded by

Vky Veera
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 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