Sei sulla pagina 1di 8

*&---------------------------------------------------------------------*

*& Report GRAPHICS_GUI_CE_DEMO


*
*&---------------------------------------------------------------------*
*& Demo report for ChartEngine-Control (using special OCX features)
*
*&---------------------------------------------------------------------*
report

graphics_gui_ce_demo.

* global data
data:
data:
data:
data:
data:
data:

g_ce_container
g_ce_viewer
g_ixml
g_ixml_sf
g_design_mode
g_value_change

data: g_save_okcode

type
type
type
type
type
type

ref
ref
ref
ref
c.
c.

to
to
to
to

cl_gui_custom_container.
cl_gui_chart_engine.
if_ixml.
if_ixml_stream_factory.

like sy-ucomm.

* dynpro data
data: okcode

like sy-ucomm.

* event handler
class lcl_ce_viewer_eh definition.
public section.
methods on_click for event click of cl_gui_chart_engine
importing
element series point.
methods on_value_change for event value_change of
cl_gui_chart_engine
importing
series point value.
methods on_property_change for event property_change of
cl_gui_chart_engine
importing
element name value.
endclass.
data: g_ce_viewer_eh type ref to lcl_ce_viewer_eh.
* entry point
start-of-selection.
* create global objects
g_ixml = cl_ixml=>create( ).
g_ixml_sf = g_ixml->create_stream_factory( ).
call screen '100'.
* ENDREPORT

GRAPHICS_GUI_CE_DEMO.

*&---------------------------------------------------------------------*
*&
Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
module status_0100 output.

data: l_ixml_data_doc
l_ixml_custom_doc
l_ostream
l_xstr

type
type
type
type

ref to if_ixml_document,
ref to if_ixml_document,
ref to if_ixml_ostream,
xstring.

set pf-status '100'.


if g_ce_container is initial.
create object g_ce_container
exporting
container_name = 'CONTAINER'.
create object g_ce_viewer
exporting
parent = g_ce_container.
create object g_ce_viewer_eh.
set handler g_ce_viewer_eh->on_click for g_ce_viewer.
set handler g_ce_viewer_eh->on_value_change for g_ce_viewer.
set handler g_ce_viewer_eh->on_property_change for g_ce_viewer.
perform create_data_demo using l_ixml_data_doc.
l_ostream = g_ixml_sf->create_ostream_xstring( l_xstr ).
call method l_ixml_data_doc->render exporting ostream = l_ostream.
g_ce_viewer->set_data( xdata = l_xstr ).
clear l_xstr.
perform create_custom_demo using l_ixml_custom_doc.
l_ostream = g_ixml_sf->create_ostream_xstring( l_xstr ).
call method l_ixml_custom_doc->render exporting ostream = l_ostream.
g_ce_viewer->set_customizing( xdata = l_xstr ).
endif.
call method g_ce_viewer->render.
endmodule.

" STATUS_0100

OUTPUT

*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
module user_command_0100 input.
g_save_okcode = okcode.
clear okcode.
case g_save_okcode.
when 'DESIGN'.
perform toggle_design_mode.
when 'VALUE'.
perform toggle_value_change.
when 'SAVE'.
perform save_customizing.
when 'PRINT'.
perform print.
when 'EXIT'.
leave program.

when 'BACK'.
leave program.
endcase.
endmodule.

" USER_COMMAND_0100

INPUT

*&---------------------------------------------------------------------*
*&
IMPLEMENTATION
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
class cl_abap_char_utilities definition load.

*&---------------------------------------------------------------------*
*&
Form create_data_demo
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
form create_data_demo using p_ixml_doc type ref to if_ixml_document.
data: l_simplechartdata
l_categories
l_series
l_element
l_encoding

type
type
type
type
type

ref
ref
ref
ref
ref

to
to
to
to
to

if_ixml_element,
if_ixml_element,
if_ixml_element,
if_ixml_element,
if_ixml_encoding.

p_ixml_doc = g_ixml->create_document( ).
l_encoding = g_ixml->create_encoding(
byte_order = if_ixml_encoding=>co_little_endian
character_set = 'utf-8' ).
p_ixml_doc->set_encoding( l_encoding ).
l_simplechartdata = p_ixml_doc->create_simple_element(
name = 'SimpleChartData' parent = p_ixml_doc ).
l_categories = p_ixml_doc->create_simple_element(
name = 'Categories' parent = l_simplechartdata ).
l_element = p_ixml_doc->create_simple_element(
name = 'C' parent = l_categories ).
l_element->if_ixml_node~set_value( '1st quarter'
l_element = p_ixml_doc->create_simple_element(
name = 'C' parent = l_categories ).
l_element->if_ixml_node~set_value( '2nd quarter'
l_element = p_ixml_doc->create_simple_element(
name = 'C' parent = l_categories ).
l_element->if_ixml_node~set_value( '3rd quarter'
l_element = p_ixml_doc->create_simple_element(
name = 'C' parent = l_categories ).
l_element->if_ixml_node~set_value( '4th quarter'

).

).

).

).

l_series = p_ixml_doc->create_simple_element(
name = 'Series' parent = l_simplechartdata ).
l_series->set_attribute( name = 'label' value = 'Coffee' ).
l_element = p_ixml_doc->create_simple_element(
name = 'S' parent = l_series ).
l_element->if_ixml_node~set_value( '94' ).
l_element = p_ixml_doc->create_simple_element(

name = 'S' parent = l_series ).


l_element->if_ixml_node~set_value( '110' ).
l_element = p_ixml_doc->create_simple_element(
name = 'S' parent = l_series ).
l_element->if_ixml_node~set_value( '139' ).
l_element = p_ixml_doc->create_simple_element(
name = 'S' parent = l_series ).
l_element->if_ixml_node~set_value( '192' ).
l_series = p_ixml_doc->create_simple_element(
name = 'Series' parent = l_simplechartdata ).
l_series->set_attribute( name = 'label' value = 'Espresso' ).
l_element = p_ixml_doc->create_simple_element(
name = 'S' parent = l_series ).
l_element->if_ixml_node~set_value( '35' ).
l_element = p_ixml_doc->create_simple_element(
name = 'S' parent = l_series ).
l_element->if_ixml_node~set_value( '39' ).
l_element = p_ixml_doc->create_simple_element(
name = 'S' parent = l_series ).
l_element->if_ixml_node~set_value( '38' ).
l_element = p_ixml_doc->create_simple_element(
name = 'S' parent = l_series ).
l_element->if_ixml_node~set_value( '59' ).
endform.
" create_data_demo
*&---------------------------------------------------------------------*
*&
Form create_custom_demo
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
form create_custom_demo using p_ixml_doc type ref to if_ixml_document.
data: l_root
l_globalsettings
l_default
l_elements
l_chartelements
l_title
l_element
l_encoding

type ref to
type ref to
type ref to
type ref to
type ref to
type ref to
type ref
type ref

if_ixml_element,
if_ixml_element,
if_ixml_element,
if_ixml_element,
if_ixml_element,
if_ixml_element,
to if_ixml_element,
to if_ixml_encoding.

p_ixml_doc = g_ixml->create_document( ).
l_encoding = g_ixml->create_encoding(
byte_order = if_ixml_encoding=>co_little_endian
character_set = 'utf-8' ).
p_ixml_doc->set_encoding( l_encoding ).
l_root = p_ixml_doc->create_simple_element(
name = 'SAPChartCustomizing' parent = p_ixml_doc ).
l_root->set_attribute( name = 'version' value = '1.1' ).
l_globalsettings = p_ixml_doc->create_simple_element(
name = 'GlobalSettings' parent = l_root ).
l_element = p_ixml_doc->create_simple_element(
name = 'FileType' parent = l_globalsettings ).
l_element->if_ixml_node~set_value( 'PNG' ).
l_element = p_ixml_doc->create_simple_element(

name = 'Dimension' parent = l_globalsettings ).


l_element->if_ixml_node~set_value( 'PseudoThree' ).
l_element = p_ixml_doc->create_simple_element(
name = 'Width' parent = l_globalsettings ).
l_element->if_ixml_node~set_value( '640' ).
l_element = p_ixml_doc->create_simple_element(
name = 'Height' parent = l_globalsettings ).
l_element->if_ixml_node~set_value( '360' ).
l_default = p_ixml_doc->create_simple_element(
name = 'Defaults' parent = l_globalsettings ).
l_element = p_ixml_doc->create_simple_element(
name = 'FontFamily' parent = l_default ).
l_element->if_ixml_node~set_value( 'Arial' ).
l_elements = p_ixml_doc->create_simple_element(
name = 'Elements' parent = l_root ).
l_chartelements = p_ixml_doc->create_simple_element(
name = 'ChartElements' parent = l_elements ).
l_title = p_ixml_doc->create_simple_element(
name = 'Title' parent = l_chartelements ).
l_element = p_ixml_doc->create_simple_element(
name = 'Extension' parent = l_title ).
l_element->if_ixml_node~set_value( 'href="sapevent:onclick?Title"' ).
l_element = p_ixml_doc->create_simple_element(
name = 'Caption' parent = l_title ).
l_element->if_ixml_node~set_value( 'Caffeine Consumption' ).
endform.
" create_custom_demo
*&---------------------------------------------------------------------*
*&
Form toggle_design_mode
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
form toggle_design_mode .
data: l_win_chart

type ref to cl_gui_chart_engine_win.

catch system-exceptions move_cast_error = 1.


l_win_chart ?= g_ce_viewer->get_control( ).
endcatch.
if sy-subrc is initial.
if g_design_mode is initial.
g_design_mode = 'X'.
else.
g_design_mode = ' '.
endif.
l_win_chart->set_design_mode( flag = g_design_mode event = 'X' ).
l_win_chart->restrict_chart_types( charttypes = 'Columns|Lines' ).
l_win_chart->restrict_property_events( events = 'ChartType' ).
endif.
endform.

" toggle_design_mode

*&---------------------------------------------------------------------*
*&
Form toggle_value_change
*&---------------------------------------------------------------------*

*
text
*----------------------------------------------------------------------*
form toggle_value_change .
data: l_win_chart

type ref to cl_gui_chart_engine_win.

catch system-exceptions move_cast_error = 1.


l_win_chart ?= g_ce_viewer->get_control( ).
endcatch.
if sy-subrc is initial.
if g_value_change is initial.
g_value_change = 'X'.
l_win_chart->enable_value_change( ).
else.
g_value_change = ' '.
l_win_chart->disable_value_change( ).
endif.
endif.
endform.

" toggle_value_change

*&---------------------------------------------------------------------*
*&
Form save_customizing
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
form save_customizing .
data: l_xml_customizing
l_win_chart
l_filename
l_filepath
l_filesize
l_path

type
type
type
type
type
type

w3mimetabtype,
ref to cl_gui_chart_engine_win,
string,
string,
i,
string.

catch system-exceptions move_cast_error = 1.


l_win_chart ?= g_ce_viewer->get_control( ).
endcatch.
if sy-subrc is initial.
l_win_chart->get_customizing(
importing
xdata_table = l_xml_customizing
).
describe table l_xml_customizing lines l_filesize.
multiply l_filesize by 255.
l_filename = 'customizing.xml'.
call method cl_gui_frontend_services=>file_save_dialog
exporting
default_file_name = l_filename
changing
filename
= l_filename
path
= l_path
fullpath
= l_filepath.
if not l_filepath is initial.

call method cl_gui_frontend_services=>gui_download


exporting
filetype
= 'BIN'
filename
= l_filepath
bin_filesize
= l_filesize
changing
data_tab
= l_xml_customizing
exceptions
file_write_error
= 1
others
= 22.
endif.
endif.
endform.

" save_customizing

*&---------------------------------------------------------------------*
*&
Form print
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
form print .
data: l_win_chart

type ref to cl_gui_chart_engine_win.

catch system-exceptions move_cast_error = 1.


l_win_chart ?= g_ce_viewer->get_control( ).
endcatch.
if sy-subrc is initial.
l_win_chart->print( ).
endif.
endform.

" print

*&---------------------------------------------------------------------*
*&
Clas lcl_ce_viewer_eh
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
class lcl_ce_viewer_eh implementation.
method on_click.
data: l_msg
type string,
l_series type string,
l_point type string.
l_series = series.
l_point = point.
concatenate 'Element clicked:'(m01) element
'Series:'(t01) l_series
'Point:'(t02) l_point
into l_msg separated by space.
message l_msg type 'S'.
endmethod.
method on_value_change.

data: l_msg
l_series
l_point
l_value

type
type
type
type

string,
string,
string,
string.

l_series = series.
l_point = point.
l_value = value.
concatenate 'Value changed:'(m02)
'Series:'(t01) l_series
'Point:'(t02) l_point
'Value:'(t03) l_value
into l_msg separated by space.
message l_msg type 'S'.
endmethod.
method on_property_change.
data: l_msg

type string.

concatenate 'Property changed:'(m03)


'Element:'(t04) element
'Name:'(t05) name
'Value:'(t03) value
into l_msg separated by space.
message l_msg type 'S'.
endmethod.
endclass.

Potrebbero piacerti anche