|
<< Click to Display Table of Contents >> Navigation: All About ABAP Technique > Indonesia > ABAP Report > Html > Report (302) |
Objektif |
|
Kode Transaksi |
|
Tabel |
MARA - General Material Data MAKT - Material Descriptions T006A - Assign Internal to Language-Dependent Unit |
Support |
1.Buka SE38
2.Salin Program "YPRACTICE_301" menjadi "YPRACTICE_302"
3.Seleksi Semua Objek

4.Ubah Program "YPRACTICE_302"
5.Buka Goto > Attributes, dan ubah "Title" dengan "302 - Display List of Master Material"
6.Modifikasi Deklarasi Report
Sebelum
REPORT ypractice_301.
Setelah
REPORT ypractice_302.
7.Klik "
"
8.Tambahkan Program Include Baru

9.Isikan include dengan "YPRACTICE_302_CLASSES" dan kemudian klik "
"

10.Klik "
" untuk membuat include baru

11.Simpan ke package yang sama dengan "YPRACTICE_302" dan kemudian klik "
" untuk memasukkan include ke program utama.
12.Buat variabel global pada "YPRACTICE_302_CLASSES"
*----------------------------------------------------------------------*
*GLOBAL VARIABLE DECRALATION
*----------------------------------------------------------------------*
DATA : gv_html_event_tab TYPE cntl_simple_events,
gv_html_event TYPE cntl_simple_event,
gv_repid LIKE sy-repid,
gv_frame(255),
gv_action(256),
gv_getdata(2048),
gv_postdataline(1024),
gi_postdata_tab TYPE cnht_post_data_tab,
gi_query_table TYPE TABLE OF w3query WITH HEADER LINE.
13.Buat definisi Klass pada "YPRACTICE_302_CLASSES"
*---------------------------------------------------------------------*
* CLASS cl_html_event_handler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS cl_html_event_handler DEFINITION.
PUBLIC SECTION.
* Event yg aktif
METHODS: on_sapevent
FOR EVENT sapevent OF cl_gui_html_viewer
IMPORTING action frame getdata postdata query_table.
ENDCLASS. "cl_html_event_handler DEFINITION
Data: gv_evt_receiver TYPE REF TO cl_html_event_handler.
14.Buat Implementasi Kelas pada "YPRACTICE_302_CLASSES"
*---------------------------------------------------------------------*
* CLASS cl_html_event_handler IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS cl_html_event_handler IMPLEMENTATION.
* Prsedur Event
METHOD on_sapevent.
CLEAR gv_action.
CLEAR gv_frame.
CLEAR gv_getdata.
CLEAR gv_postdataline.
gv_action = action.
gv_frame = frame.
gv_getdata = getdata.
gi_postdata_tab = postdata.
IF NOT gi_postdata_tab IS INITIAL.
READ TABLE gi_postdata_tab INDEX 1 INTO gv_postdataline.
ENDIF.
gi_query_table[] = query_table[].
CASE action.
* Aksi "BUKA HALAMAN" Ketika menekan tombol di Halaman HTML
WHEN 'SUBMIT_PAGE_NO'.
PERFORM fm_display_data.
WHEN OTHERS.
ENDCASE.
ENDMETHOD. "on_sapevent
ENDCLASS. "cl_html_event_handler IMPLEMENTATION
15.Pindahkan include "" diatas "Input Screen/Selection"
...
concatenate &1 &2 &3 into gi_html_code-line_code.
append gi_html_code.
END-OF-DEFINITION.
*----------------------------------------------------------------------*
*INCLUDE PROGRAM
*----------------------------------------------------------------------*
*Anda dapat menaruh Program include pada halaman di bawah
INCLUDE ypractice_302_classes.
*----------------------------------------------------------------------*
*Input Screen/Selection
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK groupbox1 WITH FRAME TITLE text_101. "Declare Group Box 1
...
16.Modifikasi "Input Screen/Selection" dan tambahkan parameter baru
Sebelum
...
SELECTION-SCREEN BEGIN OF BLOCK groupbox2 WITH FRAME TITLE text_201. "Declare Group Box 2
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(18) text_202 FOR FIELD p_fname.
PARAMETERS p_fname LIKE rlgrap-filename OBLIGATORY DEFAULT 'C:\abap_report_01.html'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK groupbox2.
...
Setelah
...
SELECTION-SCREEN BEGIN OF BLOCK groupbox2 WITH FRAME TITLE text_201. "Declare Group Box 2
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(18) text_202 FOR FIELD p_fname.
PARAMETERS p_fname LIKE rlgrap-filename OBLIGATORY DEFAULT 'C:\abap_report_01.html'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(18) text_203 FOR FIELD p_mline .
PARAMETERS p_mline TYPE n DEFAULT 20 LENGTH 4.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK groupbox2. "End Group Box 2
...
17.Tambahkan teks pada "INITIALIZATION"
text_203 = 'Max. Line per Page'.
18.Buat Subroutine Baru "fm_create_paging_menu"
*&--------------------------------------------------------------------*
*& Form fm_create_paging_menu
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->FV_TOTAL_PAtext
* -->FV_ACTIVE_PtextNO
*---------------------------------------------------------------------*
FORM fm_create_paging_menu USING fv_total_page fv_active_page_no.
DATA : lv_counter TYPE n LENGTH 4,
lv_item(256).
lv_counter = 0.
write_code1 ' <form name="form1" method="post" action="SAPEVENT:SUBMIT_PAGE_NO">'.
write_code1 ' <tr colspan="6" class="style2">'.
write_code1 ' <td>Page : '.
write_code1 ' <select name="PAGE_NO" id="PAGE_NO">'.
WHILE fv_total_page > lv_counter.
lv_counter = lv_counter + 1.
IF lv_counter = fv_active_page_no.
CONCATENATE '<option value="' lv_counter '" selected>' lv_counter '</option>' INTO lv_item.
ELSE.
CONCATENATE '<option value="' lv_counter '" >' lv_counter '</option>' INTO lv_item.
ENDIF.
write_code1 lv_item.
ENDWHILE.
write_code3 ' </select> / ' fv_total_page ' '.
write_code1 ' <input name="Open_Submit" type="submit" id="Open_Submit" value="Open"></td>'.
write_code1 ' </tr>'.
write_code1 ' </form>'.
ENDFORM. "fm_create_paging_menu
19.Modifikasi subroutine "fm_display_data"
Sebelum
*&--------------------------------------------------------------------*
*& Form fm_display_data
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM fm_display_data.
REFRESH gi_html_code.
PERFORM fm_create_css.
write_code1 '<body>'.
write_code1 '<table width="100%" border="0" cellspacing="2" cellpadding="0">'.
* Membuat Teks Header
write_code1 ' <tr bgcolor="#999999" class="styleHeader">'.
write_code1 ' <td>Mat. Group</td>'.
write_code1 ' <td>Mat. No.</td>'.
write_code1 ' <td>Description</td>'.
write_code1 ' <td>Old Mat. No.</td>'.
write_code1 ' <td>Base Unit of Measure</td>'.
write_code1 ' <td>Measure</td>'.
write_code1 ' </tr>'.
* Menampilkan Data Ke layar
LOOP AT gi_header.
write_code1 ' <tr bgcolor="#EBEBEB">'.
write_code3 ' <td class="style1">' gi_header-matkl '</td>'.
write_code3 ' <td class="style1">' gi_header-matnr '</td>'.
write_code3 ' <td class="style2">' gi_header-maktx '</td>'.
write_code3 ' <td class="style2">' gi_header-bismt '</td>'.
write_code3 ' <td class="style1">' gi_header-meins '</td>'.
write_code3 ' <td class="style2">' gi_header-mseht '</td>'.
write_code1 ' </tr>'.
ENDLOOP.
* Akhir dari Baris
write_code1 '</table>'.
write_code1 '</body>'.
PERFORM fm_create_html_file TABLES gi_html_code USING p_fname.
PERFORM fm_load_html USING p_fname.
CALL SCREEN 2000.
ENDFORM. "fm_display_data
Setelah
*&--------------------------------------------------------------------*
*& Form fm_display_data
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM fm_display_data.
DATA : lv_active_page_no TYPE n LENGTH 4,
lv_limit_top TYPE i,
lv_limit_bottom TYPE i,
lv_total_page LIKE lv_active_page_no,
lv_remainder LIKE lv_active_page_no.
* Menghitung Total Halaman
lv_total_page = ( LINES( gi_header ) DIV p_mline ).
lv_remainder = LINES( gi_header ) MOD p_mline.
IF lv_remainder > 0.
lv_total_page = lv_total_page+1.
ENDIF.
* Memnghitung Batas Halaman
IF LINES( gi_query_table ) > 0 AND gv_action = 'SUBMIT_PAGE_NO'.
READ TABLE gi_query_table WITH KEY name = 'PAGE_NO'.
IF sy-subrc = 0.
lv_active_page_no = gi_query_table-value.
lv_limit_top = lv_active_page_no * p_mline.
ENDIF.
ELSE.
lv_active_page_no = 1.
lv_limit_top = 1.
ENDIF.
lv_limit_bottom = lv_limit_top + p_mline.
REFRESH gi_html_code.
PERFORM fm_create_css.
write_code1 '<body>'.
write_code1 '<table width="100%" border="0" cellspacing="2" cellpadding="0">'.
PERFORM fm_create_paging_menu USING lv_total_page lv_active_page_no.
* Membuat Teks Header
write_code1 ' <tr bgcolor="#999999" class="styleHeader">'.
write_code1 ' <td>Mat. Group</td>'.
write_code1 ' <td>Mat. No.</td>'.
write_code1 ' <td>Description</td>'.
write_code1 ' <td>Old Mat. No.</td>'.
write_code1 ' <td>Base Unit of Measure</td>'.
write_code1 ' <td>Measure</td>'.
write_code1 ' </tr>'.
* Menampilkan Data Ke layar
LOOP AT gi_header FROM lv_limit_top TO lv_limit_bottom.
write_code1 ' <tr bgcolor="#EBEBEB">'.
write_code3 ' <td class="style1">' gi_header-matkl '</td>'.
write_code3 ' <td class="style1">' gi_header-matnr '</td>'.
write_code3 ' <td class="style2">' gi_header-maktx '</td>'.
write_code3 ' <td class="style2">' gi_header-bismt '</td>'.
write_code3 ' <td class="style1">' gi_header-meins '</td>'.
write_code3 ' <td class="style2">' gi_header-mseht '</td>'.
write_code1 ' </tr>'.
ENDLOOP.
* Akhir Dari Baris Line
write_code1 ' <td bgcolor="#999999" class="styleHeader" colspan="6"> </td>'.
PERFORM fm_create_paging_menu USING lv_total_page lv_active_page_no.
write_code1 '</table>'.
write_code1 '</body>'.
PERFORM fm_create_html_file TABLES gi_html_code USING p_fname.
PERFORM fm_load_html USING p_fname.
CALL SCREEN 2000.
ENDFORM. "fm_display_data
20.Modifikasi subroutine "fm_load_html"
Sebelum
*&--------------------------------------------------------------------*
*& Form fm_load_html
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->URL text
*---------------------------------------------------------------------*
FORM fm_load_html USING fv_url.
CALL METHOD cc_report_display->show_url
EXPORTING
url = fv_url.
ENDFORM. "fm_load_html
Setelah
*&--------------------------------------------------------------------*
*& Form fm_load_html
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->URL text
*---------------------------------------------------------------------*
FORM fm_load_html USING fv_url.
TRY.
CALL METHOD cc_report_display->show_url
EXPORTING
url = fv_url.
CATCH cx_sy_ref_is_initial.
LEAVE TO SCREEN 0.
ENDTRY.
ENDFORM. "fm_load_html
21.Modifikasi modul "status_2000_OUTPUT"
Sebelum
*&---------------------------------------------------------------------*
*& Module STATUS_2000 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_2000 OUTPUT.
SET PF-STATUS 'ST_2000'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_2000 OUTPUT
Setelah
*&---------------------------------------------------------------------*
*& Module STATUS_2000 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_2000 OUTPUT.
SET PF-STATUS 'ST_2000'.
* SET TITLEBAR 'xxx'.
* Meregrister Event
IF NOT cc_report_display IS INITIAL.
gv_html_event-eventid = cc_report_display->m_id_sapevent.
gv_html_event-appl_event = 'x'.
APPEND gv_html_event TO gv_html_event_tab.
CALL METHOD cc_report_display->set_registered_events
EXPORTING
events = gv_html_event_tab.
CREATE OBJECT gv_evt_receiver.
SET HANDLER gv_evt_receiver->on_sapevent
FOR cc_report_display.
ELSE.
LEAVE TO SCREEN 0.
ENDIF.
ENDMODULE. " STATUS_2000 OUTPUT
22.Modifikasi modul "user_command_2000"
Sebelum
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_2000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_2000 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN OTHERS.
ENDCASE.
CLEAR ok_code.
ENDMODULE. " USER_COMMAND_2000 INPUT
Setelah
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_2000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_2000 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'BACK'.
REFRESH gi_query_table.
IF NOT cc_report_display IS INITIAL.
CALL METHOD cc_report_display->free.
FREE cc_report_display.
ENDIF.
LEAVE TO SCREEN 0.
WHEN OTHERS.
CALL METHOD cl_gui_cfw=>dispatch.
ENDCASE.
CLEAR ok_code.
ENDMODULE. " USER_COMMAND_2000 INPUT
23.Simpan dan Aktivasi Program
24.Seleksi 4 Objek seperti pada gambar dibawah

25.Klik "
" untuk mengaktifkan semua objek
26.Tes dan Jalankan Program
28.Selesai
▪Seleksi Input

▪Output
