2012-01-03 2 views
3

Я создал собственное приложение в ралли, которое является модифицированной версией приложения Kanban Board. Я взял StandardCardRendered и расширил его, добавив поля, изменив форматирование и скрыв объекты. Я пытаюсь дублировать код «Дни после последнего столбца», и мой объект RevisionHistory кажется пустым, поэтому я действительно просто вычисляю «Дни с момента создания истории». Как правильно рассчитать «Дни после переезда столбцов списка»?Ралли: пусто История изменений в StandardCardRenderer

Вся моя логика вычислений хранится в функции this._getColumnAgeDays, и я включил CreationDate и RevisionHistory в свой Fetch, но эти поля не были необходимы в коде для Catalog App Kanban Board. Ниже приведен образец кода.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head> 
    <title>App Example: Test</title> 
    <meta name="Name" content="App Example: Test" /> 
    <meta name="Vendor" content="Test" /> 
    <script type="text/javascript" src="/apps/1.26/sdk.js"></script> 
    <script type="text/javascript"> 

     var EnhancedCardRenderer = function(column, item, options) 
     { 
      rally.sdk.ui.cardboard.BasicCardRenderer.call(this, column, item, options); 
      var that = this; 

      this.getCardBody = function() 
      { 
       var card = document.createElement("div"); 
       card.innerHTML = item.Name; 

       // Add card footer. 
       var CardFooterDiv = document.createElement("div"); 
       dojo.addClass(CardFooterDiv, 'footerCardBorder'); 
       dojo.addClass(CardFooterDiv, 'footerCardFormat'); 
       var DaysMessage = "Days: " + that._getColumnAgeDays(); 
       CardFooterDiv.appendChild(document.createTextNode(DaysMessage)); 
       card.appendChild(CardFooterDiv); 

       return card; 
      }; 

      this._getColumnAgeDays = function() 
      { 
       var daysOld = 0; 

       function getLastStateChange() { 
        var revisions = item.RevisionHistory.Revisions; 
        var lastStateChangeDate = ""; 

        rally.forEach(revisions, function(revision) { 
         if (lastStateChangeDate.length === 0) { 
          var attr = options.attribute.toUpperCase(); 

          if (revision.Description.indexOf(attr + " changed from") !== -1) { 
           lastStateChangeDate = revision.CreationDate; 
          } 
          if (revision.Description.indexOf(attr + " added") !== -1) { 
           lastStateChangeDate = revision.CreationDate; 
          } 
         } 
        }); 
        return lastStateChangeDate || item.CreationDate; 
       } 

       var lastStateDate = getLastStateChange(); 

       var lastUpdateDate = rally.sdk.util.DateTime.fromIsoString(lastStateDate); 
       return rally.sdk.util.DateTime.getDifference(new Date(), lastUpdateDate, "day"); 
      }; 

     }; 


    function onLoad() { 
     var cardboard; 

     var rallyDataSource = new rally.sdk.data.RallyDataSource('__WORKSPACE_OID__', 
'__PROJECT_OID__', 
'__PROJECT_SCOPING_UP__', 
'__PROJECT_SCOPING_DOWN__'); 
     var cardboardConfig = { 
      attribute: "Kanban", 


    cardRenderer:EnhancedCardRenderer, 
      fetch:"Name,FormattedID,Owner,ObjectID,CreationDate,RevisionHistory,Revisions" 
      }; 
    cardboardConfig.cardOptions = { attribute: cardboardConfig.attribute };  
    cardboard = new rally.sdk.ui.CardBoard(cardboardConfig, rallyDataSource); 
    cardboard.display(dojo.body()); 
    } 
     rally.addOnLoad(onLoad); 

    </script> 
    <style type="text/css"> 


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

В чем проблема? –

+0

Как рассчитать код «Дни после последнего столбца»? * Я пересмотрел сообщение, чтобы сделать вопрос более ясным. Спасибо. * –

ответ

2

Вы хотите добавить исправления к своей выборке. Причина, по которой это работает в приложении Kanban, заключается в том, что компонент CardBoard, на котором он построен, делает это за кулисами автоматически.

Обратите внимание, что извлечение истории изменений/ревизий может быть дорогостоящей операцией - именно поэтому Канбан сначала загружает исходные данные, а затем, после того, как доска отображается, делает вторичные запросы для сбора данных о старом из истории ревизий.

+1

Добавление изменений не разрешило проблему для меня. Это приводит к тому, что первый столбец возвращает все пробелы, а остальные столбцы переходят в постоянное состояние загрузки. Я пересмотрел свой пример кода, чтобы снять все изменения, внесенные мной на доску Kanban, чтобы упростить код. Можете ли вы опубликовать измененную версию, которая работает? –

+1

В вашем коде была ошибка скрипта из-за того, что никакие параметры не передавались в средство визуализации карт. Вы можете исправить это, добавив следующий код сразу после создания картонаConfig: cardboardConfig.cardOptions = { атрибут: картонConfig.attribute }; –

+0

Спасибо. Я обновил сценарий, который я разместил выше. Он по-прежнему не правильно вычисляет дату и включение изменений в инструкцию fetch продолжает вызывать зависание пользовательского приложения. –

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