2016-12-12 1 views
2

Я хочу иметь 100% настраиваемый график в моем приложении Apex. Для этого я хочу добавить Anychart с Java Script и использовать пользовательский xml.Добавить anychart в Apex 5 с помощью Java Script

Я добавил файлы OracleAnyChart.swf и Preloader.swf в общие компоненты -> Файлы статических приложений.

У меня есть этот код под «Выполнить при загрузке страницы»

AnyChart.renderingType = anychart.RenderingType.SVG_PREFERRED; 
var chart = new AnyChart('#APP_IMAGES#OracleAnyChart.swf','#APP_IMAGES#Preloader.swf', 'be_chart'); 
chart.width = 600; 
chart.height = 150; 
chart.messages = { 
loadingConfig: "Loading config...", 
waitingForData: "Waiting for data..."} 
console.log('ID = ' || chart.id); 

var jqxhr = apex.server.process('GET_BEXML', 
           { 
            pageItems: "#BE_DATA" 
           }, 
           { 
            dataType : 'text' 
           } 
           ); 
jqxhr.done(function(pData) { 
         console.log(chart.id); 
         chart.setData($v('BE_DATA')); 
         chart.write('container_be'); 
         //chart.refresh(); 
    }   
    ); 

My На процессе спроса «GET_BEXML» задает элемент BE_DATA с правильным XML, но график не делает.

Chart not rendering properly

Я пытался позвонить

var chart = getChartById('be_chart'); 
chart.setData($v('BE_DATA')); 
chart.refresh(); 

от динамического действия, но оказалось, что я не могу назвать какие-либо функции AnyChart в рамках динамического действия, он говорит „getCharById ее не определен“.

Я что-то упустил?

ответ

0

Вы вызываете метод, который не существует. Вы должны ссылаться на объект AnyChart, как это (и, возможно, изменить имя переменной, так что вы не перезаписать исходный объект диаграммы):

var mychart = AnyChart.getChartById('be_chart'); 

На самом деле ...
Я ответил на причину для вас не удалось получить вызов getChartById.
Я понял, что это не вопрос.


Вы пытались передать данные непосредственно в функцию обратного вызова done()?
Этот метод работает. И что ДЕЙСТВИТЕЛЬНО здорово, есть NO 32K LIMIT по данным, которые вы можете вернуть.

-- Apex Application Process "GET_BEXML" 
declare 
    v_limit constant pls_integer := 32767; 
    v_buff varchar2(32767); 
    v_data clob; 
    v_os pls_integer := 1; 
    v_len pls_integer := 0; 
begin 
    v_data := get_anydata_xml_doc; -- a PL/SQL function returning your AnyData xml 
    v_len := dbms_lob.getlength(v_data); 
    while v_os < v_len 
    loop 
     dbms_lob.read(v_data, v_limit, v_os, v_buff); 
     htp.prn(v_buff); 
     v_os := v_os + v_limit; 
    end loop; 
end; 

// "Execute when Page Loads" 
    var jqxhr = apex.server.process('GET_BEXML', {}, {dataType:'text'}); 
    jqxhr.done(function(pData) { 
     console.log(pData.substring(1,50)); 
     chart.setData(pData); 
     chart.write('container_be'); 
    }); 

Конечно, вы могли бы создать вам AnyDATA XML CLOB на лету в Апекс, а также.

Смежные вопросы