首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C# Rally RestApi添加和更新Rally Item ChangeSets

使用C# Rally RestApi添加和更新Rally Item ChangeSets
EN

Stack Overflow用户
提问于 2013-02-05 02:12:41
回答 1查看 1.7K关注 0票数 2

我们是一个使用C#,Team Foundation Server和Rally作为主要项目跟踪的商店。

我们希望使用Rally Item Changesets来遵循TFS变更集。使用Rally的C# RestApi似乎与用Java制作的稍有不同。

有没有一种方法可以使用Rally C# RestApi完成本文中描述的相同操作?Rally update Changeset data from Java using Java Toolkit for Rally REST API

EN

回答 1

Stack Overflow用户

发布于 2013-02-05 05:10:54

你绝对可以在.NET中做同样的事情,一个额外的好处是它比同等的Java语言要少得多。下面是一个例子:

代码语言:javascript
复制
// System Libraries
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Web;

// Rally REST API Libraries
using Rally.RestApi;
using Rally.RestApi.Response;

namespace RestExample_AddChangesetToUserStory
{
    class Program
    {
        static void Main(string[] args)
        {
            // Set user parameters
            String userName = "user@company.com";
            String userPassword = "topsecret";

            // Set Rally parameters
            String rallyURL = "https://rally1.rallydev.com";
            String rallyWSAPIVersion = "1.40";

            //Initialize the REST API
            RallyRestApi restApi;
            restApi = new RallyRestApi(userName,
                                       userPassword,
                                       rallyURL,
                                       rallyWSAPIVersion);

            // Changeset Owner Username
            String changesetOwner = "scm_integration@company.com";

            // SCM Repository Name
            String scmRepositoryName = "MySCMRepo";

            // FormattedID of Artifact to associate to
            String storyFormattedID = "US14";

            // Create Request for User
            Request userRequest = new Request("user");
            userRequest.Fetch = new List<string>()
                {
                    "UserName",
                    "Subscription",
                    "DisplayName"                    
                };

            // Add a Query to the Request
            userRequest.Query = new Query("UserName", Query.Operator.Equals, changesetOwner);

            // Query Rally
            QueryResult queryUserResults = restApi.Query(userRequest);

            // Grab resulting User object and Ref
            DynamicJsonObject myUser = new DynamicJsonObject();
            myUser = queryUserResults.Results.First();
            String myUserRef = myUser["_ref"];

            //Set our Workspace and Project scopings
            String workspaceRef = "/workspace/12345678910";
            String projectRef = "/project/12345678911";
            bool projectScopingUp = false;
            bool projectScopingDown = true;

            // Get handle to SCM Repository
            Request scmRequest = new Request("SCMRepository");
            scmRequest.Fetch = new List<string>()
                {
                    "ObjectID",
                    "Name",
                    "SCMType"
                };

            // Add query
            scmRequest.Query = new Query("Name", Query.Operator.Equals, scmRepositoryName);

            // Query Rally
            QueryResult querySCMResults = restApi.Query(scmRequest);
            DynamicJsonObject myRepository = new DynamicJsonObject();
            myRepository = querySCMResults.Results.First();

            // Find User Story that we want to add Changeset to

            // Tee up Story Request
            Request storyRequest = new Request("hierarchicalrequirement");
            storyRequest.Workspace = workspaceRef;
            storyRequest.Project = projectRef;
            storyRequest.ProjectScopeDown = projectScopingDown;
            storyRequest.ProjectScopeUp = projectScopingUp;

            // Fields to Fetch
            storyRequest.Fetch = new List<string>()
                {
                    "Name",
                    "FormattedID",
                    "Changesets"
                };

            // Add a query
            storyRequest.Query = new Query("FormattedID", Query.Operator.Equals, storyFormattedID);

            // Query Rally for the Story
            QueryResult queryResult = restApi.Query(storyRequest);

            // Pull reference off of Story fetch
            var storyObject = queryResult.Results.First();
            String storyReference = storyObject["_ref"];

            // Pull existing Changesets off of Story
            var existingChangesets = storyObject["Changesets"];

            Console.WriteLine("Story: " + storyFormattedID);
            Console.WriteLine("Number of Existing Changesets: " + existingChangesets.Count);

            // DynamicJSONObject for New Changeset
            DynamicJsonObject newChangeset = new DynamicJsonObject();

            // Commit Time Stamp
            String commitTimeStamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ");

            // Populate Changeset Attributes
            newChangeset["SCMRepository"] = myRepository;
            newChangeset["Author"] = myUserRef;
            newChangeset["Revision"] = "2451";
            newChangeset["Uri"] = "https://svnrepo.company.com:8001";
            newChangeset["CommitTimestamp"] = commitTimeStamp;

            // Artifacts list
            var changeSetArtifacts = new ArrayList();
            changeSetArtifacts.Add(storyObject);

            // Update attribute on Changeset
            newChangeset["Artifacts"] = changeSetArtifacts;


            try
            {
                // Create the Changeset
                Console.WriteLine("Creating Rally Changeset...");
                CreateResult myChangesetCreateResult = restApi.Create("ChangeSet", newChangeset);
                String myChangesetRef = myChangesetCreateResult.Reference;
                Console.WriteLine("Successfully Created Rally Changeset: " + myChangesetRef);

                List<string> createWarnings = myChangesetCreateResult.Warnings;
                for (int i = 0; i < createWarnings.Count; i++)
                {
                    Console.WriteLine(createWarnings[i]);
                }

                List<string> createErrors = myChangesetCreateResult.Errors;
                for (int i = 0; i < createErrors.Count; i++)
                {
                    Console.WriteLine(createErrors[i]);
                }

            }
            catch (Exception e)
            {
                Console.WriteLine("Exception occurred creating Rally Changeset: " + e.StackTrace);
                Console.WriteLine(e.Message);
            }
            Console.ReadKey();
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14692850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档