C# Rally GetByReference返回null

C# Rally GetByReference返回null,c#,rally,C#,Rally,我正在查询组合项目/Mmf。这很好: new Request("PortfolioItem/Mmf") { ProjectScopeUp = false, ProjectScopeDown = true, Fetch = new List() { "Name", "Description", "FormattedID", "LastUpdateDate", "Owner", "

我正在查询
组合项目/Mmf
。这很好:

new Request("PortfolioItem/Mmf")
            {
                ProjectScopeUp = false,
                ProjectScopeDown = true,
                Fetch = new List() { "Name", "Description", "FormattedID", "LastUpdateDate", "Owner", "Children" },
                Query = new Query("FormattedID", Query.Operator.Equals, _formattedID)
            };
但当我查询ref地址(我可以在浏览器上打开并完美地检查json)时,如下所示:

//_childFetch contains the same Fetch string list from the previous query
var childObject = m_rallyApi.GetByReference(_childRef, _childFetch);
它返回null

为什么这不起作用?当这是一个分层需求时,两个查询都可以工作

编辑 使用GetByReference()的方法的完整代码


我提交了一个缺陷。我明白了

Unhandled Exception: System.NullReferenceException: Object reference not set to
an instance of an object.
使用时

String featureRef = queryResults.Results.First()._ref; 
Console.WriteLine(featureRef); //prints correctly
DynamicJsonObject feature = restApi.GetByReference(featureRef, "Name");
String name = feature["Name"];
最后一行是它阻塞的地方。 与UserStories及其子项相同的代码可以工作

如果我避免使用
GetByReference
,它将与PortfolioItems一起工作。代码如下:

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using Rally.RestApi;
using Rally.RestApi.Response;

namespace FindTFchildren
{
    class Program
    {
        static void Main(string[] args)
        {
            RallyRestApi restApi;
            restApi = new RallyRestApi("user@co.com", "secret", "https://rally1.rallydev.com", "v2.0");

            String projectRef = "/project/12352814790";     //replace this OID with an OID of your project


            Request fRequest = new Request("PortfolioItem/Feature");
            fRequest.Project = projectRef;
            fRequest.Workspace = workspaceRef;
            fRequest.Fetch = new List<string>() { "FormattedID", "Name", "UserStories"};
            fRequest.Query = new Query("FormattedID", Query.Operator.Equals, "F3");
            QueryResult queryResults = restApi.Query(fRequest);


            foreach (var f in queryResults.Results)
            {
                Console.WriteLine("FormattedID: " + f["FormattedID"] + " Name: " + f["Name"]);
                Console.WriteLine("Collection ref: " + f["UserStories"]._ref);
                Request childrenRequest = new Request(f["UserStories"]);
                QueryResult queryChildrenResult = restApi.Query(childrenRequest);
                foreach (var c in queryChildrenResult.Results)
                {
                    Console.WriteLine("FormattedID: " + c["FormattedID"] + " Name: " + c["Name"]);
                }

            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统集合;
使用System.Linq;
使用系统文本;
使用Rally.RestApi;
使用Rally.RestApi.Response;
命名空间FindTFchildren
{
班级计划
{
静态void Main(字符串[]参数)
{
拉莱雷斯塔皮·雷斯塔皮;
restApi=新的RallyRestApi(“user@co.com“秘密”https://rally1.rallydev.com“,“v2.0”);
String projectRef=“/project/12352814790”//用项目的OID替换此OID
请求频率=新请求(“PortfolioItem/Feature”);
fRequest.Project=projectRef;
fRequest.Workspace=workspaceRef;
Fetch=newlist(){“FormattedID”、“Name”、“UserStories”};
fRequest.Query=新查询(“FormattedID”,Query.Operator.Equals,“F3”);
QueryResult queryResults=restApi.Query(fRequest);
foreach(queryResults.Results中的var f)
{
Console.WriteLine(“FormattedID:+f[“FormattedID”]+“Name:+f[“Name”]);
Console.WriteLine(“集合参考:+f[“用户故事”]。\u参考);
Request childrenRequest=新请求(f[“UserStories”]);
QueryResult queryChildrenResult=restApi.Query(childrenRequest);
foreach(queryChildrenResult.Results中的变量c)
{
Console.WriteLine(“FormattedID:+c[“FormattedID”]+“Name:+c[“Name”]);
}
}
}
}
}

我提交了一个缺陷。我明白了

Unhandled Exception: System.NullReferenceException: Object reference not set to
an instance of an object.
使用时

String featureRef = queryResults.Results.First()._ref; 
Console.WriteLine(featureRef); //prints correctly
DynamicJsonObject feature = restApi.GetByReference(featureRef, "Name");
String name = feature["Name"];
最后一行是它阻塞的地方。 与UserStories及其子项相同的代码可以工作

如果我避免使用
GetByReference
,它将与PortfolioItems一起工作。代码如下:

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using Rally.RestApi;
using Rally.RestApi.Response;

namespace FindTFchildren
{
    class Program
    {
        static void Main(string[] args)
        {
            RallyRestApi restApi;
            restApi = new RallyRestApi("user@co.com", "secret", "https://rally1.rallydev.com", "v2.0");

            String projectRef = "/project/12352814790";     //replace this OID with an OID of your project


            Request fRequest = new Request("PortfolioItem/Feature");
            fRequest.Project = projectRef;
            fRequest.Workspace = workspaceRef;
            fRequest.Fetch = new List<string>() { "FormattedID", "Name", "UserStories"};
            fRequest.Query = new Query("FormattedID", Query.Operator.Equals, "F3");
            QueryResult queryResults = restApi.Query(fRequest);


            foreach (var f in queryResults.Results)
            {
                Console.WriteLine("FormattedID: " + f["FormattedID"] + " Name: " + f["Name"]);
                Console.WriteLine("Collection ref: " + f["UserStories"]._ref);
                Request childrenRequest = new Request(f["UserStories"]);
                QueryResult queryChildrenResult = restApi.Query(childrenRequest);
                foreach (var c in queryChildrenResult.Results)
                {
                    Console.WriteLine("FormattedID: " + c["FormattedID"] + " Name: " + c["Name"]);
                }

            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统集合;
使用System.Linq;
使用系统文本;
使用Rally.RestApi;
使用Rally.RestApi.Response;
命名空间FindTFchildren
{
班级计划
{
静态void Main(字符串[]参数)
{
拉莱雷斯塔皮·雷斯塔皮;
restApi=新的RallyRestApi(“user@co.com“秘密”https://rally1.rallydev.com“,“v2.0”);
String projectRef=“/project/12352814790”//用项目的OID替换此OID
请求频率=新请求(“PortfolioItem/Feature”);
fRequest.Project=projectRef;
fRequest.Workspace=workspaceRef;
Fetch=newlist(){“FormattedID”、“Name”、“UserStories”};
fRequest.Query=新查询(“FormattedID”,Query.Operator.Equals,“F3”);
QueryResult queryResults=restApi.Query(fRequest);
foreach(queryResults.Results中的var f)
{
Console.WriteLine(“FormattedID:+f[“FormattedID”]+“Name:+f[“Name”]);
Console.WriteLine(“集合参考:+f[“用户故事”]。\u参考);
Request childrenRequest=新请求(f[“UserStories”]);
QueryResult queryChildrenResult=restApi.Query(childrenRequest);
foreach(queryChildrenResult.Results中的变量c)
{
Console.WriteLine(“FormattedID:+c[“FormattedID”]+“Name:+c[“Name”]);
}
}
}
}
}

能否提供包含
var childObject=m\u rallyApi.GetByReference(\u childRef,\u childFetch)的代码请,但我认为这并不重要。你是在GitHub上使用.NET的
RallyRestToolkit
还是其他什么?我想不是,我使用的是从开发者网页下载的dll。github是最近的一个?我想找两件事,一件。传递的值不为null。二,。我可能会尝试在变量声明的
\u childFetch
之后添加
[]
,就像
\u childFetch[]
一样,只是为了好玩。哦,还有3。我会检查以确保m_rallyApi将数组作为GetByReference的参数(它很可能会这样做,并且您可能已经检查了这些内容),您是否可以提供包含
var childObject=m_rallyApi.GetByReference(_childRef,_childFetch)的代码请,但我认为这并不重要。你是在GitHub上使用.NET的
RallyRestToolkit
还是其他什么?我想不是,我使用的是从开发者网页下载的dll。github是最近的一个?我想找两件事,一件。传递的值不为null。二,。我可能会尝试在变量声明的
\u childFetch
之后添加
[]
,就像
\u childFetch[]
一样,只是为了好玩。哦,还有3。我会检查以确保m_rallyApi将数组作为GetByReference的参数(它很可能会这样做,并且您可能已经检查了这些内容)谢谢您,我想这一次确实是一个bug。目前,我想我将迭代MMF的每个
特性
子项,并使用普通请求对象进行查询。我认为这是目前最好的转机。谢谢你,我想这一次真的是个错误。目前,我想我将迭代MMF的每个
特性
子项,并使用普通请求对象进行查询。我认为这是目前最好的转机。