需要 Rally HTML 来返回 url 而不是用于附件的字符串

问题描述

我正在为一个集会应用程序使用自定义 html 来查询和返回带有附件的对象列表。非常适合我正在做的事情,但是虽然在 Rally 的屏幕上我可以单击名称,它是指向附件的链接,但是当我抓取列表并将其粘贴到 excel 时,我最终只得到了附件的名称,我真的需要一个附件链接

谁能帮我处理这个 html,以便它返回 Rally 中的实际 url,而不是后面带有 url 的名称?查看这些图片enter image description here。顶部代表当前结果,底部代表期望结果。

     <html>
        <head>
           <title>Story Table</title>
           <Meta name="Name" content="Stories with Attachments" />
           <Meta name="Version" content="2014.2" />
           <Meta name="vendor" content="Rally Software" />
       <script type="text/javascript" src="https://rally1.rallydev.com/apps/1.32/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: 'theItems',type: iType,fetch: 'FormattedID,Name,State,ScheduleState,Description,Attachments,ObjectID',query: Qvalue
                 };
                 rallyDataSource.findAll(queryObject,populateTable);
              }
              function populateTable(results) {
                  if (table) {
                      table.destroy();
                  }
                  var col3 = 'ScheduleState';
                  if (iType == 'task') {
                    col3 = 'State';
                  }
                 var tableDiv = document.getElementById('aDiv');
                 var config = { 'columnKeys'    : ['FormattedID','Name',col3,'Attachments'],'columnHeaders' : ['FormattedID','columnWidths'  : ['100px','400px','85px','300px']
                               };
                 table = new rally.sdk.ui.Table(config);
                 table.addRows(results.theItems);
                 for (i=0;i<results.theItems.length;i++) {
                     myStory = results.theItems[i];
                     myStoryURL = rally.sdk.util.Context.getServerInfo().getUrl()+"/#/" + '__PROJECT_OID__' + "/detail/"+ iType + "/"+myStory.ObjectID;
                     myStoryHTML = "<div><a href='" + myStoryURL + "' target='_top'> " +
                                 myStory.FormattedID + "</a></div>";
                     myAttachments = results.theItems[i].Attachments;
                     myAttachmentHTML = "";
                     for (j=0;j<myAttachments.length;j++) {
                         myAttachmentOID = myAttachments[j].ObjectID;
                         myAttachmentName = myAttachments[j].Name;
                         myAttachmentURL = rally.sdk.util.Context.getServerInfo().getSlmUrl()+"/attachment/"+
                                 myAttachmentOID + "/" + myAttachmentName;

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

                     }
                     table.setCell(i,3,myAttachmentHTML);
                     table.setCell(i,myStoryHTML);
                 }
                 table.display(tableDiv);
              };
              itemQuery();
             }
             rally.addOnLoad(tableExample);
            </script>

            <script type="text/javascript">
                var Qvalue = '';
                function textBoxChanged(tb,args) {
                    Qvalue = args.value;
                }
                function QBox() {
                    var config = {
                        label : 'Query String: ',value : '',width: 500,showLabel: true
                    };
                    var textBox = new rally.sdk.ui.basic.TextBox(config);
                    textBox.display("textBox",textBoxChanged);
                }
                rally.addOnLoad(QBox);
            </script>
            <script type="text/javascript">
                var iType = 'hierarchicalrequirement';
                function typeSelect() {
                function onChanged(c,args) {
                    iType = args.value;
                }
                var config = {
                    radios: [{label:"Stories",value:"hierarchicalrequirement"},{label:"defects",value:"defect"},{label:"Tasks",value:"task"},{label:"Test Cases",value:"testcase"}],labelPosition: "after",rememberChecked: false,defaultValue: "hierarchicalrequirement",groupName: "itemTypes"
                };
                var radioButtonGroup = new rally.sdk.ui.basic.RadioButtonGroup(config);
                radioButtonGroup.display("itemGroup",onChanged);
                }
                rally.addOnLoad(typeSelect);
            </script>
</head>
    <body>
        <p><div id="itemGroup"></div><span id="textBox"></span>
        <button onclick="tableExample()">Refresh</button>
            <a href="http://www.rallydev.com/help/grid-queries" target="_blank">Query Help</a>
        <br></p>
        <div id="aDiv" style="overflow-y: auto;"></div>
    </body>
</html>

解决方法

我假设您仍然希望能够点击应用内的附件链接。

所以尝试替换这行代码:

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

有了这个:

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