2016-12-14 10 views
1

Я пытаюсь создать страницу ралли, которая отображает пользовательские данные и позволяет мне экспортировать данные в Excel. Я боюсь, потому что я могу либо отображать данные в rallygrid (что позволяет мне вычислять пользовательские поля и отображать их), либо я могу отображать данные в rallygridboard (что позволяет мне экспортировать данные), но я не похоже, способны сделать то и другое.Ралли: использование пользовательских данных с TreeStoreBuilder и rallygridboard

У кого-нибудь есть идеи о том, что я могу сделать, чтобы сделать эту работу?

Пользовательские данные, которые я хочу отобразить, это имя инициатора родительской функции пользователя, fwiw.

Существует код в Rally's examples, который показывает, как отображать пользовательские данные в сетке. Я не вставит полный код здесь, чтобы сэкономить место, но вот отношение отрывок из их примера:

 launch: function() { 
       Ext.create('Rally.data.wsapi.Store', { 
        model: 'userstory', 
        autoLoad: true, 
        listeners: { 
         load: this._onDataLoaded, 
         scope: this 
        }, 
        fetch: ['FormattedID', 'Name', 'ScheduleState', 'Tasks', 'Defects'] 
       }); 
      }, 

      _onDataLoaded: function(store, data) { 
       var records = _.map(data, function(record) { 
        //Perform custom actions with the data here 
        //Calculations, etc. 
        return Ext.apply({ 
         TaskCount: record.get('Tasks').Count 
        }, record.getData()); 
       }); 

      this.add({ 
        xtype: 'rallygrid', 
        showPagingToolbar: false, 
        showRowActionsColumn: false, 
        editable: false, 
        store: Ext.create('Rally.data.custom.Store', { 
         data: records 
        }), 

....

Это прекрасно работает с rallygrid, но rallygrid не кажется для поддержки экспорта в csv.

Этот же подход (с использованием _onDataLoaded) не работает, когда я переключаю rallygrid на раллиградную доску. Я получаю сообщение об ошибке в _onDataLoaded в этой строке: var feature = record.get ('Feature'); Ошибка, которую я получаю: «record.get не является функцией»

Вот мой полный код. Обратите внимание, что это закодировано, чтобы получить нужные мне данные (это материал пользовательских сюжетов), а не Tasks (который был только примером примера ралли).

<!DOCTYPE html> 
<html> 
<head> 
<title>Exportable Grid Board Example</title> 

<script type="text/javascript" src="/apps/2.1/sdk.js"></script> 

<script type="text/javascript"> 
    var recordCount = 0; 

    Rally.onReady(function() { 
     Ext.define('Rally.example.ExportableGridBoard', { 
      extend: 'Rally.app.App', 
      componentCls: 'app', 

      launch: function() { 
       Ext.create('Rally.data.wsapi.TreeStoreBuilder').build({ 
        models: ['portfolioitem/feature','userstory'], 
        autoLoad: true, 
        enableHierarchy: true, 
        listeners: { 
         load: this._onDataLoaded, 
         scope: this 
        } 
       }).then({ 
        success: this._onStoreBuilt, 
        scope: this 
       }); 
      }, 

      _onDataLoaded: function (store, data) { 
       var records = _.map(data, function (record) { 
        //Perform custom actions with the data here 
        //Calculations, etc. 

        //console.log(record); 
        recordCount++; 

        var feature = record.get('Feature'); 

        var featureName; 
        var initiative; 
        var initiativeName; 

        if (feature == null) { 
         featureName = ''; 
         initiative = ''; 
         initiativeName = ''; 
        } 
        else { 
         featureName = feature.FormattedID + ' ' + feature.Name; 
         initiative = feature.Parent; 

         if (initiative == null) { 
          initiativeName = ''; 
         } 
         else { 
          initiativeName = initiative.FormattedID + ' ' + initiative.Name; 
         } 

        } 

        return Ext.apply({ 
          featureName: featureName, 
          initiativeName: initiativeName 
         }, record.getData()); 
       }) 
      },//_onDataLoaded 


      _onStoreBuilt: function(store) { 

       //this._onDataLoaded(store, store.data); 

       //console.log('num records: '+ recordCount);//seems to always be 0 

       var modelNames = ['userstory'], 
        context = this.getContext(); 

       this.add({ 
        xtype: 'rallygridboard', 
        context: context, 
        modelNames: modelNames, 
        toggleState: 'grid', 
        stateful: false, 
        plugins: [ 
         { 
          ptype: 'rallygridboardactionsmenu', 
          menuItems: [ 
           { 
            text: 'Export...', 
            handler: function() { 
             window.location = Rally.ui.gridboard.Export.buildCsvExportUrl(
              this.down('rallygridboard').getGridOrBoard()); 
            }, 
            scope: this 
           } 
          ], 
          buttonConfig: { 
           iconCls: 'icon-export' 
          } 
         } 
        ], 
        gridConfig: { 
         store: store, 
         columnCfgs: [ 
          'Name', 
          'ScheduleState', 
          //'c_AffinityEstimate', 
          'PlanEstimate', 
          'Project', 
          'Feature', 
          'Feature.Parent', 
          'featureName', 
          'initiativeName' 
         ] 
        }, 
        height: this.getHeight() 
       }); 
      } 
     }); 


     Rally.launchApp('Rally.example.ExportableGridBoard', { 
      name: 'Exportable Grid Board Example' 
     }); 
    }); 
</script> 

<style type="text/css"> 

</style> 
</head> 
<body></body> 
</html> 
+0

В моем коде выше, у меня есть следующие: 'Функция', ' Feature.Parent', ' FeatureName', ' initiativeName' Это является излишним, но там для отладки. Feature.Parent не работает, и переменные, которые я вычисляю (featureName и InitName), не заполняются, потому что record.get() не работает. – sgeffner

ответ

0

Экспорт данных поддерживается только для сетей, где все данные были заполнены из запроса WSAPI. Чтобы экспортировать свои пользовательские данные, вам придется вручную написать код для создания строки CSV на клиенте, а затем запустить загрузку с использованием URI данных.

Я попытался найти пример приложения, который сделал это, но подошел пустой. Вот описание подхода, хотя:

https://developer.zendesk.com/blog/app-tricks-generate-csv-files-for-download-with-handlebars-and-data-uris

Вы просто перебираю каждую запись в вашей истории, а затем построить, отделенную строку и вы можете ссылаться на результат, или вы можете просто установить window.location к результату.

+0

Спасибо! Это полезно. – sgeffner