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的每个特性
子项,并使用普通请求对象进行查询。我认为这是目前最好的转机。