我正在尝试在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, "External" 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/