VisualForce Google Chart = TypeError: Невозможно прочитать свойство 'length' с неопределенным значением в drawChart - PullRequest
0 голосов
/ 22 февраля 2020

Мы пытаемся создать страницу Visualforce, которая будет содержать график, отображающий данные бюджета. В целях тестирования я хочу отобразить 3 столбца, как определено в приведенном ниже коде.

Выполнение запроса в классе apex из редактора дает ожидаемые результаты. Только график отказывается отображать данные.

В консоли проверки компонентов предусмотрена следующая ошибка: BudgetGraph? Core.apexpages.request.devconsole = 1: 34 Uncaught (в обещании) TypeError: Cannot читать свойство 'длина' из undefined в drawChart (BudgetGraph? core.apexpages.request.devconsole = 1: 34)

Я действительно не могу разобраться с этим простым ...

Страница Visual Force (раздел заголовка):

<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
   // Load Google Chart
  google.charts.load('current', {'packages':['line']});
  google.charts.setOnLoadCallback(drawChart);

  var bdgtData; //Variable to store data
  // Call remote action method
  BudgetGraphController.getBudgetData(function(result, event){
      bdgtData = result; //get data from Apex controller
      },{escape:true});

  // Draw Google chart
  function drawChart() {
      //Create the data table
  var data = new google.visualization.DataTable();
    data.addColumn('string', 'Timing');
    data.addColumn('string', 'Budget Engineering');   
    data.addColumn('string', 'Budget PM');
    //Add datatable rows
    for(i = 0; i< bdgtData.length; i++){
        data.addRow([bdgtData[i].Timing__c, bdgtData[i].Budget_Engineering__c, bdgtData[i].Budget_Project_Management__c]);
    }

    var options = {
      title: 'Project Budget',
      curveType: 'function',
      legend: { position: 'bottom' }
    };

    var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));
    chart.draw(data, google.charts.Line.convertOptions(options));
  }
</script>

Класс Apex (контроллер):

global with sharing class BudgetGraphController {

@RemoteAction
global static List<Budget__c> getBudgetData(){
    List<Budget__c> bdgtGroupList = [Select Timing__c, Budget_Engineering__c, Budget_Project_Management__c From Budget__c ORDER BY Timing__c ASC];
    return bdgtGroupList;
}
...