【问题标题】:How to add/update milestones in a feature using rally rest API and C#?如何使用拉力赛休息 API 和 C# 在功能中添加/更新里程碑?
【发布时间】:2016-05-19 06:18:11
【问题描述】:

我无法为 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;
}

【问题讨论】:

    标签: c# asp.net rally


    【解决方案1】:

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

    否则,您仍然可以随时更新完整集合。该值应该是具有 _ref 属性的对象的数组列表。

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

    【讨论】:

    • 只是想反驳这个答案,说 .NET 工具包的 3.1.1 及更高版本现在支持写入集合。
    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多