SAP 使用abap开发地图

上一篇请参考SAP 使用abap开发仪表盘二-CSDN博客

本文的目的是让不熟悉前端开发技术的abap同学可以轻松开发可视化图表。

准备工作请参考SAP 使用abap开发可视化图表-CSDN博客

准备工作完成后,就可以编写可视化程序

图表参数的设置请参考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

 

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值