{"id":3092,"date":"2017-03-30T15:34:21","date_gmt":"2017-03-30T15:34:21","guid":{"rendered":"https:\/\/www.anychart.com\/blog\/?p=3092"},"modified":"2017-03-30T15:34:21","modified_gmt":"2017-03-30T15:34:21","slug":"integrate-anychart-js-charts-sap-web-ui","status":"publish","type":"post","link":"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/","title":{"rendered":"How to Integrate AnyChart JavaScript Charts in SAP Web UI"},"content":{"rendered":"<p><img decoding=\"async\" class=\"alignnone wp-image-3393 size-full\" src=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-charts-in-crm-web-ui-with-anychart-js-charting-libraries-1.png\" alt=\"Charts in SAP: How to Integrate AnyChart JavaScript Charts in SAP Web UI\" width=\"100%\" srcset=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-charts-in-crm-web-ui-with-anychart-js-charting-libraries-1.png 880w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-charts-in-crm-web-ui-with-anychart-js-charting-libraries-1-300x194.png 300w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-charts-in-crm-web-ui-with-anychart-js-charting-libraries-1-768x496.png 768w\" sizes=\"(max-width: 880px) 100vw, 880px\" \/>We as \u2018mere\u2019 humans are not very good at processing raw statistical data visually when it\u2019s delivered to us in an unrefined form. We are, however, very good in detecting complex patterns when data is presented to us in a graph or a chart. It is therefore no wonder that as a developer you often get the requirement to represent data in a more comprehensible form. When you want to visualize data in the SAP Web UI in a more graphical way the standard possibilities available to you are rather limited. Luckily there are ways to overcome these limitations. When you combine SAP with the graphical power of <a href=\"https:\/\/www.anychart.com\" target=\"_blank\">AnyChart\u00a0JS Charts<\/a> a whole range of new possibilities will become available to you.<\/p>\n<p>In this blog I will describe how you can integrate AnyChart in the SAP Web UI with relative ease, how you can feed AnyChart objects with SAP data using both a \u2018pull\u2019 and a \u2018push\u2019 mechanism and how you can respond in the SAP backend to the events triggered from user interaction with an AnyChart object.<\/p>\n<p><!--more--><\/p>\n<h2>Display an AnyChart object in the SAP Web UI<\/h2>\n<p>I found that integrating an AnyChart object in the SAP Web UI is actually quite simple as a view in the SAP Web UI contains an HTML page with the possibility to add your own (JavaScript) code. The HTML part of your Web UI view can be accessed through the UI component workbench as shown below.<\/p>\n<p><a href=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-figure-1-1.png\" target=\"_blank\"><img decoding=\"async\" class=\"alignnone wp-image-3110 size-full\" src=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-figure-1-1.png\" alt=\"Integrating AnyChart JavaScript Charts in SAP Web UI: Get access to the HTML part of your UI View\" width=\"50%\" srcset=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-figure-1-1.png 478w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-figure-1-1-300x198.png 300w\" sizes=\"(max-width: 478px) 100vw, 478px\" \/><\/a><\/p>\n<p>To be able to show an AnyChart object in the SAP Web UI the following steps need to be executed.<\/p>\n<p>First you have to make the AnyChart JavaScript libraries available to your HTML page. To get access to your JavaScript libraries you have to add the following or a similar line of script to your HTML page.<\/p>\n<pre style=\"background-color: #ffffff;\"><code>&lt;script src=\"https:\/\/cdn.anychart.com\/js\/7.12.0\/anychart-bundle.min.js\"&gt;&lt;\/script&gt;<\/code><\/pre>\n<p>There is also an alternative; it is from a performance point of view probably better to store the JavaScript sources locally as MIME objects in your BSP application. If you are using the same library in multiple applications you can choose to store them in the MIME objects of the BSP application <code>CRM_UI_FRAME<\/code>.<\/p>\n<p>Uploading a file as a MIME object can be done in the Object Navigator transaction (SE80) in SAP. Just select the appropriate BSP application and upload your files as can be seen in the example below.<\/p>\n<p><a href=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/figure-2.png\" target=\"_blank\"><img decoding=\"async\" class=\"alignnone wp-image-3109 size-full\" src=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/figure-2.png\" alt=\"Integrating AnyChart JavaScript Charts in SAP Web UI: Store JavaScript source file as MIME Object\" width=\"50%\" srcset=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/figure-2.png 405w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/figure-2-300x259.png 300w\" sizes=\"(max-width: 405px) 100vw, 405px\" \/><\/a><\/p>\n<p>You then can get access to your source files by adding the following code:<\/p>\n<pre style=\"background-color: #ffffff;\"><code>&lt;script src=\"\/sap\/bc\/bsp\/sap\/<em>your BSP application<\/em>\/anychart-bundle.min.js\"&gt;&lt;\/script&gt;<\/code><\/pre>\n<p>The same approach can also be used to store any CSS files if necessary.<\/p>\n<p>With the sources available you now can add the code to generate your charts and basically you now can use <a href=\"https:\/\/docs.anychart.com\/Quick_Start\/Quick_Start\" target=\"_blank\" rel=\"nofollow\">any graph, chart or object AnyChart can offer<\/a>. In the example below (copied from <a href=\"https:\/\/www.anychart.com\/solutions\/sales-dashboard-solution\/\" target=\"_blank\">one of the dashboards<\/a> available in the AnyChart page <a href=\"https:\/\/www.anychart.com\/solutions\/\" target=\"_blank\">demo section<\/a>) you can see what the end result might look like.<\/p>\n<p><a href=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/2.png\" target=\"_blank\"><img decoding=\"async\" class=\"alignnone wp-image-3111 size-full\" src=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/2.png\" alt=\"AnyChart JavaScript Charts based sales dashboard in SAP Web UI\" width=\"100%\" srcset=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/2.png 1058w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/2-300x166.png 300w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/2-768x424.png 768w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/2-1024x565.png 1024w\" sizes=\"(max-width: 1058px) 100vw, 1058px\" \/><\/a><\/p>\n<p>One word of advice when copying JavaScript code in the HTML page of a Web UI view: The standard SAP editor is not recognizing <code>\/\/<\/code> as a line comment indicator. So avoid this type of commenting because SAP won\u2019t see it as a commented out line but as a line of code and it will mess up things in a big way.<\/p>\n<h2>How to pass data from SAP to AnyChart<\/h2>\n<p>Now that we have seen that we can use the graphical power of an AnyChart object in the view of a Web UI component, we have to find a way to provide our charts and graphs with actual data coming from the SAP backend. To test this I decided to build a new Web UI application that will show a graph with all service requests for a certain period of time grouped by their functional status. I used the <a href=\"https:\/\/www.anychart.com\/products\/anychart\/gallery\/3D_Column\/Multi-Series_3D_Column_Chart_with_Z_Distribution.php\" target=\"_blank\">Multi-Series 3D Column Chart<\/a> from the <a href=\"https:\/\/www.anychart.com\/products\/anychart\/gallery\" target=\"_blank\">Chart Gallery<\/a> as a base but I will come back to that later.<\/p>\n<p>The first thing to do is to get the data from the SAP backend in your HTML page. This is actually not such a big deal because in your HTML code you have access to your view controller class and all its methods. So I started by creating a new method in the view controller class, <code>GET_JSON_STRING<\/code>. The method will return the data you want to display as a string in JSON format. I decided to pass the data in JSON format as it can be easily generated in ABAP from an internal table and can be translated to a JavaScript data object without much effort which is very convenient.<\/p>\n<p>The method might look something like this:<\/p>\n<pre style=\"background-color: #ffffff;\"><code>METHOD get_json_string.\r\n\r\n  \"Declare Data Format\r\n  TYPES:\r\n    BEGIN OF ty_json_data,\r\n      field1    TYPE string,\r\n      field2    TYPE string,\r\n      field3    TYPE string,\r\n      field4    TYPE string,\r\n      field5    TYPE string,\r\n    END OF ty_json_data.\r\n\r\n  \"Define an internal table\r\n  DATA:\r\n    lt_json_data  TYPE STANDARD TABLE OF ty_json_data WITH DEFAULT KEY.\r\n\r\n  \"Write some code to populate your table\r\n\r\n  \"Convert SAP internal table to JSON string\r\n  DATA(json_writer) = cl_sxml_string_writer=&gt;create( type = if_sxml=&gt;co_xt_json ).\r\n\r\n  CALL TRANSFORMATION id SOURCE text = lt_json_data RESULT XML json_writer.\r\n\r\n  DATA(result_string) = json_writer-&gt;get_output( ).\r\n\r\n  DATA(lo_conversion) = cl_abap_conv_in_ce=&gt;create( EXPORTING input =  json_writer-&gt;get_output( ) ).\r\n\r\n  lo_conversion-&gt;read( IMPORTING data = re_result ).\r\n\r\nENDMETHOD.<\/code><\/pre>\n<p>With the ABAP part in place we have to make the data available in JavaScript as well. This can be done by calling the method <code>GET_JSON_STRING<\/code> from the controller class and subsequently create a JavaScript data object using the <code>JSON.parse<\/code> command as shown below.<\/p>\n<pre style=\"background-color: #ffffff;\"><code>var data = JSON.parse('&lt;%= controller-&gt;get_json_string( ). %&gt;').text;<\/code><\/pre>\n<p>Now that we have the data available there is only one step left to do, we have to convert the data to a format that AnyChart can handle. To be able to achieve that let\u2019s first take a closer look at <a href=\"https:\/\/docs.anychart.com\/Working_with_Data\/Supported_Data_Formats\" target=\"_blank\" rel=\"nofollow\">what kind of data format<\/a> AnyChart is accepting. In the JavaScript API documentation AnyChart advices you to work with data sets (class <code>anychart.data.Set<\/code>) which can be instantiated using the following code:<\/p>\n<pre style=\"background-color: #ffffff;\"><code>var dataSet = anychart.data.set(data);  \/\/ creates data<\/code><\/pre>\n<p>Where the variable <code>data<\/code> can be an array with numbers, strings and functions, an array of arrays, an array of objects or a multi-typed array. (For more information see the <a href=\"https:\/\/api.anychart.com\/anychart.data.Set\" target=\"_blank\" rel=\"nofollow\">AnyChart API Reference<\/a>.)<\/p>\n<p>In fact the exact data format that AnyChart needs is related to the type of graph you want to show. In this particular example AnyChart was expecting an array of arrays which was achieved by the following JavaScript code. But there are probably other ways to do it.<\/p>\n<pre style=\"background-color: #ffffff;\"><code>var dataSet = anychart.data.set();\r\n\r\nfor (i = 0; i &lt; data.length; i++){\r\n  dataSet.append( [ data[i].period,\r\n                    data[i].new,\r\n                    data[i].inprocess,\r\n                    data[i].closed,\r\n                    data[i].cancelled ] );\r\n};<\/code><\/pre>\n<p>With this last piece of code in place we managed to pass the data from our SAP backend to the AnyChart graph and we ended up with a fully functional Web UI application. The final result was rather satisfying if I may say so myself!<\/p>\n<p><a href=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/3.png\" target=\"_blank\"><img decoding=\"async\" class=\"alignnone wp-image-3112 size-full\" src=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/3.png\" alt=\"A fully functional application fueled by SAP data and AnyChart JavaScript Charts based data visualization\" width=\"100%\" srcset=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/3.png 1584w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/3-300x123.png 300w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/3-768x314.png 768w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/3-1024x419.png 1024w\" sizes=\"(max-width: 1584px) 100vw, 1584px\" \/><\/a><\/p>\n<h2>Working with more complex data structures<\/h2>\n<p>In this previous example the data format was rather simple so I decided to up the ante and create an example featuring AnyChart&#8217;s\u00a0<a href=\"https:\/\/www.anychart.com\/products\/anygantt\/gallery\/Gantt_Charts\/Human_Resource_Chart.php\" target=\"_blank\">Human Resource Chart<\/a> which is using a far more complex data structure as input. The basic principles are however the same. We first build an internal table in ABAP and convert it to a JSON string.<\/p>\n<pre style=\"background-color: #ffffff;\"><code>lt_hr_chart_data = VALUE #( base lt_hr_chart_data ( id      = '1'\r\n                                                    name    = 'Alex Exler'\r\n                                                    periods = VALUE tt_periods( ( id     = '1_1'\r\n                                                                                  start  = '1171468800000'\r\n                                                                                  end    = '1171987200000'\r\n                                                                                  stroke = '#B8AA96'\r\n                                                                                  fill-angle = '90'\r\n                                                                                  fill-keys  =  VALUE tt_keys( ( color = '#CFC0A9' position = '0' )\r\n                                                                                                               ( color = '#E6D5BC' position = '0.38' )\r\n                                                                                                               ( color = '#E8D9C3' position = '1' ) ) )\r\n                                                                                ( id     = '1_2'\r\n                                                                                  start  = '1174921200000'\r\n                                                                                  end    = '1175612400000'\r\n                                                                                  stroke = '#B8AA96'\r\n                                                                                  fill-angle = '90'\r\n                                                                                  fill-keys  =  VALUE tt_keys( ( color = '#CFC0A9' position = '0' )\r\n                                                                                                               ( color = '#E6D5BC' position = '0.38' )\r\n                                                                                                               ( color = '#E8D9C3' position = '1' ) ) )\r\n                                                                                ( id     = '1_3'\r\n                                                                                  start  = '1177599600000'\r\n                                                                                  end    = '1178550000000'\r\n                                                                                  stroke = '#B8AA96'\r\n                                                                                  fill-angle = '90'\r\n                                                                                  fill-keys  =  VALUE tt_keys( ( color = '#CFC0A9' position = '0' )\r\n                                                                                                               ( color = '#E6D5BC' position = '0.38' )\r\n                                                                                                               ( color = '#E8D9C3' position = '1' ) ) ) ) ) ).<\/code><\/pre>\n<p>Then in JavaScript we call the method from the view controller that provides us with the data and use <code>JSON.parse<\/code> to get a JavaScript data object.<\/p>\n<pre style=\"background-color: #ffffff;\"><code>var data = JSON.parse('&lt;%= controller-&gt;get_data( ). %&gt;').json;<\/code><\/pre>\n<p>Finally we convert the data to a format AnyChart can handle, but actually there is no finally because the Human Resource Chart can handle this data format right of the bat as it is expecting an array of objects. So if we build our data correctly in the SAP backend we don\u2019t have to do any additional conversion in the JavaScript code. Pretty cool in my opinion and one of the main reasons I use the JSON data format. In the example below you can see the final result.<\/p>\n<p><a href=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/4.png\" target=\"_blank\"><img decoding=\"async\" class=\"alignnone wp-image-3114 size-full\" src=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/4.png\" alt=\"Human Resource Chart in the Web UI fueled by SAP data and AnyChart JavaScript Charts based data visualization\" width=\"100%\" srcset=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/4.png 1548w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/4-300x125.png 300w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/4-768x319.png 768w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/4-1024x425.png 1024w\" sizes=\"(max-width: 1548px) 100vw, 1548px\" \/><\/a><\/p>\n<h2>Use Web sockets to push data to AnyChart (ABAP Push Channel)<\/h2>\n<p>In the last two examples we called a method from the view controller class to \u2018pull\u2019 the data from the SAP backend into our AnyChart graph. Besides that method SAP also offers the possibility to \u2018push\u2019 data from the SAP backend to any web page using a web socket connection (it is called APC which stands for ABAP Push Channel and if you want to read more about it this <a href=\"https:\/\/blogs.sap.com\/2014\/11\/27\/introduction-to-abap-channels\/\" target=\"_blank\" rel=\"nofollow\">blog<\/a> is a good place to start). Using the \u2018push\u2019 messages can be useful if you have, for example, a graph or a chart you want to update every time something changes without using a periodic polling mechanism of some sorts. So the SAP backend will tell you when it\u2019s time to update your view.<\/p>\n<p>Now let\u2019s try to integrate it with an AnyChart graph.<\/p>\n<p>The first thing we need is to set up a working APC channel in SAP. It will however go too far to describe this in detail in this blog. So for now we only need to know that we have a working APC channel available in the SAP system. The second thing to do is write some JavaScript inside our page to open the web socket connection and write some logic to update the graph once we receive a push message. In the example I open the web socket connection based on the URL of my ABAP Push Channel and when I receive a message I parse the JSON data and add a new data set to my graph while removing the oldest one.<\/p>\n<pre style=\"background-color: #ffffff;\"><code>\/\/Open Websocket connection\r\nif ('WebSocket' in window){\r\n  var connection = new WebSocket('&lt;%= controller-&gt;gv_apc_url %&gt;');\r\n}\r\n\r\n\/\/Once we receive a new message we add a new dataSet and remove the oldest one\r\nconnection.onmessage = function(e){\r\n\r\n   var data = JSON.parse(e.data).json;\r\n\r\n   dataSet.append([ data.month,\r\n                    data.value1,\r\n                    data.value2,\r\n                    data.value3,\r\n                     ]);\r\n\r\n   dataSet.remove(0);\r\n};<\/code><\/pre>\n<p>All we have to do now is taking care of the ABAP part. To make this all fly I wrote a small program that pushes 12 times a new data set (in JSON format again) to the graph with an interval of a second. This will update our graph accordingly by adding new dataset entries and removing the old ones.<\/p>\n<pre style=\"background-color: #ffffff;\"><code>DO 12 TIMES.\r\n  WAIT UP TO 1 SECONDS.\r\n\r\n  ls_message = lt_message[ sy-index ].\r\n\r\n  TRY.\r\n      DATA(lo_json_writer) = cl_sxml_string_writer=&gt;create( type = if_sxml=&gt;co_xt_json ).\r\n      CALL TRANSFORMATION id SOURCE json = ls_message RESULT XML lo_json_writer.\r\n      DATA(lv_json_xstring) = lo_json_writer-&gt;get_output( ).\r\n      DATA(lo_conversion)   = cl_abap_conv_in_ce=&gt;create( EXPORTING input =  lo_json_writer-&gt;get_output( ) ).\r\n\r\n      lo_conversion-&gt;read( IMPORTING data = lv_json_string ).\r\n      lv_json_string = |{ lv_json_string CASE = LOWER }|.\r\n  ENDTRY.\r\n\r\n  TRY.\r\n      \"Send the message over the APC using AMC\r\n      CAST if_amc_message_producer_text( cl_amc_channel_manager=&gt;create_message_producer( i_application_id       = |{ '' }|\r\n                                                                                          i_channel_id           = |{ '' }|\r\n                                                                                          i_channel_extension_id = space ) )-&gt;send( i_message = |{ lv_json_string }| ).\r\n\r\n    CATCH cx_amc_error INTO DATA(lo_exception_amc).\r\n      WRITE: \/ |{ lo_exception_amc-&gt;get_text( ) }|.\r\n\r\n  ENDTRY.\r\n\r\nENDDO.<\/code><\/pre>\n<p>The final result can be seen in the GIF\u00a0below. Check the new month\u2019s appearing on the right and old ones disappear on the left. I think it\u2019s pretty cool!<\/p>\n<p><a href=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-web-ui-and-anychart-js-charts-demo.gif\" target=\"_blank\"><img decoding=\"async\" class=\"alignnone wp-image-3115 size-full\" src=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-web-ui-and-anychart-js-charts-demo.gif\" alt=\"Sap Web UI and AnyChart JS Charts demo\" width=\"100%\" \/><\/a><\/p>\n<h2>Handle events in SAP backend<\/h2>\n<p>We have seen so far that we are able to display AnyChart graphs and charts in the SAP Web UI and that we can feed it with data using a \u2018pull\u2019 and a \u2018push\u2019 mechanism, but for a full integration it would be nice if our SAP backend is able to react on events triggered from the AnyChart objects. So I went back to my service request application and I wanted SAP to be able to register which bar in the 3D graph has been clicked.<\/p>\n<p>To be able to do this you first have to add an event listener method to you chart with the specific event you want to act on. Adding an <a href=\"https:\/\/docs.anychart.com\/Common_Settings\/Event_Listeners\" target=\"_blank\" rel=\"nofollow\">event listener<\/a> in AnyChart is simple and in the example below we have added a listener for the point click event in to our chart.<\/p>\n<pre style=\"background-color: #ffffff;\"><code>chart.listen(\"pointClick\", function(event){\r\n  \/\/Place your logic here\r\n});<\/code><\/pre>\n<p>The second thing we need is an HTML event that will fire a server event that can be picked up by the SAP backend. This can be done by adding an HTMLB event to your HTML page which looks like this.<\/p>\n<pre style=\"background-color: #ffffff;\"><code>&lt;bsp:htmlbEvent name    = \"firePointClicked\"\r\n                id      = \"pointClicked\"\r\n                onClick = \"pointClicked\"\r\n                p1      = \"p1\"\r\n                p2      = \"p2\"\r\n                p3      = \"p3\" \/&gt;<\/code><\/pre>\n<p>With this in place we can now call our HTMLB event from our listen method and pass any relevant data along as parameters.<\/p>\n<pre style=\"background-color: #ffffff;\"><code>chart.listen(\"pointClick\", function(event){\r\n\r\n      return firePointClicked( String( event.iterator.get( 'x' ) ),\r\n                               String( event.iterator.get( 'value' ) ),\r\n                               String( event.point.getSeries().name() ) );\r\n});<\/code><\/pre>\n<p>Last but not least we have to create an event handler method in our SAP view controller class that will contain our business logic. In the component workbench we generate an event handler method with the same name as the <code>onClick<\/code> parameter we defined in our HTMLB event (case sensitive!) as shown below.<\/p>\n<p><a href=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/5.png\" target=\"_blank\"><img decoding=\"async\" class=\"alignnone wp-image-3117 size-full\" src=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/5.png\" alt=\"Handling events in SAP backend for JavaScript charts created with AnyChart JS\" width=\"80%\" srcset=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/5.png 625w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/5-300x150.png 300w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p>In the generated method we can add our business logic. In this case I will just create an information message to show which bar in the graph has been selected based on the parameters that have been passed.<\/p>\n<pre style=\"background-color: #ffffff;\"><code>METHOD eh_onpointclicked.\r\n\r\n  \"Get a reference to the global message service\r\n  DATA(lo_msg_service) = me-&gt;view_manager-&gt;get_message_service( ).\r\n\r\n  \"Give a message with the event parameters\r\n  IF htmlb_event_ex IS BOUND.\r\n    lo_msg_service-&gt;add_message( EXPORTING iv_msg_type    = 'I'\r\n                                           iv_msg_id      = '00'\r\n                                           iv_msg_number  = 001\r\n                                           iv_msg_v1      = | You clicked on |\r\n                                           iv_msg_v2      = | Period: | &amp;&amp; CAST cl_bsp_htmlb_event( htmlb_event_ex )-&gt;p1\r\n                                           iv_msg_v3      = | Value: |  &amp;&amp; CAST cl_bsp_htmlb_event( htmlb_event_ex )-&gt;p2\r\n                                           iv_msg_v4      = | Series: | &amp;&amp; CAST cl_bsp_htmlb_event( htmlb_event_ex )-&gt;p3 ).\r\n  ENDIF.\r\n\r\nENDMETHOD<\/code><\/pre>\n<p>With everything in place we now see a message generated from our backend telling us exactly which bar is clicked as you can see below.<\/p>\n<p><a href=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/6.png\" target=\"_blank\"><img decoding=\"async\" class=\"alignnone wp-image-3118 size-full\" src=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/6.png\" alt=\"Final interactive chart created in SAP Web UI with AnyChart JS Charts with reaction to events triggered\" width=\"100%\" srcset=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/6.png 1586w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/6-300x137.png 300w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/6-768x351.png 768w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/6-1024x468.png 1024w\" sizes=\"(max-width: 1586px) 100vw, 1586px\" \/><\/a><\/p>\n<p>This proves that we are able to react in the SAP backend on events triggered in an AnyChart object!<\/p>\n<h2>Conclusion<\/h2>\n<p>With the examples shown in this blog I think I have demonstrated that AnyChart can be integrated in the SAP Web UI without too much effort. You can feed the graphs with data using both a \u2018pull\u2019 and a \u2018push\u2019 mechanism and you are able to respond to the events triggered from user interaction with an AnyChart object.<\/p>\n<p>I think that combining the graphical power of AnyChart with the SAP Web UI can be a valuable addition because it gives you and your customers more flexibility in how to represent data in a SAP Web UI environment.<\/p>\n<p>I hope you enjoyed this blog; I certainly had fun making it. If you have any additional questions don\u2019t hesitate to contact me.<\/p>\n<hr \/>\n<h2>About Sandor van der Neut<\/h2>\n<p><strong>Sandor van der Neut<\/strong> is a SAP developer with more than 15 years experience. He lives in the Netherlands and works for <a href=\"http:\/\/www.acorel.nl\/english\" target=\"_blank\" rel=\"nofollow\">Acorel<\/a>, an innovative company that is specialized in customer engagement and commerce in the SAP Domain. Acorel\u2019s areas of expertise are SAP CRM, SAP Mobility, SAP Cloud solutions, Hybris Marketing and Hybris Commerce. You can follow the company on <a href=\"http:\/\/www.twitter.com\/Acorel\" target=\"_blank\" rel=\"nofollow\">Twitter<\/a>, <a href=\"https:\/\/www.linkedin.com\/company\/acorel\" target=\"_blank\" rel=\"nofollow\">LinkedIn<\/a>, <a href=\"http:\/\/www.facebook.com\/acorel\" target=\"_blank\" rel=\"nofollow\">Facebook<\/a> and <a href=\"http:\/\/www.youtube.com\/user\/acorelbv\/videos\" target=\"_blank\" rel=\"nofollow\">YouTube<\/a>.<\/p>\n<hr \/>\n<p>To keep updated on news and articles that we publish about <a href=\"https:\/\/www.anychart.com\" target=\"_blank\">AnyChart<\/a> and JavaScript charting and data visualization in general, you are welcome to check our <a href=\"https:\/\/www.anychart.com\/blog\" target=\"_blank\">blog<\/a> and follow AnyChart on <a href=\"http:\/\/www.facebook.com\/anycharts\" target=\"_blank\" rel=\"nofollow\">Facebook<\/a>, <a href=\"http:\/\/www.twitter.com\/anychart\" target=\"_blank\" rel=\"nofollow\">Twitter<\/a> and <a href=\"https:\/\/www.linkedin.com\/company\/386660\" target=\"_blank\" rel=\"nofollow\">LinkedIn<\/a>. You can download JavaScript charting libraries AnyChart, AnyMap, AnyStock and AnyGantt <a href=\"https:\/\/www.anychart.com\/download\/\" target=\"_blank\">here<\/a>. Licensing options are shown <a href=\"https:\/\/www.anychart.com\/buy\/\" target=\"_blank\">here<\/a>.<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>We as \u2018mere\u2019 humans are not very good at processing raw statistical data visually when it\u2019s delivered to us in an unrefined form. We are, however, very good in detecting complex patterns when data is presented to us in a graph or a chart. It is therefore no wonder that as a developer you often [&hellip;]<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":11,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,16,66,18,8,7,23,13,4],"tags":[53,70,71,35,85,49,54,32,55,77,174,146,79,36,141,81,57,76,67,58,65,56,68,173,30,172],"class_list":["post-3092","post","type-post","status-publish","format-standard","hentry","category-anychart-charting-component","category-anygantt","category-anymap","category-anystock","category-business-intelligence","category-dashboards","category-html5","category-javascript","category-tips-and-tricks","tag-anychart","tag-bar-chart","tag-bar-charts","tag-business-intelligence","tag-column-charts","tag-dashboards","tag-data-visualization","tag-html5","tag-html5-charts","tag-html5-dashboards","tag-integration","tag-interactive-data-visualization","tag-interactive-html5-dashboard","tag-javascript","tag-javascript-charting","tag-javascript-charting-library","tag-javascript-charts","tag-javascript-dashboards","tag-javascript-map","tag-js-chart","tag-js-charting","tag-js-charts","tag-js-maps","tag-sap-web-ui","tag-tips-and-tricks","tag-tutorial","wpautop"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>SAP Web UI and AnyChart JavaScript Charts: How to Integrate<\/title>\n<meta name=\"description\" content=\"How to integrate AnyChart in SAP Web UI, feed AnyChart objects with SAP data, respond in SAP backend to events of user interaction with objects in AnyChart.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SAP Web UI and AnyChart JavaScript Charts: How to Integrate\" \/>\n<meta property=\"og:description\" content=\"How to integrate AnyChart in SAP Web UI, feed AnyChart objects with SAP data, respond in SAP backend to events of user interaction with objects in AnyChart.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/\" \/>\n<meta property=\"og:site_name\" content=\"AnyChart News\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/AnyCharts\" \/>\n<meta property=\"article:published_time\" content=\"2017-03-30T15:34:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-charts-in-crm-web-ui-with-anychart-js-charting-libraries-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"880\" \/>\n\t<meta property=\"og:image:height\" content=\"568\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Sandor van der Neut\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@AnyChart\" \/>\n<meta name=\"twitter:site\" content=\"@AnyChart\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sandor van der Neut\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/\"},\"author\":{\"name\":\"Sandor van der Neut\",\"@id\":\"https:\/\/www.anychart.com\/blog\/#\/schema\/person\/938600f3b0fed85f38725dffc486ef50\"},\"headline\":\"How to Integrate AnyChart JavaScript Charts in SAP Web UI\",\"datePublished\":\"2017-03-30T15:34:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/\"},\"wordCount\":2137,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-charts-in-crm-web-ui-with-anychart-js-charting-libraries-1.png\",\"keywords\":[\"AnyChart\",\"bar chart\",\"bar charts\",\"Business Intelligence\",\"column charts\",\"Dashboards\",\"Data Visualization\",\"HTML5\",\"html5 charts\",\"html5 dashboards\",\"integration\",\"interactive data visualization\",\"interactive html5 dashboard\",\"JavaScript\",\"javascript charting\",\"JavaScript charting library\",\"javascript charts\",\"javascript dashboards\",\"javascript map\",\"js chart\",\"js charting\",\"js charts\",\"js maps\",\"sap web ui\",\"Tips and tricks\",\"tutorial\"],\"articleSection\":[\"AnyChart Charting Component\",\"AnyGantt\",\"AnyMap\",\"AnyStock\",\"Business Intelligence\",\"Dashboards\",\"HTML5\",\"JavaScript\",\"Tips and Tricks\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/\",\"url\":\"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/\",\"name\":\"SAP Web UI and AnyChart JavaScript Charts: How to Integrate\",\"isPartOf\":{\"@id\":\"https:\/\/www.anychart.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-charts-in-crm-web-ui-with-anychart-js-charting-libraries-1.png\",\"datePublished\":\"2017-03-30T15:34:21+00:00\",\"author\":{\"@id\":\"https:\/\/www.anychart.com\/blog\/#\/schema\/person\/938600f3b0fed85f38725dffc486ef50\"},\"description\":\"How to integrate AnyChart in SAP Web UI, feed AnyChart objects with SAP data, respond in SAP backend to events of user interaction with objects in AnyChart.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/#primaryimage\",\"url\":\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-charts-in-crm-web-ui-with-anychart-js-charting-libraries-1.png\",\"contentUrl\":\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-charts-in-crm-web-ui-with-anychart-js-charting-libraries-1.png\",\"width\":880,\"height\":568,\"caption\":\"Charts in SAP: How to Integrate AnyChart JavaScript Charts in SAP Web UI\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.anychart.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Integrate AnyChart JavaScript Charts in SAP Web UI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.anychart.com\/blog\/#website\",\"url\":\"https:\/\/www.anychart.com\/blog\/\",\"name\":\"AnyChart News\",\"description\":\"AnyChart JS Charts\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.anychart.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.anychart.com\/blog\/#\/schema\/person\/938600f3b0fed85f38725dffc486ef50\",\"name\":\"Sandor van der Neut\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.anychart.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3f11c18488e7a458b2a612678249e10247e231103a5bbe55353f16c63dfdef1e?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3f11c18488e7a458b2a612678249e10247e231103a5bbe55353f16c63dfdef1e?s=96&r=g\",\"caption\":\"Sandor van der Neut\"},\"url\":\"https:\/\/www.anychart.com\/blog\/author\/sandorvanderneut\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SAP Web UI and AnyChart JavaScript Charts: How to Integrate","description":"How to integrate AnyChart in SAP Web UI, feed AnyChart objects with SAP data, respond in SAP backend to events of user interaction with objects in AnyChart.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/","og_locale":"en_US","og_type":"article","og_title":"SAP Web UI and AnyChart JavaScript Charts: How to Integrate","og_description":"How to integrate AnyChart in SAP Web UI, feed AnyChart objects with SAP data, respond in SAP backend to events of user interaction with objects in AnyChart.","og_url":"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/","og_site_name":"AnyChart News","article_publisher":"https:\/\/www.facebook.com\/AnyCharts","article_published_time":"2017-03-30T15:34:21+00:00","og_image":[{"width":880,"height":568,"url":"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-charts-in-crm-web-ui-with-anychart-js-charting-libraries-1.png","type":"image\/png"}],"author":"Sandor van der Neut","twitter_card":"summary_large_image","twitter_creator":"@AnyChart","twitter_site":"@AnyChart","twitter_misc":{"Written by":"Sandor van der Neut","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/#article","isPartOf":{"@id":"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/"},"author":{"name":"Sandor van der Neut","@id":"https:\/\/www.anychart.com\/blog\/#\/schema\/person\/938600f3b0fed85f38725dffc486ef50"},"headline":"How to Integrate AnyChart JavaScript Charts in SAP Web UI","datePublished":"2017-03-30T15:34:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/"},"wordCount":2137,"commentCount":0,"image":{"@id":"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/#primaryimage"},"thumbnailUrl":"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-charts-in-crm-web-ui-with-anychart-js-charting-libraries-1.png","keywords":["AnyChart","bar chart","bar charts","Business Intelligence","column charts","Dashboards","Data Visualization","HTML5","html5 charts","html5 dashboards","integration","interactive data visualization","interactive html5 dashboard","JavaScript","javascript charting","JavaScript charting library","javascript charts","javascript dashboards","javascript map","js chart","js charting","js charts","js maps","sap web ui","Tips and tricks","tutorial"],"articleSection":["AnyChart Charting Component","AnyGantt","AnyMap","AnyStock","Business Intelligence","Dashboards","HTML5","JavaScript","Tips and Tricks"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/","url":"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/","name":"SAP Web UI and AnyChart JavaScript Charts: How to Integrate","isPartOf":{"@id":"https:\/\/www.anychart.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/#primaryimage"},"image":{"@id":"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/#primaryimage"},"thumbnailUrl":"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-charts-in-crm-web-ui-with-anychart-js-charting-libraries-1.png","datePublished":"2017-03-30T15:34:21+00:00","author":{"@id":"https:\/\/www.anychart.com\/blog\/#\/schema\/person\/938600f3b0fed85f38725dffc486ef50"},"description":"How to integrate AnyChart in SAP Web UI, feed AnyChart objects with SAP data, respond in SAP backend to events of user interaction with objects in AnyChart.","breadcrumb":{"@id":"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/#primaryimage","url":"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-charts-in-crm-web-ui-with-anychart-js-charting-libraries-1.png","contentUrl":"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2017\/03\/sap-charts-in-crm-web-ui-with-anychart-js-charting-libraries-1.png","width":880,"height":568,"caption":"Charts in SAP: How to Integrate AnyChart JavaScript Charts in SAP Web UI"},{"@type":"BreadcrumbList","@id":"https:\/\/www.anychart.com\/blog\/2017\/03\/30\/integrate-anychart-js-charts-sap-web-ui\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.anychart.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Integrate AnyChart JavaScript Charts in SAP Web UI"}]},{"@type":"WebSite","@id":"https:\/\/www.anychart.com\/blog\/#website","url":"https:\/\/www.anychart.com\/blog\/","name":"AnyChart News","description":"AnyChart JS Charts","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.anychart.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.anychart.com\/blog\/#\/schema\/person\/938600f3b0fed85f38725dffc486ef50","name":"Sandor van der Neut","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.anychart.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/3f11c18488e7a458b2a612678249e10247e231103a5bbe55353f16c63dfdef1e?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3f11c18488e7a458b2a612678249e10247e231103a5bbe55353f16c63dfdef1e?s=96&r=g","caption":"Sandor van der Neut"},"url":"https:\/\/www.anychart.com\/blog\/author\/sandorvanderneut\/"}]}},"_links":{"self":[{"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/posts\/3092","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/comments?post=3092"}],"version-history":[{"count":37,"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/posts\/3092\/revisions"}],"predecessor-version":[{"id":3395,"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/posts\/3092\/revisions\/3395"}],"wp:attachment":[{"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/media?parent=3092"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/categories?post=3092"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/tags?post=3092"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}