无法在内置集会字段上查询/排序"无法读取类com.f4tech.slm.domain.Artifact"的所有实例。

时间:2015-03-31 16:36:16

标签: c# rally

我通过C#dll使用API​​的v2.0。 但是当我通过https://rally1.rallydev.com/slm/doc/webservice/

将查询字符串传递给v2.0 API 时,也会出现此问题

我在神器级别查询因为我需要缺陷和故事。我试着看看Rally前端正在使用什么类型的查询字符串,并将自定义字段和内置字段传递给工件查询。我正在做同样的事情,但是没有找到运气的运气。

我需要能够从查询中过滤掉已发布的项目。此外,我还需要按自定义c_ReleaseType字段以及内置的DragAndDropRank字段进行排序。我猜这是一个问题,因为那些内置字段实际上并不在Artifact对象上,但为什么自定义字段会起作用?它们也不在Artifact对象上。这可能只是一个我无法猜到隐藏在API中的问题。如果我可以根据自定义字段查询这些对象,我希望能够通过内置字段查询它们,即使这些字段不存在于Ancestor对象上。

为了这个例子,我遗漏了一堆设置代码......只留下导致问题的代码。

var request = new Request("Artifact");
request.Order = "DragAndDropRank";  
//"Could not read: could not read all instances of class com.f4tech.slm.domain.Artifact"

当我通过DragAndDropRank行评论Order时,它可以正常工作。


var request = new Request("Artifact");
request.Query = (new Query("c_SomeCustomField", Query.Operator.Equals, "somevalue").
            And(new Query("Release", Query.Operator.Equals, "null"))); 
//"Could not read: could not read all instances of class com.f4tech.slm.domain.Artifact"

当我从查询中取出发布部分时,它可以正常工作。


var request = new Request("Artifact");
request.Query = (((new Query("TypeDefOid", Query.Operator.Equals, "someID"). 
            And(new Query("c_SomeCustomField", Query.Operator.Equals, "somevalue"))).
            And(new Query("DirectChildrenCount", Query.Operator.Equals, "0")))); 
//"Could not read: could not read all instances of class com.f4tech.slm.domain.Artifact"

当我从查询中取出DirectChildrenCount部分时,它可以正常工作。


以下是API调用所展示问题的示例。

https://rally1.rallydev.com/slm/webservice/v2.0/artifact?query=(c_KanbanState%20%3D%20%22Backlog%22)&order=DragAndDropRank&start=1&pagesize=20

当我通过DragAndDropRank查询字符串删除Order时,它可以正常工作。

2 个答案:

答案 0 :(得分:1)

您的问题已包含答案。

UserStory(WS API中的HierarchicalRequirement)和Defect从Artifact继承了它们的一些字段,例如: FormattedID,Name,Description,LastUpdateDate等。您可以在工件类型的上下文中使用这些字段。

您尝试在Artifact对象上访问的字段不存在于其中。它们存在于儿童级别,例如DragAndDropRank,Release,Iteration。在Artifact类型的上下文中不可能使用这些字段。

父对象无法访问特定于子对象的属性。 神器是一种抽象类型。

如果您需要按发布过滤,则需要发出两个单独的请求 - 一个用于故事,另一个用于缺陷。

答案 1 :(得分:1)

我认为你的大部分麻烦都是因为为了使用Artifact端点,你需要指定一个types参数,以便它知道要包含哪些工件子类。

只需将其添加到上面的示例WSAPI查询中,就会导致它成功返回:

https://rally1.rallydev.com/slm/webservice/v2.0/artifact?query=(c_KanbanState = "Backlog")&order=DragAndDropRank&start=1&pagesize=20&types=hierarchicalrequirement,defect

但是,我不确定C#API是否允许您将其他自定义参数编码到请求中...