4

我在 Rally 中创建了一个自定义应用程序,它是 Catalog App Kanban Board 的修改版本。我采用 StandardCardRendered 并通过添加字段、更改格式和隐藏对象来扩展它。我正在尝试复制“自上次列移动以来的天数”代码,而我的 RevisionHistory 对象似乎是空的,所以我实际上只是在计算“自故事创建以来的天数”。如何正确计算“自列表列移动以来的天数”?

我所有的计算逻辑都存储在 this._getColumnAgeDays 函数中,并且我在 Fetch 中包含了 CreationDate 和 RevisionHistory,但这些字段在 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>
4

1 回答 1

2

您需要将修订添加到您的提取中。这在看板应用程序中起作用的原因是,构建它的 CardBoard 组件在幕后自动执行此操作。

请注意,获取修订历史/修订可能是一项昂贵的操作——这就是看板首先进行初始数据加载的原因,然后在渲染板后发出二次请求以从修订历史中收集老化数据。

于 2012-01-04T00:00:48.653 回答