代码之家  ›  专栏  ›  技术社区  ›  agibson

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

  •  1
  • agibson  · 技术社区  · 9 年前

    我正在通过C#dll使用2.0版的API。 但当我将查询字符串传递给v2.0 API时,也会出现此问题 通过 https://rally1.rallydev.com/slm/doc/webservice/

    我在工件级别查询,因为我需要缺陷和故事。我试着看看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"
    

    当我对Order by DragAndDropRank行进行注释时,它起作用。


    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"
    

    当我从查询中取出Release部分时,它就起作用了。


    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

    当我删除Order by DragAndDropRank查询字符串时,它起作用了。

    2 回复  |  直到 9 年前
        1
  •  1
  •   Kyle Morse    9 年前

    我认为您的大部分麻烦是由于这样一个事实,即为了使用Artifact端点,您需要指定一个类型参数,以便它知道要包含哪些Artifact子类。

    只需将其添加到上面的示例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是否允许您将其他自定义参数编码到请求中。。。

        2
  •  1
  •   nickm    9 年前

    您的问题已包含答案。

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

    您试图访问的Artifact对象上的字段不存在。它们存在于子级,例如DragAndDropRank、Release、Iteration。无法在Artifact类型的上下文中使用这些字段。

    父对象无权访问特定于子对象的属性。 项目是抽象类型。

    如果您需要按发布进行过滤,则需要提出两个单独的请求——一个是针对故事,另一个是关于缺陷。