CLASS lcl_itab_to_html DEFINITION FINAL.
PUBLIC SECTION.
TYPES: BEGIN OF ty_fields,
field TYPE fieldname,
width TYPE char20,
text TYPE char80,
END OF ty_fields.
TYPES: ty_it_fields TYPE STANDARD TABLE OF ty_fields WITH DEFAULT KEY.
CLASS-METHODS:
convert_itab_to_html_table
IMPORTING
i_fields TYPE ty_it_fields
i_itab TYPE STANDARD TABLE
RETURNING VALUE(rv_html) TYPE html_table.
ENDCLASS.
CLASS lcl_itab_to_html IMPLEMENTATION.
METHOD convert_itab_to_html_table.
APPEND '<table style="width: 100%; background: #ffffff; word-wrap: break-word; table-layout: fixed; font-family: Courier; font-size: 12px;">' TO rv_html.
APPEND ' <thead>' TO rv_html.
APPEND ' <tr>' TO rv_html.
LOOP AT i_fields ASSIGNING FIELD-SYMBOL(<field>).
IF <field>-width IS INITIAL.
APPEND | <th style="background: #eeeeee;"> { <field>-text }</th>| TO rv_html.
ELSE.
APPEND | <th style="background: #eeeeee; width: { <field>-width };"> { <field>-text }</th>| TO rv_html.
ENDIF.
ENDLOOP.
APPEND ' </tr>' TO rv_html.
APPEND ' </thead>' TO rv_html.
APPEND ' <tbody>' TO rv_html.
FIELD-SYMBOLS: <value> TYPE any.
LOOP AT i_itab ASSIGNING FIELD-SYMBOL(<data_line>).
APPEND ' <tr>' TO rv_html.
LOOP AT i_fields ASSIGNING FIELD-SYMBOL(<field_b>).
ASSIGN COMPONENT <field_b>-field OF STRUCTURE <data_line> TO <value>.
IF <value> IS ASSIGNED.
APPEND | <td>{ <value> }</td>| TO rv_html.
ENDIF.
ENDLOOP.
APPEND ' </tr>' TO rv_html.
ENDLOOP.
APPEND ' </tbody>' TO rv_html.
APPEND '</table>' TO rv_html.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
* HTML-Viewer
DATA(o_html) = NEW cl_gui_html_viewer( parent = cl_gui_docking_container=>default_screen ).
DATA: it_mara TYPE STANDARD TABLE OF marav WITH DEFAULT KEY.
SELECT * FROM marav INTO TABLE @it_mara.
IF sy-subrc = 0.
* Felder für die Anzeige konfigurieren
DATA(it_fields) = VALUE lcl_itab_to_html=>ty_it_fields( ( text = 'Materialnummer'
field = 'MATNR'
width = '20%' )
( text = 'Kurztext'
field = 'MAKTX'
width = '20%' )
( text = 'Materialart'
field = 'MTART'
width = '20%' )
( text = 'Materialklasse'
field = 'MATKL'
width = '20%' )
( text = 'Mengeneinheit'
field = 'MEINS'
width = '10%' )
( text = 'Löschkennzeichen'
field = 'LVORM'
width = '10%' ) ).
* HTML aus den Quelldaten erzeugen
DATA(it_html) = lcl_itab_to_html=>convert_itab_to_html_table( i_fields = it_fields
i_itab = it_mara ).
* URL zu HTML holen
DATA: lv_url TYPE swk_url.
o_html->load_data( IMPORTING
assigned_url = lv_url
CHANGING
data_table = it_html ).
* HTML anzeigen
o_html->show_url( url = lv_url ).
* leere SAP-Toolbar ausblenden
cl_abap_list_layout=>suppress_toolbar( ).
* cl_gui_docking_container=>default_screen erzwingen
WRITE: space.
ENDIF.