4

カタログアプリかんばんボードの修正版であるカスタムアプリケーションをRallyで作成しました。StandardCardRenderedを使用して、フィールドを追加したり、フォーマットを変更したり、オブジェクトを非表示にしたりして拡張しました。「最後の列の移動からの日数」コードを複製しようとしていますが、RevisionHistoryオブジェクトが空のように見えるため、実際には「ストーリーが作成されてからの日数」を計算しています。「リスト列が移動してからの日数」を正しく計算するにはどうすればよいですか?

すべての計算ロジックはthis._getColumnAgeDays関数に格納され、CreationDateとRevisionHistoryをFetchに含めましたが、これらのフィールドはカタログアプリかんばんボードのコードでは必要ありませんでした。以下はコードのサンプルです。

<!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 に答える