集会:StandardCardRenderer中的空修订历史

Rally: Empty RevisionHistory in StandardCardRenderer

本文关键字:历史 StandardCardRenderer 集会      更新时间:2023-09-26

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

我所有的计算逻辑都存储在这个里_getColumnAgeDays函数和我在Fetch中包含了CreationDate和RevisionHistory,但这些字段在目录应用看板的代码中是不必要的。下面是一个代码示例。

<!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>

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

请注意,获取修订历史/修订可能是一项昂贵的操作,这就是看板首先加载初始数据,然后在板被呈现后,再次请求从修订历史中收集老化数据的原因。