2

我一直致力于使用 sdk 1.32 自定义 AgileEVM 应用程序,并且我一直在使用首选项来存储用户将设置的各种值(多个计费费率、非全职资源等)。这是我创建首选项的方式:

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

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

这是我获得偏好的方式:

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

_rallyDataSource.findAll(queryConf, preferencesRetrievedCallback);

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

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

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

在此先感谢您的帮助。

4

1 回答 1

0

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

 (Project = /project/12345)

您可以使用PROJECT_OIDS_IN_SCOPE hangman 变量并构造一个大型 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);

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

另一种选择是将首选项保存为工作区首选项,并将值作为 json 对象,键是项目 oid,值是值...

于 2012-12-01T15:52:15.910 回答