Javascript 所有者下拉列表不过滤故事纸板

Javascript 所有者下拉列表不过滤故事纸板,javascript,rally,Javascript,Rally,我构建了一个定制的纸板mashup来显示“提交”迭代中的所有用户故事,这些故事属于当前项目或任何子项目。这样做效果很好。然后,我添加了一个所有者下拉框(仅限于团队成员),以过滤纸板上的故事。生成的查询值似乎格式良好,但没有显示任何故事。我使用了一个警报来复制查询字符串并将其粘贴到自定义网格中,该网格返回预期的故事列表 下面是我的代码。感谢您的帮助 var rallyDataSource; var纸板; var所有者下拉列表; 函数(){ var cardboardConfig={ 类型:[“

我构建了一个定制的纸板mashup来显示“提交”迭代中的所有用户故事,这些故事属于当前项目或任何子项目。这样做效果很好。然后,我添加了一个所有者下拉框(仅限于团队成员),以过滤纸板上的故事。生成的查询值似乎格式良好,但没有显示任何故事。我使用了一个警报来复制查询字符串并将其粘贴到自定义网格中,该网格返回预期的故事列表

下面是我的代码。感谢您的帮助


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