Professional Documents
Culture Documents
Report To Send Automtic Mail
Report To Send Automtic Mail
Report To Send Automtic Mail
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 ) .
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
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
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[] .
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
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 .
*
*
*
*
*
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 ).
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">' .
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' .
=
=
=
=
st_thead-tdid
st_thead-tdspras
st_thead-tdname
st_thead-tdobject
= st_thead
= it_lines
=
=
=
=
=
=
=
=
1
2
3
4
5
6
7
8.
= 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.
'PDF'
bin_file
bin_filesize
it_otfdata_m
it_lines_dummy
1
2
3
4
5.
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