0

我一直在尝试使用 VersionOne 的数据 api,并提出了一个与我们通过 UI 看到的故事或缺陷的 Estimate、Detail Estimate、Done (Actuals)、To Do 和 Allocated To Do 值相匹配的查询。正如您在下面看到的(为了便于阅读而添加了 nl),我在聚合值上放置了过滤器。我想知道是否需要 where 子句,因为聚合过滤器似乎涵盖了它们。无论是否使用 where 子句,它似乎都可以正常工作,因为它返回相同的值(但如果我删除聚合过滤器,它肯定不起作用)。如果我删除 where 子句,有人会评论我是否会遇到一些无法预料的问题吗?

Data/Story/oid-number-portion?
sel=PrimaryWorkitem.Name,
PrimaryWorkitem.Number,
PrimaryWorkitem.AssetState,
PrimaryWorkitem.Status.Name,
PrimaryWorkitem.Number,
PrimaryWorkitem.Scope.Name,
PrimaryWorkitem.Timebox.Name,
PrimaryWorkitem.Team.Name,
PrimaryWorkitem.Priority.Name,
PrimaryWorkitem.Owners.Name,
PrimaryWorkitem.AssetType,
PrimaryWorkitem.Parent.Name,
PrimaryWorkitem.Super.Name,
PrimaryWorkitem.Children,
PrimaryWorkitem.SplitTo,
PrimaryWorkitem.SplitFrom,
PrimaryWorkitem.Estimate,
PrimaryWorkitem.ChildrenMeAndDown,
PrimaryWorkitem.ChildrenMeAndDown[AssetState!='Dead','Deleted'].ToDo.@Sum,
PrimaryWorkitem.Children[AssetState!='Dead','Deleted'].ToDo.@Sum,
PrimaryWorkitem.ChildrenMeAndDown[AssetState!='Dead','Deleted'].Actuals.Value.@Sum,
PrimaryWorkitem.Children[AssetState!='Dead','Deleted'].DetailEstimate.@Sum,
PrimaryWorkitem.ChildrenMeAndDown%[AssetState!='Dead','Deleted'].AllocatedToDo.@Sum,
PrimaryWorkitem.CreateDateUTC,
PrimaryWorkitem.CreatedBy.Name,
PrimaryWorkitem.ChangeDateUTC,
PrimaryWorkitem.ChangedBy.Name
&where=(PrimaryWorkitem.AssetState!='Dead','Deleted';
        PrimaryWorkitem.ChildrenMeAndDown!='Dead','Deleted';
        PrimaryWorkitem.Children!='Dead','Deleted')

杰瑞

4

1 回答 1

0

简短的回答是肯定的,这where是不必要的。它只会减少Stories返回的集合,不会影响关系的结果,就像属性过滤器一样。由于查询的开头包含 OID,因此无论如何您只会在结果集中获得一个项目。

我看到了其他一些改进您的查询的机会。一方面,AssetStateDead包括DeletedTemplate。所以你可以有[AssetState!='Dead'].

您还可以调整对层次导航的使用。例如,您同时请求 theChildrenChildrenMeAndDownas 属性。因为Story,自己没有Children的东西。因此,并返回相同的结果。唯一不同的是它包括您已经在查询的内容。因此,我怀疑这种关系足以满足您的所有用途。SecondaryWorkitemsChildrenStory.ChildrenStory.ChildrenAndDownStory.ChildrenMeAndDownStoryChildren

如果您只阅读 VersionOne,请查看query.v1端点。查询语言基本相同,只是在 HTTP POST 的正文中用 YAML 或 JSON 表示。仅从您的查询中推断,您可能会发现 query.v1 的子查询功能非常方便。

于 2014-09-18T13:30:43.307 回答