Текущее время: Вт, июн 17 2025, 18:22

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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