Hello, SAPфорум.RU.
Данная программа отсылает на почту статус загрузки в SAP BW в формате HTML.
Настройте группу получателей в * SOST, SO23, по умолчанию группа SAPBWTEAM.
Для проверки HTML файла, можно сохранять в локальный файл и просматривать C:\Data_load_stat.htm. Было сделано для отладки. Дело было давно, с каким-то браузером норма не отображалось

в фоксе все было ок.
Запланируйте и вуаля.
Работает для SAP BW 3.5. (во всяком случае, говорят, что работает до сих пор

)
Сейчас SAP BW не занимаюсь, решил выложить сюда, может кому пригодится.
Code:
*&---------------------------------------------------------------------*
*& Report ZBW_DATA_LOAD_STAT_APPS_002A
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zbw_data_load_stat_apps_002a.
*&---------------------------------------------------------------------
*&*&--------------------------------------------------------------------
*&
*& ASTANA. 2011
*& BOLAT TAIMAGAMBETOV, SAP BW Consultant.
*& Ver. 0.3.
*&---------------------------------------------------------------------
* Standard-Includes:
* ------------------
* Icon:
INCLUDE <icon>.
TYPE-POOLS: rsatr.
*======================================================================
* ALV Grid
*======================================================================
TYPE-POOLS: slis.
DATA: i_layout TYPE slis_layout_alv.
DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA: report_id LIKE sy-repid.
*======================================================================
* UNKNOWN (OTHER STATUS)
CONSTANTS rsm3_c_unknown TYPE c VALUE '?'.
*======================================================================
* System Tables
*======================================================================
TABLES rsiccont.
TABLES rsseldone.
TABLES rsreqdone.
TABLES /bi0/srequid.
TABLES rsreqicods.
TABLES rsodsactreq.
TABLES rsdodsot.
* Spezialtyp für Tree-InfoSource
TYPES: rsm3_isource(31) TYPE c.
TYPES: rsm3_dsource(41) TYPE c.
DATA: l_s_request_attributes TYPE rsm3_s_rnrattr.
DATA: z_time LIKE rsreqdone-tuzeit.
DATA: zfilename LIKE rsseldone-filename. " File Name
DATA: g_t_sel_table LIKE STANDARD TABLE OF rsselect,
wa_g_s_sel_table LIKE LINE OF g_t_sel_table.
DATA: l_t_rnr TYPE rsrnr OCCURS 0.
DATA: l_s_rnr TYPE rsrnr.
DATA: l_tabix LIKE sy-tabix.
DATA: t_select TYPE rscedst OCCURS 0 WITH HEADER LINE..
DATA:
l_rnsidlast TYPE rsiccont-rnsidlast,
l_cube TYPE rsiccont-icube,
l_techok TYPE rsmdatastate-techok,
l_status TYPE rsodsactreq-status.
DATA l_dta_type TYPE rsatr_dta_object.
DATA: l_rsdmcounter TYPE rsdmstat-dmcounter,
l_dmcount TYPE rsdmdelta-dmcount.
*&---------------------------------------------------------------------
*& FOR HTML FORMAT
*&
*&---------------------------------------------------------------------
*-ALL related Declarations
DATA: t_header TYPE STANDARD TABLE OF w3head WITH HEADER LINE, "Header
t_fields TYPE STANDARD TABLE OF w3fields WITH HEADER LINE,
"Fields
t_html TYPE STANDARD TABLE OF w3html WITH HEADER LINE,
wa_header TYPE w3head,
w_head TYPE w3head,
it_fcat TYPE lvc_t_fcat WITH HEADER LINE.
DATA: wa_header_2 TYPE w3head.
*&---------------------------------------------------------------------
*& Data Load Status
*&
*&---------------------------------------------------------------------
* Liste aller Selektierten Requests
DATA: BEGIN OF g_s_mon_list,
infoarea TYPE rsinfoarea,
cube TYPE rsinfocube,
rnr TYPE rsrequnr,
date LIKE sy-datum,
time LIKE sy-uzeit, "stundengenau (180000, 190000, ...)
zeit LIKE sy-uzeit, "ganz genau (185616, ...)
is TYPE rsm3_isource,
ds TYPE rsm3_isource,
ip TYPE rslogdpid,
qs TYPE rsslogsys,
user LIKE sy-uname,
stat LIKE icon_green_light(3),
view TYPE rs_bool, "already seen
flw TYPE rs_bool, "follow-up neccessary
assi LIKE sy-msgno,
loc TYPE rs_error_location,
filename LIKE rsseldone-filename,
dta_type TYPE rsatr_dta_object, " InfoProvider Type
records LIKE rsreqdone-records,
totstat LIKE icon_green_light(3), "Total Status
book21(128) TYPE c, " Availability For reporting
dmstatus(1) TYPE c, " Data Mart Status
END OF g_s_mon_list,
g_t_mon_list LIKE g_s_mon_list OCCURS 0.
*FIELD-SYMBOLS: <fs> type rsatr_dta_object.
TYPES: BEGIN OF g_s_descr,
infoprov LIKE rsiccont-icube,
lgdescr TYPE rstxtlg,
END OF g_s_descr.
DATA: zrecords(10) TYPE n. " Records Counter
DATA: zidx(10) TYPE n.
DATA: totstatus LIKE rsreqdone-tstatus. " Total Status
DATA: i_tab_descr TYPE STANDARD TABLE OF g_s_descr,
wa_i_tab_descr LIKE LINE OF i_tab_descr.
*&---------------------------------------------------------------------
*&
*& S E L E C T I O N S C R E E N
*&---------------------------------------------------------------------
SELECT-OPTIONS:
s_icube FOR rsiccont-icube
DEFAULT 'ZBN_CHA'
OBLIGATORY
* NO INTERVALS
LOWER CASE.
SELECT-OPTIONS: s_datum FOR rsreqdone-datum
DEFAULT
* '20100920'
sy-datum
OBLIGATORY
* NO INTERVALS
LOWER CASE.
* SOST, SO23
PARAMETER : p_recp(50) TYPE c DEFAULT 'SAPBWTEAM'.
PARAMETER : p_comp(50) TYPE c DEFAULT ' H1'.
PARAMETER : p_cotech(50) TYPE c DEFAULT 'H2'.
PARAMETERS: p_send AS CHECKBOX. " Send To Email Or Save To Local Station.
*&---------------------------------------------------------------------
*&
*& S E L E C T I O N S C R E E N
*&---------------------------------------------------------------------
DATA: return LIKE bapiret2,
l_t_icubelist LIKE bapi6112l OCCURS 0 WITH HEADER LINE,
l_selinfocube LIKE bapi6112sl OCCURS 0 WITH HEADER LINE,
selodsobject LIKE bapi6116sl OCCURS 0 WITH HEADER LINE,
seltextlong LIKE bapi6100sl OCCURS 0,
l_t_odsobjectlist LIKE bapi6116l OCCURS 0 WITH HEADER LINE,
l_t_infoobjectlist LIKE bapi6108l OCCURS 0 WITH HEADER LINE,
l_t_rsdareat LIKE rsdareat OCCURS 0 WITH HEADER LINE.
DATA: ls_areat TYPE rsdareat.
LOOP AT s_icube.
l_selinfocube-sign = s_icube-sign.
l_selinfocube-option = s_icube-option.
l_selinfocube-infocubelow = s_icube-low.
l_selinfocube-infocubehigh = s_icube-high.
APPEND l_selinfocube.
selodsobject-sign = s_icube-sign.
selodsobject-option = s_icube-option.
selodsobject-odsobjectlow = s_icube-low.
selodsobject-odsobjecthigh = s_icube-high.
APPEND selodsobject.
ENDLOOP.
SORT l_selinfocube BY infocubelow.
SORT selodsobject.
DELETE ADJACENT DUPLICATES FROM selodsobject.
DELETE ADJACENT DUPLICATES FROM l_selinfocube.
CALL FUNCTION 'BAPI_ODSO_GETLIST'
EXPORTING
objvers = 'A'
IMPORTING
return = return
TABLES
selodsobject = selodsobject
* seltextlong = seltextlong
odsobjectlist = l_t_odsobjectlist.
CALL FUNCTION 'BAPI_CUBE_GETLIST'
EXPORTING
objvers = 'A'
IMPORTING
return = return
TABLES
selinfocube = l_selinfocube
* seltextlong = seltextlong
infocubelist = l_t_icubelist.
CALL FUNCTION 'BAPI_IOBJ_GETLIST'
EXPORTING
version = 'A'
IMPORTING
return = return
TABLES
selinfoobject = l_selinfocube
infoobjectlist = l_t_infoobjectlist.
*======================================================================
* Data Selection
*
*======================================================================
START-OF-SELECTION.
REFRESH t_select.
CLEAR: t_select.
t_select-fnam = 'DATUM'.
LOOP AT s_datum.
t_select-sign = s_datum-sign.
t_select-option = s_datum-option.
t_select-low = s_datum-low.
t_select-high = s_datum-high.
APPEND t_select.
ENDLOOP.
CLEAR : t_select.
t_select-fnam = 'INFOCUBE'.
LOOP AT s_icube.
t_select-sign = s_icube-sign.
t_select-option = s_icube-option.
t_select-low = s_icube-low.
t_select-high = s_icube-high.
APPEND t_select.
ENDLOOP.
* Selections --> Requests
CALL FUNCTION 'RSSM_MON_READ'
EXPORTING
language = sy-langu
TABLES
t_select = t_select
t_rnr = l_t_rnr
EXCEPTIONS
no_record_found = 1.
* Requests --> Properties
* Filling g_t_mon_list
PERFORM fill_rnr_list TABLES l_t_rnr.
* BREAK-POINT.
END-OF-SELECTION.
*======================================================================
* End Of Data Selection
*
*======================================================================
SORT g_t_mon_list BY cube date filename dta_type totstat.
LOOP AT g_t_mon_list INTO g_s_mon_list.
CALL FUNCTION 'RSAWB_MAINTAIN_DTA'
EXPORTING
i_method = rsatr_c_dta_get
i_dta = g_s_mon_list-cube
IMPORTING
e_type = l_dta_type.
g_s_mon_list-dta_type = l_dta_type.
CLEAR: l_cube, l_techok,l_rnsidlast.
CLEAR g_s_mon_list-book21.
CASE g_s_mon_list-dta_type.
WHEN 'I'.
* IF g_s_mon_list-dta_type = 'I'.
SELECT SINGLE rnsidlast icube INTO (l_rnsidlast, l_cube) FROM rsiccont
WHERE rnr = g_s_mon_list-rnr AND icube = g_s_mon_list-cube.
IF sy-subrc = 0.
SELECT SINGLE techok INTO l_techok FROM rsmdatastate
WHERE infocube = l_cube.
IF l_rnsidlast > l_techok.
g_s_mon_list-book21 = 'NO'.
ELSE.
g_s_mon_list-book21 = 'YES'.
ENDIF.
ELSE.
g_s_mon_list-book21 = 'NO_1'.
ENDIF.
** GET INFOAREA FOR ICUBE
READ TABLE l_t_icubelist WITH KEY infocube = g_s_mon_list-cube.
IF sy-subrc = 0.
g_s_mon_list-infoarea = l_t_icubelist-infoarea.
ENDIF.
WHEN 'O'.
* ELSEIF g_s_mon_list-dta_type = 'O'.
*======================================================================
* Get Availability For Reporting ODS
*======================================================================
SELECT SINGLE status INTO l_status FROM rsodsactreq
WHERE operation = 'A' AND status = 0 AND
request = g_s_mon_list-rnr AND odsobject = g_s_mon_list-cube.
IF sy-subrc = 0.
g_s_mon_list-book21 = 'YES'.
ELSE.
g_s_mon_list-book21 = 'NO'.
ENDIF.
** GET INFOAREA FOR DSO
READ TABLE l_t_odsobjectlist WITH KEY odsobject = g_s_mon_list-cube.
IF sy-subrc = 0.
g_s_mon_list-infoarea = l_t_odsobjectlist-infoarea.
ENDIF.
WHEN 'J'.
* READ TABLE l_t_infoobjectlist WITH KEY infoobject = g_s_mon_list-cube.
* IF sy-subrc = 0.
g_s_mon_list-infoarea = 'ZCHA'.
* ENDIF.
ENDCASE.
MODIFY g_t_mon_list FROM g_s_mon_list.
ENDLOOP.
SORT g_t_mon_list BY infoarea cube date filename dta_type totstat.
PERFORM build_html_cat.
PERFORM z_itab_to_html TABLES g_t_mon_list t_html.
t_html-line = '</table>'.
APPEND t_html.
CLEAR t_html.
IF p_send <> 'X'.
**-Download the HTML into frontend
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = 'C:\Data_load_stat.htm'
TABLES
data_tab = t_html
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ELSE.
* BREAK-POINT.
*&---------------------------------------------------------------------*
*& Form send_mail
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->I_SUBJECT text
* -->IT_MAILTEXT text
* -->I_ATT_FILENAME text
* -->IT_ATT_CONTENT text
* -->I_RECIPIENT text
*----------------------------------------------------------------------
DATA: subject(50) TYPE c, " Mail Subject
it_msg_txt TYPE bcsy_text, " Message
l_att_filename TYPE so_obj_des, " Attachment FileName
lv_mlrec TYPE so_obj_nam, " Recipient
wa_text TYPE soli.
* Mail Subject
IF g_t_mon_list IS INITIAL.
WRITE sy-datum DD/MM/YYYY TO wa_header-text.
CONCATENATE p_cotech 'Статус загрузки на '
wa_header-text
'Данные НЕ ЗАГРУЖЕНЫ'
INTO subject SEPARATED BY space.
ELSE.
WRITE sy-datum DD/MM/YYYY TO wa_header-text.
CONCATENATE p_cotech 'Статус загрузки на '
wa_header-text
INTO subject SEPARATED BY space.
ENDIF.
**Assign the group_id name to the parameter lv_mlrec
lv_mlrec = p_recp.
REFRESH it_msg_txt.
CLEAR wa_text.
* Message Text
* wa_text = wa_header-text.
* APPEND wa_text TO it_msg_txt.
wa_text = 'Информация о статусах загрузки плоских файлов в SAP BW'.
CONCATENATE wa_text 'на' wa_header-text INTO wa_text SEPARATED BY space.
APPEND wa_text TO it_msg_txt.
wa_text = 'Автоматическая загрузка данных осуществляется с XX.00 до XX.XX ежедневно.'.
APPEND wa_text TO it_msg_txt.
wa_text = 'Информация о загрузке в прикрепленном файле ("SAP BW КАЛЕНДАРНЫЙ_ДЕНЬ.HTM"). В наименований файла содержится дата (календарный день загрузки).'.
wa_text = 'ТОО " ".'.
APPEND wa_text TO it_msg_txt.
wa_text = 'Отдел "Консалтинг SAP BW".'.
APPEND wa_text TO it_msg_txt.
wa_text = 'Астана.'.
APPEND wa_text TO it_msg_txt.
wa_text = 'Контактные тел.: +7(7172) '.
APPEND wa_text TO it_msg_txt.
* File Name
* l_att_filename = 'Тема Файла'.
CONCATENATE 'SAP BW' wa_header-text INTO l_att_filename SEPARATED BY space.
* l_att_filename = wa_header-text.
PERFORM send_mail
USING subject
it_msg_txt
l_att_filename
t_html[]
lv_mlrec.
ENDIF.
*&---------------------------------------------------------------------*
*& Form FILL_RNR_LIST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_rnr_list TABLES p_t_rnr STRUCTURE rsrnr.
DATA l_time_string_s(2) TYPE c.
DATA l_time_string_l(6) TYPE c.
DATA l_s_monictab LIKE rsmonictab.
DATA l_t_monictab TYPE rssm_t_ictab.
DATA l_s_uicdone TYPE rsuicdone.
DATA l_t_uicdone TYPE rssm_t_uicdone.
DATA l_t_reqicods LIKE rsreqicods OCCURS 0.
DATA l_s_reqicods LIKE rsreqicods.
DATA l_dta_type TYPE rsatr_dta_object.
LOOP AT p_t_rnr.
* ---- RequestID ----
g_s_mon_list-rnr = p_t_rnr-rnr.
SELECT SINGLE * FROM rsseldone WHERE rnr = p_t_rnr-rnr.
*---- Get Request Attributes => FileName
* CALL FUNCTION 'RSSM_GET_REQUEST_ATTRIBUTES'
* EXPORTING
* i_request = g_s_mon_list-rnr
* IMPORTING
* e_s_request_attributes = l_s_request_attributes.
* g_s_mon_list-filename = l_s_request_attributes-filename.
CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' "
EXPORTING
full_name = rsseldone-filename
IMPORTING
stripped_name = g_s_mon_list-filename. "File name w/o path
* file_path =. "
* g_s_mon_list-filename = zfilename.
* ---- Time and Date ----
CALL FUNCTION 'RSSM_GET_TIME'
EXPORTING
i_datum_utc = rsseldone-seldate
i_uzeit_utc = rsseldone-seltime
IMPORTING
e_datum_loc = g_s_mon_list-date
e_uzeit_loc = g_s_mon_list-zeit.
l_time_string_s = g_s_mon_list-zeit.
CONCATENATE l_time_string_s '0000' INTO l_time_string_l.
IF l_time_string_l = '000000'.
l_time_string_l = '000001'.
ENDIF.
g_s_mon_list-time = l_time_string_l.
* ---- InfoSource ----
* CONCATENATE rsseldone-typ rsseldone-source INTO g_s_mon_list-is.
g_s_mon_list-is = rsseldone-source.
IF g_s_mon_list-is IS INITIAL.
g_s_mon_list-is = rsm3_c_unknown.
ENDIF.
* ---- DataSource ----
CONCATENATE rsseldone-rnrtyp rsseldone-oltpsource
INTO g_s_mon_list-ds.
IF g_s_mon_list-ds IS INITIAL.
g_s_mon_list-ds = rsm3_c_unknown.
ENDIF.
* ---- Logsys ----
g_s_mon_list-qs = rsseldone-logsys.
IF g_s_mon_list-qs IS INITIAL.
g_s_mon_list-qs = rsm3_c_unknown.
ENDIF.
* ---- User ----
g_s_mon_list-user = rsseldone-uname.
IF g_s_mon_list-user IS INITIAL.
g_s_mon_list-user = rsm3_c_unknown.
ENDIF.
* ---- InfoPackage ----
g_s_mon_list-ip = rsseldone-logdpid.
IF g_s_mon_list-ip IS INITIAL.
g_s_mon_list-ip = rsm3_c_unknown.
ENDIF.
* ---- Status ----
SELECT SINGLE * FROM rsreqdone WHERE rnr = p_t_rnr-rnr.
IF rsreqdone-qmstatus IS INITIAL.
g_s_mon_list-stat = rsreqdone-tstatus(3).
ELSE.
g_s_mon_list-stat = rsreqdone-qmstatus(3).
ENDIF.
IF g_s_mon_list-stat IS INITIAL.
g_s_mon_list-stat = rsm3_c_unknown.
ENDIF.
* ---- Already seen ----
g_s_mon_list-view = rsreqdone-viewed.
* ---- Follow-up action necessary? ----
* .... Error-Requests ....
CALL METHOD cl_rssm_error_handler=>display_error_requests
EXPORTING
i_request = p_t_rnr-rnr
EXCEPTIONS
no_children = 1.
g_s_mon_list-flw = rs_c_false.
IF g_s_mon_list-stat = icon_green_light(3) AND
( ( sy-subrc = 0 ) OR
* .... Only PSA ....
( rsseldone-ziel = '1' AND
rsseldone-init_simu = rs_c_false ) ).
g_s_mon_list-flw = rs_c_true.
ENDIF.
* .... ODS-Activation missing ....
SELECT * FROM rsreqicods
INTO TABLE l_t_reqicods
WHERE rnr = p_t_rnr-rnr
AND typ = 'I'.
SELECT * FROM rsmonictab INTO TABLE l_t_monictab
WHERE rnr = p_t_rnr-rnr
AND infocube <> ''.
LOOP AT l_t_monictab INTO l_s_monictab.
CALL FUNCTION 'RSAWB_MAINTAIN_DTA'
EXPORTING
i_method = rsatr_c_dta_get
i_dta = l_s_monictab-infocube
IMPORTING
e_type = l_dta_type.
IF l_dta_type = rsd_c_cubetype-ods_ic.
READ TABLE l_t_reqicods INTO l_s_reqicods
WITH KEY tabname = l_s_monictab-infocube.
IF l_s_reqicods-odssid IS INITIAL.
g_s_mon_list-flw = rs_c_true.
EXIT.
ENDIF.
ENDIF.
* g_s_mon_list-dta_type = l_dta_type.
ENDLOOP.
* ---- Assistant ----
g_s_mon_list-assi = rsreqdone-assistant.
* ---- Fehlerort ----
g_s_mon_list-loc = rsreqdone-location.
* Get Records
SELECT SINGLE * FROM rsreqdone WHERE rnr = p_t_rnr-rnr.
g_s_mon_list-records = rsreqdone-records.
* Total Status
IF g_s_mon_list-loc <> 0
OR g_s_mon_list-stat = '@0A'
OR g_s_mon_list-stat = '@09'
OR g_s_mon_list-stat = rsm3_c_unknown.
g_s_mon_list-totstat = '@0A'.
ELSE.
g_s_mon_list-totstat = '@08'.
ENDIF.
*OR g_s_mon_list-stat = '@09' OR g_s_mon_list-stat = '@08' OR rsm3_c_unknown.
* ---- InfoCubes ----
IF NOT l_t_reqicods[] IS INITIAL.
LOOP AT l_t_reqicods INTO l_s_reqicods.
g_s_mon_list-cube = l_s_reqicods-tabname.
IF g_s_mon_list-cube IS INITIAL.
g_s_mon_list-cube = rsm3_c_unknown.
ENDIF.
*==============================================================================
*==============================================================================
APPEND g_s_mon_list TO g_t_mon_list.
ENDLOOP.
ELSE.
g_s_mon_list-cube = rsm3_c_unknown.
APPEND g_s_mon_list TO g_t_mon_list.
ENDIF.
ENDLOOP.
ENDFORM. " FILL_RNR_LIST
**&---------------------------------------------------------------------*
*& Form BUILD_HTML_CAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM build_html_cat.
*&---------------------------------------------------------------------
*&
*& PERFORM HTML
*&---------------------------------------------------------------------
*Note 888518 - SBWP: Display of HTML documents is incorrect
*Note 873845 - HTML code in binary form cannot be read
IF p_send = 'X'.
CONCATENATE '<meta http-equiv="Content-Type"'
'content="text/html; charset=utf-8"> ' INTO t_html.
APPEND t_html.
CLEAR t_html.
ENDIF.
t_html-line = '<html>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<thead>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<tr>'.
APPEND t_html.
CLEAR t_html.
WRITE sy-datum DD/MM/YYYY TO wa_header-text.
CONCATENATE '<td><h1>Статус загрузки на: ' wa_header-text 'для' p_comp
'</h1></td>' INTO t_html-line SEPARATED BY space.
APPEND t_html.
CLEAR t_html.
CLEAR wa_header-text.
CLEAR wa_header_2-text.
WRITE s_datum-low DD/MM/YYYY TO wa_header-text.
WRITE s_datum-high DD/MM/YYYY TO wa_header_2-text.
IF s_datum-high IS NOT INITIAL.
CONCATENATE '<td><h2>Дата Загрузки с ' wa_header-text 'по' wa_header_2-text '</h2></td>' INTO t_html-line SEPARATED BY space.
APPEND t_html.
CLEAR t_html.
ELSE.
CONCATENATE '<td><h2>Дата Загрузки за' wa_header-text '</h2></td>' INTO t_html-line SEPARATED BY space.
APPEND t_html.
CLEAR t_html.
ENDIF.
t_html-line = '</tr>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '</thead>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<table border = "1">'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<tr>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<th bgcolor = "#C0C0C0">Инфопровайдер</th>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<th bgcolor = "#C0C0C0">Статус</th>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<tr>'.
APPEND t_html.
CLEAR t_html.
SORT l_selinfocube BY infocubelow.
DELETE ADJACENT DUPLICATES FROM l_selinfocube.
***=============> Short Table
LOOP AT l_selinfocube.
t_html-line = '<tr>'.
APPEND t_html.
CLEAR t_html.
READ TABLE g_t_mon_list INTO g_s_mon_list WITH KEY cube = l_selinfocube-infocubelow.
IF sy-subrc = 0.
* Table Column
CONCATENATE '<td>' l_selinfocube-infocubelow '</td>' INTO t_html.
APPEND t_html.
CLEAR t_html.
* Table Column
CONCATENATE '<td bgcolor = "#00FF00"> ДАННЫЕ ЗАГРУЖАЛИСЬ' '</td>' INTO t_html.
APPEND t_html.
CLEAR t_html.
ELSE.
* Table Column
CONCATENATE '<td>' l_selinfocube-infocubelow '</td>' INTO t_html.
APPEND t_html.
CLEAR t_html.
* Table Column
CONCATENATE '<td bgcolor = "#FF0000"> ДАННЫЕ НЕ ЗАГРУЖАЛИСЬ' '</td>' INTO t_html.
APPEND t_html.
CLEAR t_html.
ENDIF.
t_html-line = '</tr>'.
APPEND t_html.
CLEAR t_html.
ENDLOOP.
t_html-line = '</table'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<BR>'.
APPEND t_html.
CLEAR t_html.
**=============> Main Table
t_html-line = '<table border = "1">'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<tr>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<th bgcolor = "#C0C0C0">№</th>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<th bgcolor = "#C0C0C0">Инфопровайдер</th>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<th bgcolor = "#C0C0C0">Статус загрузки</th>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<th bgcolor = "#C0C0C0">Общий Статус </th>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<th bgcolor = "#C0C0C0">Имя файла</th>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<th bgcolor = "#C0C0C0">Кол-во записей</th>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<th bgcolor = "#C0C0C0">Дата загрузки</th>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<th bgcolor = "#C0C0C0">Источник</th>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<th bgcolor = "#C0C0C0">Код Ошибки</th>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<th bgcolor = "#C0C0C0">ID Запроса</th>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<th bgcolor = "#C0C0C0">Доступ для Отчетов</th>'.
APPEND t_html.
CLEAR t_html.
t_html-line = '<th bgcolor = "#C0C0C0">DM Статус</th>'. " Статус ИнфоВитрины
APPEND t_html.
CLEAR t_html.
t_html-line = '<th bgcolor = "#C0C0C0">Тип Объекта</th>'.
APPEND t_html.
CLEAR t_html.
* t_html-line = '<th bgcolor = "#C0C0C0">ID ODS Запроса Активации</th>'.
* APPEND t_html.
* CLEAR t_html.
* t_html-line = '<th bgcolor = "#C0C0C0">Общий Статус</th>'.
* APPEND t_html.
* CLEAR t_html.
t_html-line = '</tr>'.
APPEND t_html.
CLEAR t_html.
ENDFORM. "BUILD_HTML_CAT
*&---------------------------------------------------------------------*
*& Form Z_ITAB_TO_HTML
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->G_S_MON_LIST text
*----------------------------------------------------------------------*
FORM z_itab_to_html
TABLES l_t_mon_list STRUCTURE g_s_mon_list
l_t_html STRUCTURE w3html.
CLEAR wa_header-text.
LOOP AT l_t_mon_list.
l_dta_type = l_t_mon_list-dta_type.
AT NEW infoarea.
SELECT SINGLE * FROM rsdareat INTO ls_areat WHERE langu = sy-langu
AND infoarea = l_t_mon_list-infoarea
AND objvers = 'A'.
IF sy-subrc = 0.
wa_header-text = ls_areat-txtlg.
ELSE.
IF l_dta_type = 'J'.
wa_header-text = 'Master Data/Texts'.
ENDIF.
ENDIF.
CONCATENATE '<tr><TR bgcolor= "#6495ED" <th colspan = "13">'
l_t_mon_list-infoarea ':' wa_header-text '</th></tr>' INTO t_html SEPARATED BY space.
APPEND t_html.
CLEAR t_html.
CLEAR wa_header-text.
ENDAT.
CLEAR wa_header-text.
* wa_header-text = l_t_mon_list-dta_type.
AT NEW cube.
CASE l_dta_type.
WHEN 'O'.
READ TABLE l_t_odsobjectlist
WITH KEY odsobject = l_t_mon_list-cube.
IF sy-subrc = 0.
wa_header-text = l_t_odsobjectlist-textlong.
ENDIF.
**===> INFOCUBE
WHEN 'I'.
READ TABLE l_t_icubelist
WITH KEY infocube = l_t_mon_list-cube.
IF sy-subrc = 0.
wa_header-text = l_t_icubelist-textlong.
ENDIF.
**===> INFOOBJECT
WHEN 'J'.
l_cube = l_t_mon_list-cube.
REPLACE ALL OCCURRENCES OF '___T' IN l_cube WITH space.
READ TABLE l_t_infoobjectlist
WITH KEY infoobject = l_cube.
IF sy-subrc = 0.
wa_header-text = l_t_infoobjectlist-textlong.
ENDIF.
ENDCASE.
CONCATENATE '<tr><TR bgcolor= "LightCyan" <th colspan = "13">'
l_t_mon_list-cube ':' wa_header-text
'</th></tr>' INTO t_html SEPARATED BY space.
APPEND t_html.
CLEAR t_html.
zidx = 0.
ENDAT.
l_t_html-line = '<tr>'. " Table Row
APPEND l_t_html.
CLEAR l_t_html.
* Table Column
zidx = zidx + 1.
SHIFT zidx LEFT DELETING LEADING '0'.
CONCATENATE '<td>' zidx '</td>' INTO t_html.
APPEND t_html.
CLEAR t_html.
* Table Column
* CONCATENATE '<td>' l_t_mon_list-rnr '</td>' INTO t_html.
* APPEND l_t_html.
* CLEAR l_t_html.
* Table Column
CONCATENATE '<td>' l_t_mon_list-cube '</td>' INTO t_html.
APPEND l_t_html.
CLEAR l_t_html.
CASE l_t_mon_list-stat.
WHEN '@08'.
CONCATENATE
'<td>'
'<TABLE border=1>'
'<TABLE align= "center">'
'<TR bgcolor= "SpringGreen" >' '<TD>OK</TR>'
'</table>'
'</td>'
INTO l_t_html.
APPEND l_t_html.
CLEAR l_t_html.
WHEN '@09'.
CONCATENATE
'<td>'
'<TABLE border=1>'
'<TABLE align= "center">'
'<TR bgcolor= "yellow" >' '<TD>RUN</TR>'
'</table>'
'</td>'
INTO l_t_html.
APPEND l_t_html.
CLEAR l_t_html.
WHEN '@0A'.
CONCATENATE
'<td>'
'<TABLE border=1>'
'<TABLE align= "center">'
'<TR bgcolor= "red" >' '<TD>ERROR</TR>'
'</table>'
'</td>'
INTO l_t_html.
APPEND l_t_html.
CLEAR l_t_html.
WHEN OTHERS.
ENDCASE.
CASE l_t_mon_list-totstat.
WHEN '@08'.
CONCATENATE
'<td>'
'<TABLE border=1>'
'<TABLE align= "center">'
'<TR bgcolor= "SpringGreen" >' '<TD>OK</TR>'
'</table>'
'</td>'
INTO l_t_html.
APPEND l_t_html.
CLEAR l_t_html.
WHEN '@0A'.
CONCATENATE
'<td>'
'<TABLE border=1>'
'<TABLE align= "center">'
'<TR bgcolor= "red" >' '<TD>ERROR</TR>'
'</table>'
'</td>'
INTO l_t_html.
APPEND l_t_html.
CLEAR l_t_html.
WHEN OTHERS.
ENDCASE.
** Table Column
* CONCATENATE '<td>' l_t_mon_list-stat '</td>' INTO t_html.
* APPEND l_t_html.
* CLEAR l_t_html.
* Table Column
CONCATENATE '<td>' l_t_mon_list-filename '</td>' INTO t_html.
APPEND l_t_html.
CLEAR l_t_html.
* Table Column
zrecords = l_t_mon_list-records.
SHIFT zrecords LEFT DELETING LEADING '0'.
CONCATENATE '<td>' zrecords '</td>' INTO l_t_html.
APPEND l_t_html.
CLEAR l_t_html.
* Table Column
WRITE l_t_mon_list-date DD/MM/YYYY TO wa_header-text.
CONCATENATE '<td>' wa_header-text '</td>' INTO t_html.
APPEND l_t_html.
CLEAR l_t_html.
CONCATENATE '<td>' l_t_mon_list-is '</td>' INTO t_html.
APPEND l_t_html.
CLEAR l_t_html.
CONCATENATE '<td>' l_t_mon_list-loc '</td>' INTO t_html.
APPEND l_t_html.
CLEAR l_t_html.
CONCATENATE '<td>' l_t_mon_list-rnr '</td>' INTO t_html.
APPEND l_t_html.
CLEAR l_t_html.
CONCATENATE '<td>' l_t_mon_list-book21 '</td>' INTO t_html.
APPEND l_t_html.
CLEAR l_t_html.
CONCATENATE '<td>' l_t_mon_list-dmstatus '</td>' INTO t_html.
APPEND l_t_html.
CLEAR l_t_html.
CONCATENATE '<td>' l_t_mon_list-dta_type '</td>' INTO t_html.
APPEND l_t_html.
CLEAR l_t_html.
ENDLOOP.
ENDFORM. "Z_ITAB_TO_HTML
*&---------------------------------------------------------------------*
*& Form send_mail
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->I_SUBJECT text
* -->IT_MAILTEXT text
* -->I_ATT_FILENAME text
* -->IT_ATT_CONTENT text
* -->I_RECIPIENT text
*----------------------------------------------------------------------*
FORM send_mail
USING i_subject TYPE so_obj_des
it_mailtext TYPE bcsy_text
i_att_filename TYPE so_obj_des
it_att_content TYPE bcsy_text
i_recipient TYPE so_obj_nam.
DATA: send_request TYPE REF TO cl_bcs,
document TYPE REF TO cl_document_bcs,
sender TYPE REF TO cl_sapuser_bcs,
recipient TYPE REF TO if_recipient_bcs,
bcs_exception TYPE REF TO cx_bcs.
DATA: sent_to_all TYPE os_boolean.
CONSTANTS: ca_x TYPE c VALUE 'X',
ca_raw(3) TYPE c VALUE 'RAW',
ca_htm(3) TYPE c VALUE 'HTM'.
TRY.
* Create persistent send request
send_request = cl_bcs=>create_persistent( ).
* Create document
document = cl_document_bcs=>create_document(
i_type = ca_raw
i_text = it_mailtext
i_subject = i_subject ).
* Create Attachment
IF it_att_content IS NOT INITIAL.
CALL METHOD document->add_attachment
EXPORTING
i_attachment_type = ca_htm
i_att_content_text = it_att_content
i_attachment_subject = i_att_filename.
ENDIF.
* Add Document to Send Request
CALL METHOD send_request->set_document( document ).
* Get Sender Object
sender = cl_sapuser_bcs=>create( sy-uname ).
* Add Sender
CALL METHOD send_request->set_sender
EXPORTING
i_sender = sender.
*Create Recipient
recipient = cl_distributionlist_bcs=>getu_persistent(
i_dliname = i_recipient
i_private = space ).
* Add Recepient to Send Request
CALL METHOD send_request->add_recipient
EXPORTING
i_recipient = recipient
i_express = ca_x.
* Send Document
CALL METHOD send_request->send(
EXPORTING
i_with_error_screen = ca_x
RECEIVING
result = sent_to_all ).
COMMIT WORK.
* Catch Exeptions
CATCH cx_bcs INTO bcs_exception.
WRITE: 'Email Sending Error!'.
WRITE: 'Error No', bcs_exception->error_type.
EXIT.
ENDTRY.
ENDFORM. "SEND_MAIL
*&---------------------------------------------------------------------*
*& Form GET_INFORPOV_DESC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->INFOPROV text
* -->LGDESCR text
*----------------------------------------------------------------------*
FORM get_inforpov_desc
USING infoprov LIKE rsiccont-icube
CHANGING lgdescr TYPE rstxtlg.
ENDFORM. "GET_INFORPOV_DESC