CE – это библиотека которая поможет вам создавать графики в SAP NW. Использовать CE можно по двум сценариям:
- С помощью Internet Graphics Service используя класс cl_igs_chart_engine
- Как ActiveX GUI контрол в Windows клиенте SAP GUI через класс cl_gui_chart_engine.
Рассмотрим второй сценарий. Работа с контролом CE подобна тому, как мы работаем с ALV, сначала необходимо создать контейнер, затем создать объект, указав в конструкторе переменную контейнера.
CE поддерживает большое количество разнообразных видов графиков, внешний вид настраивается либо через дизайнер CE, либо вручную. В обоих случаях генерируется XML документ, который необходимо передать в класс cl_gui_chart_engine. Создавая внешнее описание графика вручную необходимо знать спецификацию XML формата для построения графика, она не идет в комплекте вместе с дизайнером, есть только описание XML формата представления данных графика. Скачать данный набор можно тут
В следующем небольшом примере строится график, внешний вид которого настроен через дизайнер и хранится на сервере представления (построение шаблона в примере не рассматриваю, дизайнер довольно простой чтобы сгенерировать его самостоятельно), данные же берутся из таблицы и преобразуются в XML документ.
Код программы строящей график:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 |
REPORT zalv_simple. PARAMETERS: p_dummy. *&---------------------------------------------------------------------* *& Глобальные переменные & структуры *&---------------------------------------------------------------------* TYPES: BEGIN OF ty_result, lifnr TYPE STRING, " Поставщик matnr TYPE STRING, " Материал menge TYPE I, " Количество END OF ty_result. DATA: go_ce_engine TYPE REF TO cl_gui_chart_engine, go_container TYPE REF TO cl_gui_docking_container, gv_xstr TYPE XSTRING, gv_length TYPE I, gt_rawtab TYPE w3mimetabtype, gt_result TYPE STANDARD TABLE OF ty_result. FIELD-SYMBOLS: <fs_line> TYPE spfli. *&---------------------------------------------------------------------* *& Основная логика программы *&---------------------------------------------------------------------* INITIALIZATION. PERFORM get_data. CHECK gt_result IS NOT INITIAL. CREATE OBJECT go_container EXPORTING side = cl_gui_docking_container=>align_at_top parent = cl_gui_container=>screen0. go_container->set_height( 999 ). CREATE OBJECT go_ce_engine EXPORTING parent = go_container. PERFORM load_data. PERFORM load_customizing. CALL METHOD go_ce_engine->render( ). *&---------------------------------------------------------------------* *& Form load_customizing *&---------------------------------------------------------------------* * Загружает внешнее описание графика *----------------------------------------------------------------------* FORM load_customizing. cl_gui_frontend_services=>gui_upload( EXPORTING filename = 'D:\custom.xml' " Убедитесь что у вас есть настроенный шаблон для графика. filetype = 'BIN' IMPORTING filelength = gv_length CHANGING data_tab = gt_rawtab EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 not_supported_by_gui = 17 error_no_gui = 18 OTHERS = 19 ). go_ce_engine->set_customizing( xdata_table = gt_rawtab ). ENDFORM. "load_customizing *&---------------------------------------------------------------------* *& Form get_data *&---------------------------------------------------------------------* * Получение данных по закупаемым количествам у поставщиков. *----------------------------------------------------------------------* FORM get_data. FIELD-SYMBOLS: <fs_line> TYPE ty_result. DEFINE add_data. APPEND INITIAL LINE TO gt_result ASSIGNING <fs_line>. <fs_line>-lifnr = &1. <fs_line>-matnr = &2. <fs_line>-menge = &3. END-OF-DEFINITION. add_data 'ООО Рога и Копыта' 'Елка' 10. add_data 'ООО Рога и Копыта' 'Сосна' 20. add_data 'ООО Рога и Копыта' 'Берёза' 30. add_data 'ООО Рога и Копыта' 'Клён' 17. add_data 'ООО ИНЛЕС' 'Елка' 15. add_data 'ООО ИНЛЕС' 'Сосна' 25. add_data 'ООО ИНЛЕС' 'Клён' 55. add_data 'ООО ИНЛЕС' 'Берёза' 35. ENDFORM. "get_data *&---------------------------------------------------------------------* *& Form load_data *&---------------------------------------------------------------------* * Загрузка данных в график. *----------------------------------------------------------------------* FORM load_data. DATA: lo_ixml TYPE REF TO if_ixml, lo_xml_doc TYPE REF TO if_ixml_document, lo_simplechartdata TYPE REF TO if_ixml_element, lo_categories TYPE REF TO if_ixml_element, lo_series TYPE REF TO if_ixml_element, lo_point TYPE REF TO if_ixml_element, lo_category TYPE REF TO if_ixml_element, lo_encoding TYPE REF TO if_ixml_encoding, lo_ixml_sf TYPE REF TO if_ixml_stream_factory, lo_ostream TYPE REF TO if_ixml_ostream, lv_xstring TYPE XSTRING, lo_value TYPE REF TO if_ixml_element, lt_materials TYPE STANDARD TABLE OF ty_result, lv_value TYPE STRING. FIELD-SYMBOLS: <fs_line> TYPE ty_result, <fs_line_series> TYPE ty_result. lo_ixml = cl_ixml=>create( ). lo_xml_doc = lo_ixml->create_document( ). lo_ixml_sf = lo_ixml->create_stream_factory( ). lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_little_endian character_set = 'utf-8' ). lo_xml_doc->set_encoding( lo_encoding ). lo_simplechartdata = lo_xml_doc->create_simple_element( NAME = 'ChartData' parent = lo_xml_doc ). lo_categories = lo_xml_doc->create_simple_element( NAME = 'Categories' parent = lo_simplechartdata ). LOOP AT gt_result ASSIGNING <fs_line>. AT NEW lifnr. lo_category = lo_xml_doc->create_simple_element( NAME = 'Category' parent = lo_categories ). lo_category->if_ixml_node~set_value( <fs_line>-lifnr ). ENDAT. ENDLOOP. SORT gt_result BY matnr. LOOP AT gt_result ASSIGNING <fs_line_series>. READ TABLE lt_materials WITH KEY matnr = <fs_line_series>-matnr TRANSPORTING NO FIELDS. IF sy-subrc NE 0. APPEND <fs_line_series> TO lt_materials. lo_series = lo_xml_doc->create_simple_element( NAME = 'Series' parent = lo_simplechartdata ). lo_series->set_attribute( NAME = 'label' VALUE = <fs_line_series>-matnr ). ENDIF. lo_point = lo_xml_doc->create_simple_element( NAME = 'Point' parent = lo_series ). lo_value = lo_xml_doc->create_simple_element( NAME = 'Value' parent = lo_point ). lv_value = <fs_line_series>-menge. lo_value->if_ixml_node~set_value( lv_value ). lo_value->set_attribute( NAME = 'type' VALUE = 'y' ). lo_point->set_attribute( NAME = 'label' VALUE = lv_value ). ENDLOOP. lo_ostream = lo_ixml_sf->create_ostream_xstring( lv_xstring ). lo_xml_doc->render( EXPORTING ostream = lo_ostream ). go_ce_engine->set_data( xdata = lv_xstring ). ENDFORM. "load_data |
Для просмотра данных в XML в отладчике можно использовать просмотр переменной как XML в браузере:
А что всего на 90 дней дают пользоваться классами?
В каком смысле?
Там когда скачиваешь, какое-то соглашение типа только 90 дней можно пользоваться этим.
Не обратил внимание, надо будет ознакомится 🙂