上一篇请参考SAP 使用abap开发仪表盘二-优快云博客
本文的目的是让不熟悉前端开发技术的abap同学可以轻松开发可视化图表。
准备工作请参考SAP 使用abap开发可视化图表-优快云博客
准备工作完成后,就可以编写可视化程序
图表参数的设置请参考frm_draw1.
表ZTMAP配置
1000 上海
1001 云南
1002 内蒙古
以下省略
程序代码如下:
DATA go_chart TYPE REF TO zcl_gui_html_chartjs4.
CLASS cl_event_receiver DEFINITION DEFERRED.
DATA ob_event_receiver TYPE REF TO cl_event_receiver.
CONSTANTS:c_min TYPE bseg-wrbtr VALUE '10000.00',
c_max TYPE bseg-wrbtr VALUE '30000.00'.
*----------------------------------------------------------------------*
* CLASS cl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_event_receiver DEFINITION.
PUBLIC SECTION .
METHODS: sapevent
FOR EVENT sapevent OF zcl_gui_html_chartjs4
IMPORTING action frame getdata postdata query_table.
PRIVATE SECTION .
ENDCLASS. "cl_event_receiver DEFINITION
*----------------------------------------------------------------------*
* CLASS cl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_event_receiver IMPLEMENTATION.
METHOD sapevent.
"单击事件
CASE action.
WHEN 'CLICK'.
PERFORM frm_process_click USING getdata.
WHEN OTHERS.
ENDCASE.
ENDMETHOD. "sapevent
ENDCLASS. "cl_event_receiver IMPLEMENTATION
START-OF-SELECTION.
CREATE OBJECT go_chart
EXPORTING
ir_parent = cl_gui_container=>default_screen
iv_canum = 1
iv_map = 'C'.
go_chart->new_chart( 'myChart1' ).
PERFORM frm_draw1.
PERFORM frm_register_event.
go_chart->init_display( ).
WRITE: 'ok'.
*&---------------------------------------------------------------------*
*& Form frm_process_click
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_DATA text
*----------------------------------------------------------------------*
FORM frm_process_click USING p_data.
DATA lt_cdata TYPE TABLE OF string.
DATA:xstr TYPE xstring.
DATA:l_codepage(4) TYPE n.
DATA:l_encoding(20).
DATA:l_data TYPE string.
DATA: convout TYPE REF TO cl_abap_conv_out_ce.
DATA: convin TYPE REF TO cl_abap_conv_in_ce.
DATA str TYPE string.
l_data = p_data.
CHECK l_data IS NOT INITIAL.
"外部字符集转换内部编码
CALL FUNCTION 'SCP_CODEPAGE_BY_EXTERNAL_NAME'
EXPORTING
external_name = 'utf-16be'
IMPORTING
sap_codepage = l_codepage
EXCEPTIONS
not_found = 1
OTHERS = 2.
l_encoding = l_codepage.
IF l_data IS NOT INITIAL.
TRANSLATE l_data TO UPPER CASE.
MOVE l_data TO xstr.
ENDIF.
convin = cl_abap_conv_in_ce=>create( encoding = l_encoding
input = xstr ).
CALL METHOD convin->read
IMPORTING
data = str.
ENDFORM. " FRM_PROCESS_CLICK
*&---------------------------------------------------------------------*
*& Form frm_register_event
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_register_event .
DATA: it_myevent TYPE cntl_simple_events ,
st_myevent LIKE LINE OF it_myevent .
IF ob_event_receiver IS NOT BOUND .
CREATE OBJECT ob_event_receiver.
ENDIF .
* Register event
st_myevent-eventid = go_chart->m_id_sapevent.
st_myevent-appl_event = abap_true .
APPEND st_myevent TO it_myevent .
CALL METHOD go_chart->set_registered_events
EXPORTING
events = it_myevent.
SET HANDLER ob_event_receiver->sapevent
FOR go_chart .
ENDFORM. " FRM_REGISTER_EVENT
*&---------------------------------------------------------------------*
*& Form frm_draw1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_draw1 .
DATA: lt_mapdata TYPE zcl_gui_html_chartjs4=>tt_mapdata,
ls_mapdata TYPE zcl_gui_html_chartjs4=>ty_mapdata.
DATA lv_random TYPE i.
DATA lv_packed TYPE bseg-wrbtr.
DATA lt_map TYPE TABLE OF ztmap.
DATA ls_map TYPE ztmap.
DATA ls_min TYPE string.
DATA ls_max TYPE string.
SELECT * FROM ztmap
INTO TABLE lt_map.
LOOP AT lt_map INTO ls_map.
ls_mapdata-name = ls_map-name.
DO 3 TIMES.
CALL FUNCTION 'RANDOM_P'
EXPORTING
rnd_min = c_min
rnd_max = c_max
IMPORTING
rnd_value = lv_packed.
ENDDO.
ls_mapdata-value = lv_packed.
APPEND ls_mapdata TO lt_mapdata.
ENDLOOP.
ls_min = c_min.
ls_max = c_max.
go_chart->set_map_att( title = '全国实际发货'
subtitle = '2003'
min = ls_min
max = ls_max
sername = 'sale'
par1 = '实际发货' ).
go_chart->set_mapdata( lt_mapdata ).
ENDFORM. " FRM_DRAW