2

我正在尝试在 Rally 中创建一个自定义 HTML 应用程序,以通过 Add New 组件创建一个用户故事,并使用 JQuery 和 YQL JSON 查询从外部源绘制数据。

这个过程对于预先填写的名称、描述和注释来说是一个奇迹。但是,目前 Owner 进行预填充的唯一方法是使用 Object Dropdown 手动选择用户。我希望能够从同一个外部来源中提取所有者。

目前这是测试理论的虚拟代码:

var statement = "select * from html where url='" + value + "' and xpath='//h1'";
        document.getElementById('statement').innerHTML = statement;
        $.queryYQL(statement, "json", function (data) {
            var item = data.query.results.h1;  
            for(var i=0;i<item.length;i++){  
                title = item[i].content; 
                style = item[i].style;
                output += "<h3>"+title +"<br />"+ style +"</h3>"; 
            }
            document.getElementById('results').innerHTML = output;   
        });

function onAddNewPreCreate(addNew, eventArgs) {
        eventArgs.item["Name"] = title;
        eventArgs.item["Description"] = output;
        eventArgs.item["Notes"] = style;
        eventArgs.item["Owner"] = user;
    }

'value' 变量是通过文本框设置的,用户可以在其中输入他们想要从中获取外部数据的 URL。

用户变量通过下拉菜单设置。我尝试用与 Rally 中的用户完全相同的显示名称替换用户变量,例如 eventArgs.item["Owner"] = "User Name"; 但这会导致创建时用户故事的所有者为空白。

关于如何实现这一点的任何想法?

4

1 回答 1

0

由于用户是 Rally 中的对象,因此您不能将 Artifact 的 Owner 属性设置为 Rally 用户名的字符串,而是必须将 Owner 设置为对有效 Rally 用户的引用,以 ref 的形式:/user/12345678910其中 long integer 是感兴趣的用户的对象 ID。您可以使用 rallyDataSource 和 AppSDK 查询 Rally User Name 的字符串值,获取所需的 ref。

我包含了一个基本示例,该示例说明了采用电子邮件格式的用户名并查询 Rally 以获取对所需用户对象的引用的想法。该示例使用一个简单的 DOM<select>组件来模拟用户名数据的“外部”源(在您的情况下,通过带有 YQL JSON 的 JQuery 填充)。这些示例代替 AppSDK ObjectDropdown 执行此操作,尽管这是完成此操作的最简单方法,但正如您所指出的,它不适合您的需求,因为您正在轮询外部源作为用户选择器的源。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- Copyright (c) 2011 Rally Software Development Corp. All rights reserved -->
<html>
<head>
    <title>Component Example: Add New User Story, &quotExternal&quot User Chooser</title>
    <meta name="Name" content="Component Example: Add New User Story, 'External' User Chooser" />
    <meta name="Version" content="2012.1" />
    <meta name="Vendor" content="Rally Labs" />
    <script type="text/javascript" src="https://rally1.rallydev.com/apps/1.26/sdk.js"></script>
    <script type="text/javascript">

      // Global variables to store Reference to selected User
      var userRef = null;
      var rallyDataSource;

    var getUserRef = function(results) {      
        var user = results.users[0];
        userRef = user._ref;
    };

    function userSelectChanged() {

        var userChooser = document.getElementById("userChooser");
        var strUser = userChooser.options[userChooser.selectedIndex].value;

        queryString = '(UserName = "' + strUser + '")';

        var userQueryConfig = { 
          type : 'user',
          key : 'users',
          fetch: 'UserName,DisplayName,Role',
          query: queryString
        };

        rallyDataSource.findAll(userQueryConfig, getUserRef);
    }

    function onAddNewAdd(addNew, eventArgs){      
        var createdItem = eventArgs.item;
        var createdFormattedId = createdItem.FormattedID;       
        alert("Created new User Story with Formatted ID: " + createdFormattedId);
    }

    function onAddNewPreCreate(addNew, eventArgs)
    {
        // Grab Rally ref of User selected in HTML dropdown
        // set it as Owner attribute of created User Story
        eventArgs.item["Owner"] = userRef;
    }
    function onLoad() {

        rallyDataSource = new rally.sdk.data.RallyDataSource('__WORKSPACE_OID__',
                '__PROJECT_OID__',
                '__PROJECT_SCOPING_UP__',
                '__PROJECT_SCOPING_DOWN__');

        var addNewConfig = {
           types : ["HierarchicalRequirement"]
        };

        // Populate userRef from Rally for default selected user:
        userSelectChanged();

        var addNew = new rally.sdk.ui.AddNewArtifact(addNewConfig, rallyDataSource);
        addNew.addEventListener("onAdd",onAddNewAdd);
        addNew.addEventListener('onPreCreate', onAddNewPreCreate);
        addNew.display("addNewDiv");


    }

    rally.addOnLoad(onLoad);

    </script>
</head>
<body>
<div id="addNewDiv"></div>
<div id="userChooserDiv">
Select a Rally User as Story Owner:
<select id="userChooser" onChange="userSelectChanged()">
  <option selected value="user1@company.com">user1@company.com</option>
  <option value="user2@company.com">user2@company.com</option>
  <option value="user3@company.com">user3@company.com</option>
</select>
</body>
</html>
于 2012-05-29T03:12:13.547 回答