Javascript 从外部源提取所有者的onPreCreate

Javascript 从外部源提取所有者的onPreCreate,javascript,rally,Javascript,Rally,我正在尝试在Rally中创建一个自定义HTML应用程序,通过AddNewComponent创建一个用户故事,并使用JQuery和YQLJSON查询从外部源获取数据 这个过程对于预先填写的名称、描述和注释来说是一个奇迹。但是,目前Owner works预填充的唯一方法是使用对象下拉列表手动选择用户。我希望能够从相同的外部源中提取所有者 目前,这是测试理论的虚拟代码: var statement = "select * from html where url='" + value + "' and

我正在尝试在Rally中创建一个自定义HTML应用程序,通过AddNewComponent创建一个用户故事,并使用JQuery和YQLJSON查询从外部源获取数据

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

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

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;
    }
var statement=“select*from html,其中url=”“+value+”,xpath=”//h1';
document.getElementById('statement')。innerHTML=statement;
$.QueryQL(语句,“json”,函数(数据){
var item=data.query.results.h1;

对于(var i=0;i由于用户是Rally中的对象,因此不能将工件的Owner属性设置为Rally用户名的字符串,相反,必须将Owner设置为有效Rally用户的引用,格式为ref:
/User/12345678910
,其中长整数是感兴趣用户的对象ID。您可以使用rallyDataSource和AppSDK对用户名的字符串值进行查询,并获取所需的ref

我提供了一个基本示例,说明了获取电子邮件格式的用户名并查询所需用户对象的引用的想法。该示例使用一个简单的DOM
组件来模拟用户名数据的“外部”源(在您的示例中,通过JQuery填充YQL JSON)。这些示例代替了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>

组件示例:添加新用户故事,“外部”用户选择器
//用于存储对所选用户的引用的全局变量
var userRef=null;
var rallyDataSource;
var getUserRef=函数(结果){
var user=results.users[0];
userRef=用户。\u ref;
};
函数userSelectChanged(){
var userChooser=document.getElementById(“userChooser”);
var strUser=userChooser.options[userChooser.selectedIndex].value;
queryString='(UserName=“”+strUser+”);
var userQueryConfig={
键入:“用户”,
关键字:“用户”,
获取:“用户名、显示名、角色”,
查询:查询字符串
};
findAll(userQueryConfig,getUserRef);
}
函数onAddNewAdd(addNew,eventArgs){
var createdItem=eventArgs.item;
var createdFormattedId=createdItem.FormattedID;
警报(“使用格式化ID创建了新用户故事:“+createdFormattedId”);
}
onAddNewPreCreate函数(addNew、eventArgs)
{
//在HTML下拉列表中获取所选用户的参考
//将其设置为已创建用户故事的所有者属性
eventArgs.item[“Owner”]=userRef;
}
函数onLoad(){
RALLYDATASOUCE=新的rally.sdk.data.RALLYDATASOUCE(“\uuuu工作区\uu OID”,
'项目''OID'',
“项目、范围界定、向上”,
"项目"范围界定",;
var addNewConfig={
类型:[“层次结构要求”]
};
//从Rally为默认选定用户填充userRef:
userSelectChanged();
var addNew=new rally.sdk.ui.AddNewArtifact(addNewConfig,rallyDataSource);
addNew.addEventListener(“onAdd”,onAddNewAdd);
addNew.addEventListener('onPreCreate',onAddNewPreCreate);
addNew.display(“addNewDiv”);
}
拉力。加载(加载);
选择Rally用户作为故事所有者:
user1@company.com
user2@company.com
user3@company.com

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

我提供了一个基本示例,说明了获取电子邮件格式的用户名并查询所需用户对象的引用的想法。该示例使用一个简单的DOM
组件来模拟用户名数据的“外部”源(在您的示例中,通过JQuery填充YQL JSON)。这些示例代替了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>

组件示例:添加新用户故事,“外部”用户选择器
//用于存储对所选用户的引用的全局变量
var userRef=null;
var rallyDataSource;
var getUserRef=函数(结果){
var user=results.users[0];
userRef=用户。\u ref;
};
函数userSelectChanged(){
var userChooser=document.getElementById(“userChooser”);
var strUser=userChooser.options[userChooser.selectedIndex].value;
queryString='(UserName=“”+strUser+”);
var userQueryConfig={
键入:“用户”,
关键字:“用户”,
获取:“用户名、显示名、角色”,
查询:查询字符串
};
findAll(userQueryConfig,getUserRef);
}
函数onAddNewAdd(addNew,eventArgs){
var createdItem=eventArgs.item;
var createdFormattedId=createdItem.FormattedID;
警报(“使用格式化ID创建了新用户故事:“+createdFormattedId”);
}
功能o