如何使用拉力赛休息API和C#在功能中添加/更新里程碑?

时间:2016-05-19 06:18:11

标签: c# asp.net rally

我无法为拉力赛中的功能添加或更新里程碑字段。如果有人使用C#提供相同的代码,请与我分享。我正在搜索并且从最后一周开始没有运气。 当我尝试在功能中添加/更新里程碑时。我收到错误为“无法读取:无法读取引用的对象null”。我的代码如下: -

    public DynamicJsonObject UpdateFeaturesbyName(string fea, string bFun) 
   { 
    //getting list of Feature. 
    Request feat = new Request("PortfolioItem/Feature"); 
    feat.Query = new Query("Name", Query.Operator.Equals, fea);
    QueryResult TCSResults = restApi.Query(feat); 
    foreach (var res in TCSResults.Results) 
    { 
    var steps = res["Milestones"]; 
    Request tsteps = new Request(steps); 
    QueryResult tstepsResults = restApi.Query(tsteps); 
    foreach (var item in tstepsResults.Results) 
    {
    }

        if (res.Name == fea)
        {
            var targetFeature = TCSResults.Results.FirstOrDefault();

            DynamicJsonObject toUpdate = new DynamicJsonObject();
            //toUpdate["Milestones"] = "";
            // CreateResult createResult = restApi.Create(steps._ref, toUpdate);
            // String contentRef = steps._ref;
            //String contentRef = createResult._ref;
            string[] value = null;
            string AccCri = string.Empty;

            if (!string.IsNullOrWhiteSpace(bFun))
            {
                value = bFun.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
                foreach (string item in value)
                {
                    //if (string.IsNullOrWhiteSpace(AccCri))
                    //    AccCri = item;
                    //else
                    //    AccCri = AccCri + "<br/>" + item;
                    if (!string.IsNullOrWhiteSpace(item))
                    {
                        //Query for Milestone.
                        Request ms = new Request("Milestone");
                        ms.Fetch = new List<string>() { "Name", "ObjectID" };
                        ms.Query = new Query("Name", Query.Operator.Equals, item);
                        QueryResult msResults = restApi.Query(ms);

                        var targetMLResult = msResults.Results.FirstOrDefault();
                        long MLOID = targetMLResult["ObjectID"];

                        DynamicJsonObject tarML = restApi.GetByReference("Milestone", MLOID, "Name", "_ref", "DisplayColor");
                        DynamicJsonObject targetML = new DynamicJsonObject();
                        targetML["Name"] = tarML["Name"];
                        //targetML["_ref"] = tarML["_ref"];
                        targetML["_ref"] = "/milestone/" + Convert.ToString(MLOID);
                        targetML["DisplayColor"] = tarML["DisplayColor"];
                        // Grab collection of existing Milestones.
                        var existingMilestones = targetFeature["Milestones"];
                        long targetOID = targetFeature["ObjectID"];
                        // Milestones collection on object is expected to be a System.Collections.ArrayList.
                        var targetMLArray = existingMilestones;
                        var tagList2 = targetMLArray["_tagsNameArray"];
                        tagList2.Add(targetML);//
                        //targetMLArray.Add(targetML);
                        targetMLArray["_tagsNameArray"] = tagList2;
                        toUpdate["Milestones"] = targetMLArray;
                        OperationResult updateResult = restApi.Update(res._ref, toUpdate);
                        bool resp = updateResult.Success;

                    }
                }

            }

            //toUpdate["c_AcceptanceCriteria"] = AccCri;
            //OperationResult updateResult = restApi.Update(res._ref, toUpdate);
        }
    }

    var features = TCSResults.Results.Where(p => p.Name == fea).FirstOrDefault();
    var featuresref = features._ref;
    return features;
}

1 个答案:

答案 0 :(得分:0)

现在已经发布了工具包的v3.1.1,您可以使用AddToCollection方法执行此操作。

否则,您仍然可以始终只更新完整集合。该值应该是具有_ref属性的对象的arraylist。

查看此示例(将任务添加到缺陷中,但应与您正在执行的操作非常相似):https://github.com/RallyCommunity/rally-dot-net-rest-apps/blob/master/UpdateTaskCollectionOnDefect/addTaskOnDefect.cs