Rally SDK 1.x - 获取偏好以扩大/缩小项目范围

时间:2012-11-30 20:27:31

标签: javascript preferences rally

我一直在使用sdk 1.32定制AgileEVM应用程序,我一直在使用首选项来存储用户将设置的各种值(多个可计费率,非全时资源等)。以下是我创建首选项的方法:

_rallyDataSource.create("preference",
{
    Name: 'BillableRate',
    Project: '/project/__PROJECT_OID__',
    Value: 0
}, function(results) { isTeamLevel = results; } );

工作空间的结构是父项目有多个轨道,而这些轨道有多个团队。我希望应用程序在项目层次结构的每个级别上计算适当的EVM数据。我遇到了一个问题,我无法检索当前项目的首选项及其所有子项目。 PROJECT_SCOPING_DOWN 设置为true。似乎偏好的处理方式与故事/任务/等不同。

以下是我获得偏好的方式:

var queryConf = {type: 'Preference',
                 key :'billableRate',
                 query:'(Project = "/project/__PROJECT_OID__")',
                 fetch:true};

_rallyDataSource.findAll(queryConf, preferencesRetrievedCallback);

如果我在查询中包含项目oid,我只获得与该项目相关的首选项,而不是任何子项目。如果我从查询中删除项目oid,它将返回每个首选项,而不管层次结构如何。

我还尝试使用CreateAppPreference和GetAppPreferences完成此操作,但它似乎表现出相同的行为。

我的问题是,我在这里做错了吗?如果没有,这是预期的功能,那么我如何最好地存储这些变量,以便它们在项目结构的每个级别正确汇总?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

Preference WSAPI端点有点独特,因为它不使用url中传递的任何工作空间或项目范围信息,除了上面的显式查询:

 (Project = /project/12345)

您可以使用 PROJECT_OIDS_IN_SCOPE hangman variable并构建一个大的OR'd查询,但如果您在范围内有很多项目,请求可能会因为太大而失败。

var queries = [];
var projectOids = '__PROJECT_OIDS_IN_SCOPE__'.split(',');
rally.forEach(projectOids, function(projectOid) {
    queries.push('Project = /project/' + projectOid);
});
var query = rally.sdk.util.Query.or(queries);

否则,您可以为范围内的每个项目创建一个新的首选项请求,就像您为当前项目所做的那样。

另一种选择是将pref保存为工作空间pref,并将值设为json对象,其中键为项目oid,值为值...