我正在尝试在Rally中创建一个自定义HTML应用程序,以通过Add New组件创建一个用户案例,并使用带有YQL JSON查询的JQuery从外部源提取数据。

此过程使您对预先填写的名称,说明和注释感到惊奇。但是,所有者预先填充的当前唯一方法是使用“对象下拉列表”手动选择用户。我希望能够从同一外部资源中提取所有者。

目前,这是测试理论的伪代码:

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;
    }


“值”变量是通过文本框设置的,用户可以在其中输入要从中获取外部数据的URL。

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

关于如何实现的任何想法?

最佳答案

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

我已经提供了一个基本示例,该示例说明了采用电子邮件格式的用户名并查询Rally以获取对所需User对象的引用的想法。该示例使用一个简单的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="[email protected]">[email protected]</option>
  <option value="[email protected]">[email protected]</option>
  <option value="[email protected]">[email protected]</option>
</select>
</body>
</html>

关于javascript - 从所有者外部来源获取所有者的onPreCreate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10791996/

10-09 17:56