我一直在使用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完成此操作,但它似乎表现出相同的行为。
我的问题是,我在这里做错了吗?如果没有,这是预期的功能,那么我如何最好地存储这些变量,以便它们在项目结构的每个级别正确汇总?
提前感谢您的帮助。
答案 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,值为值...