Javascript 所有者下拉列表不过滤故事纸板
我构建了一个定制的纸板mashup来显示“提交”迭代中的所有用户故事,这些故事属于当前项目或任何子项目。这样做效果很好。然后,我添加了一个所有者下拉框(仅限于团队成员),以过滤纸板上的故事。生成的查询值似乎格式良好,但没有显示任何故事。我使用了一个警报来复制查询字符串并将其粘贴到自定义网格中,该网格返回预期的故事列表 下面是我的代码。感谢您的帮助Javascript 所有者下拉列表不过滤故事纸板,javascript,rally,Javascript,Rally,我构建了一个定制的纸板mashup来显示“提交”迭代中的所有用户故事,这些故事属于当前项目或任何子项目。这样做效果很好。然后,我添加了一个所有者下拉框(仅限于团队成员),以过滤纸板上的故事。生成的查询值似乎格式良好,但没有显示任何故事。我使用了一个警报来复制查询字符串并将其粘贴到自定义网格中,该网格返回预期的故事列表 下面是我的代码。感谢您的帮助 var rallyDataSource; var纸板; var所有者下拉列表; 函数(){ var cardboardConfig={ 类型:[“
var rallyDataSource;
var纸板;
var所有者下拉列表;
函数(){
var cardboardConfig={
类型:[“缺陷”、“层次要求”],
属性:“ScheduleState”,
fetch:“名称、格式化ID、所有者、对象ID”
};
var query=rally.sdk.util.query.and(['Iteration.Name!=“”,'Iteration.State=“Committed”]”);
如果(所有者下拉列表){
var ownerQuery=ownerDropdown.getValue();
如果(ownerQuery!=“全部”){
query='('+query+'和Owner.Name=“'+ownerQuery+'”);
}
}
cardboardConfig.query=query;
如果(!硬纸板){
cardboard=新的rally.sdk.ui.cardboard(cardboardConfig,rallyDataSource);
硬纸板。显示(“cardboardDiv”);
}否则{
纸板。刷新(cardboardConfig);
}
}
函数buildOwnerDropdown(){
var teamMembersQuery={
关键:“团队成员”,
类型:“用户”,
获取:“用户名,显示名称”,
查询:'(团队成员身份=/project/\uuuuuu project\uuuuuuuuuuu)
};
rallyDataSource.findAll(teamMembersQuery,函数(结果){
var ownerietems=[{label:“--ALL--”,值:“ALL”}];
rally.forEach(results.teamMembers,函数(teamMember){
push({label:teamMember.DisplayName,value:teamMember.UserName});
});
ownerItems.sort();
var ownerDropdownConfig={
showLabel:true,
标签:“所有者:”,
项目:所有者
};
ownerDropdown=new rally.sdk.ui.basic.Dropdown(ownerDropdownConfig);
显示(“ownerDropdownDiv”);
});
}
函数onLoad(){
rallyDataSource=新建rally.sdk.data.rallyDataSource(
“工作区”OID,
'项目''OID'',
“项目、范围界定、向上”,
"项目"范围界定",;
buildOwnerDropdown();
刷新硬纸板();
}
拉力。加载(加载);
你真的很接近目标-问题在于:
var query = rally.sdk.util.Query.and(['Iteration.Name != ""', 'Iteration.State = "Committed"']);
if (ownerDropdown) {
var ownerQuery = ownerDropdown.getValue();
if (ownerQuery != 'ALL') {
query = '(' + query + ' AND Owner.Name = "' + ownerQuery + '")';
}
}
在添加另一个AND条件时,Rally的查询语法需要另一组嵌套的括号。因此,当您在第三个条件上连接时,您将得到一个查询子句,如下所示:
((Iteration.Name!=“”)和(Iteration.State=“Committed”))和(Owner.Name=“”user@company.com“”
当它需要看起来像这样时:
(((Iteration.Name!=“”)和(Iteration.State=“Committed”))和(Owner.Name=“”user@company.com)
我稍微修改了refreshcardcard()函数的查询逻辑,如下所示,您的代码现在似乎适合我
....
var queryArray = new Array('Iteration.Name != ""', 'Iteration.State = "Committed"');
var query;
var selectedOwner = ownerDropdown.getValue();
if (ownerDropdown) {
if (selectedOwner != 'ALL') {
var ownerClause = 'Owner.Name = "' + selectedOwner + '"';
queryArray.push(ownerClause);
}
}
query = rally.sdk.util.Query.and(queryArray);
cardboardConfig.query = query;
....
非常感谢你。当你的头撞在墙上,却发现你漏掉了一个括号、逗号或其他什么东西,这总是令人谦卑的……很高兴能帮上忙——我们都去过:)
....
var queryArray = new Array('Iteration.Name != ""', 'Iteration.State = "Committed"');
var query;
var selectedOwner = ownerDropdown.getValue();
if (ownerDropdown) {
if (selectedOwner != 'ALL') {
var ownerClause = 'Owner.Name = "' + selectedOwner + '"';
queryArray.push(ownerClause);
}
}
query = rally.sdk.util.Query.and(queryArray);
cardboardConfig.query = query;
....