Rally 链接到附件

Rally 链接到附件,rally,Rally,我正试图找到一种方法,可以找到一个用户故事中可能有的附件链接,但我还没有找到方法。就我所知,当用户故事有附件时,我在该列中得到的唯一内容是“[object]” 似乎没有太多关于抓取附件的内容,如果有人能给我一些启示或给我指出正确的方向,我一定会很感激的 <html> <head> <title>Table</title> <meta name="Name" content="App Example: Table" />

我正试图找到一种方法,可以找到一个用户故事中可能有的附件链接,但我还没有找到方法。就我所知,当用户故事有附件时,我在该列中得到的唯一内容是“[object]”

似乎没有太多关于抓取附件的内容,如果有人能给我一些启示或给我指出正确的方向,我一定会很感激的

<html>
<head>
   <title>Table</title>
   <meta name="Name" content="App Example: Table" />
   <meta name="Version" content="2010.4" />
   <meta name="Vendor" content="Rally Software" />
   <script type="text/javascript" src="https://rally1.rallydev.com/apps/1.24/sdk.js?loginKey=bignumber"></script>  
   <script type="text/javascript">

     function tableExample() {
       var rallyDataSource = new rally.sdk.data.RallyDataSource('12345', '12345',       'True', 'True');
      function itemQuery() {
         var queryObject = {
           key: 'stories',
           type: 'HierarchicalRequirement',
           fetch: 'FormattedID,Name,ScheduleState,Description,Attachments',
           query: '(Name contains "release")'
         };
         rallyDataSource.findAll(queryObject, populateTable);
      }

      function populateTable(results) {
         var tableDiv = document.getElementById('aDiv');
         var config = { columns: 
             [{key: 'FormattedID', header: 'Formatted ID', width: 100}, 
             {key: 'Name', width: 400}, 
             {key: 'ScheduleState', header: 'Schedule State', width: 200},
             {key: 'Description', width: 800},
             {key: 'Attachments', header: 'Attachment Link', width: 200}]};
        var table = new rally.sdk.ui.Table(config);

     table.addRows(results.stories);
         table.display(tableDiv);

      };
      itemQuery();
     }

     rally.addOnLoad(tableExample);
   </script>
</head>
<body>
   <div id="aDiv"></div>
</body>
</html>

桌子
函数tableExample(){
var rallyDataSource=new rally.sdk.data.rallyDataSource('12345','12345','True','True');
函数itemQuery(){
变量queryObject={
关键词:“故事”,
类型:“HierarchycalRequirement”,
fetch:'FormattedID、名称、ScheduleState、描述、附件',
查询:'(名称包含“release”)'
};
findAll(queryObject,populateTable);
}
函数populateTable(结果){
var tableDiv=document.getElementById('aDiv');
var config={列:
[{key:'FormattedID',header:'FormattedID',width:100},
{键:'名称',宽度:400},
{key:'ScheduleState',header:'ScheduleState',宽度:200},
{key:'Description',宽度:800},
{键:“附件”,标题:“附件链接”,宽度:200}]};
var table=new rally.sdk.ui.table(配置);
table.addRows(results.stories);
table.display(tableDiv);
};
itemQuery();
}
rally.addOnLoad(表格示例);

我正在添加一个稍加修改的应用程序示例版本,该版本会进行一些后处理,以提取每个附件的对象ID,并将其放入一些HTML链接中,这些链接会更新到相关的表列中

        <html>
        <head>
           <title>Table</title>
           <meta name="Name" content="App Example: Stories with Attachments" />
           <meta name="Version" content="2010.4" />
           <meta name="Vendor" content="Rally Software" />
           <script type="text/javascript" src="https://rally1.rallydev.com/apps/1.29/sdk.js"></script>
           <script type="text/javascript">

             var table = null;

             function tableExample() {
               var rallyDataSource = new rally.sdk.data.RallyDataSource('__WORKSPACE_OID__',
                                                                                    '__PROJECT_OID__',
                                                                                    '__PROJECT_SCOPING_UP__',
                                                                                    '__PROJECT_SCOPING_DOWN__');
              function itemQuery() {
                 var queryObject = {
                   key: 'stories',
                   type: 'HierarchicalRequirement',
                   fetch: 'FormattedID,Name,ScheduleState,Description,Attachments,ObjectID'
                   // query: '(Name contains "release")'
                 };
                 rallyDataSource.findAll(queryObject, populateTable);
              }

              function populateTable(results) {

                  if (table) {
                      table.destroy();
                  }

                 var tableDiv = document.getElementById('aDiv');

                 var config = { 'columnKeys'    : ['FormattedID',  'Name', 'ScheduleState',   'Attachments'],
                                'columnHeaders' : ['FormattedID',  'Name', 'ScheduleState',   'Attachments'],
                                'columnWidths'  : ['100px',        '400px', '85px',           '300px']
                               };
                 table = new rally.sdk.ui.Table(config);
                 table.addRows(results.stories);

                 for (i=0;i<results.stories.length;i++) {

                     myStory = results.stories[i];
                     myAttachments = results.stories[i].Attachments;

                     myAttachmentHTML = "";
                     for (j=0;j<myAttachments.length;j++) {
                         myAttachmentOID = myAttachments[j].ObjectID;
                         myAttachmentName = myAttachments[j].Name;
                         myAttachmentURL = "https://rally1.rallydev.com/slm/attachment/"+
                                 myAttachmentOID + "/" + myAttachmentName;

                         myAttachmentHTML += "<div><a href='" + myAttachmentURL + "'>" +
                                 myAttachmentName + "</a></div>";

                     }
                     table.setCell(i, 3, myAttachmentHTML);
                 }
                 table.display(tableDiv);

              };
              itemQuery();
             }

             rally.addOnLoad(tableExample);
           </script>
        </head>
        <body>
           <div id="aDiv"></div>
        </body>
        </html>

桌子
var表=null;
函数tableExample(){
var rallyDataSource=new rally.sdk.data.rallyDataSource(“工作区”\u OID”,
'项目''OID'',
“项目、范围界定、向上”,
"项目"范围界定",;
函数itemQuery(){
变量queryObject={
关键词:“故事”,
类型:“HierarchycalRequirement”,
fetch:'FormattedID、名称、ScheduleState、描述、附件、ObjectID'
//查询:'(名称包含“release”)'
};
findAll(queryObject,populateTable);
}
函数populateTable(结果){
如果(表){
表1.destroy();
}
var tableDiv=document.getElementById('aDiv');
变量配置={'columnKeys':['FormattedID','Name','ScheduleState','Attachments'],
'columnHeaders':['FormattedID','Name','ScheduleState','Attachments'],
“columnWidths:['100px','400px','85px','300px']
};
table=new rally.sdk.ui.table(配置);
table.addRows(results.stories);

对于(i=0;iI)应该指出,这个方法:rally.sdk.util.Context.getServerInfo().getSlmUrl()是一种更优雅、更受支持的获取rally服务器本身URL的方法,而不是我发布的示例中的硬编码。。。