Текущее время: Чт, июн 19 2025, 12:09

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Мониторинг загрузки в SAP BW 3.5. с отсылкой на почту в формате HTML
СообщениеДобавлено: Чт, ноя 29 2012, 16:33 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, июл 03 2007, 10:26
Сообщения: 486
Откуда: Kazakhstan, Astana
Пол: Мужской
Hello, SAPфорум.RU.
Данная программа отсылает на почту статус загрузки в SAP BW в формате HTML.
Настройте группу получателей в * SOST, SO23, по умолчанию группа SAPBWTEAM.
Для проверки HTML файла, можно сохранять в локальный файл и просматривать C:\Data_load_stat.htm. Было сделано для отладки. Дело было давно, с каким-то браузером норма не отображалось :D в фоксе все было ок.
Запланируйте и вуаля.
Работает для SAP BW 3.5. (во всяком случае, говорят, что работает до сих пор :D )
Сейчас 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

_________________
"Great minds discuss ideas. Average minds discuss events. Small minds discuss people-Eleanor Roosevelt--Knowledge is to share, Keep it free, Keep sharing"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Мониторинг загрузки в SAP BW 3.5. с отсылкой на почту в формате HTML
СообщениеДобавлено: Пт, ноя 30 2012, 08:34 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Добавил ссылку в "Разработки участников форума", если вы не против

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Мониторинг загрузки в SAP BW 3.5. с отсылкой на почту в формате HTML
СообщениеДобавлено: Пт, ноя 30 2012, 09:54 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, июл 03 2007, 10:26
Сообщения: 486
Откуда: Kazakhstan, Astana
Пол: Мужской
Спасибо, ArmAnn.
Главное, чтобы было полезно Комьюнити и работало.

_________________
"Great minds discuss ideas. Average minds discuss events. Small minds discuss people-Eleanor Roosevelt--Knowledge is to share, Keep it free, Keep sharing"


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB