我一直在使用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来实现这一点,但它似乎表现出了相同的行为。
我的问题是,我在这里做错了什么吗?如果不是,并且这是预期的功能,那么我如何最好地存储这些变量,以便它们在项目结构的每个级别都能正确地汇总?
提前感谢您的帮助。
Preference WSAPI端点有点独特,因为它不使用url中传递的任何工作区或项目范围信息,除了上面的显式查询:
(Project = /project/12345)
您可以使用PROJECT_OIDS_IN_SCOPEhangman变量并构造一个大型OR查询,尽管如果您的范围内有很多项目,请求可能会失败,因为它太大了。。。
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,值为值。。。