/// <summary> /// Iterates over the populated Dictionary object and pushes each attachment to the respective user story /// </summary> /// <param name="attachmentsDictionary"></param> /// <param name="attachmentContent"></param> /// <param name="attachmentContainer"></param> /// <param name="createUserStory"></param> private void PushAttachments(Dictionary <string, string> attachmentsDictionary, DynamicJsonObject attachmentContent, DynamicJsonObject attachmentContainer, CreateResult createUserStory) { foreach (KeyValuePair <string, string> attachmentPair in attachmentsDictionary) { try { //create attachment content attachmentContent[RallyConstant.Content] = attachmentPair.Key; _attachmentContentCreateResult = _rallyApi.Create(RallyConstant.AttachmentContent, attachmentContent); _userStoryReference = _attachmentContentCreateResult.Reference; //create attachment contianer attachmentContainer[RallyConstant.Artifact] = createUserStory.Reference; attachmentContainer[RallyConstant.Content] = _userStoryReference; attachmentContainer[RallyConstant.Name] = attachmentPair.Value; attachmentContainer[RallyConstant.Description] = RallyConstant.EmailAttachment; attachmentContainer[RallyConstant.ContentType] = SyncConstant.FileType; //Create & associate the attachment to the respecitve user story _attachmentContainerCreateResult = _rallyApi.Create(RallyConstant.Attachment, attachmentContainer); } catch (WebException e) { Console.WriteLine("Attachment Failed: " + e.Message); } } }
/// <summary> /// Creates the userstory with a feature or iteration /// Both feature and iteration are read only fields /// </summary> /// <param name="workspace"></param> /// <param name="project"></param> /// <param name="userstory"></param> /// <param name="userstoryDescription"></param> /// <param name="userstoryOwner"></param> public void CreateUserStory(string workspace, string project, string userstory, string userstoryDescription, string userstoryOwner) { //authenticate this.EnsureRallyIsAuthenticated(); //DynamicJsonObject DynamicJsonObject toCreate = new DynamicJsonObject(); toCreate[RALLY.WorkSpace] = workspace; toCreate[RALLY.Project] = project; toCreate[RALLY.Name] = userstory; toCreate[RALLY.Description] = userstoryDescription; toCreate[RALLY.Owner] = userstoryOwner; toCreate[RALLY.PlanEstimate] = "1"; toCreate[RALLY.PortfolioItem] = RALLYQUERY.FeatureShareProject; //toCreate[RALLY.Iteration] = usIteration; try { CreateResult createUserStory = _rallyRestApi.Create(RALLY.HierarchicalRequirement, toCreate); Console.WriteLine("Created Userstory: " + createUserStory.Reference); } catch (WebException e) { Console.WriteLine(e.Message); } }
public void RemoveFromCollection2x() { RallyRestApi restApi = GetRallyRestApi2x(); DynamicJsonObject newStory = new DynamicJsonObject(); newStory["Name"] = "Test Story"; var itemRef = restApi.Create("hierarchicalrequirement", newStory).Reference; DynamicJsonObject newDefect = new DynamicJsonObject(); newDefect["Name"] = "New Defect Added via collection"; newDefect["Requirement"] = itemRef; CreateResult newTaskResult = restApi.Create("defect", newDefect); DynamicJsonObject story = restApi.GetByReference(itemRef, "Defects"); Assert.AreEqual(1, story["Defects"]["Count"]); DynamicJsonObject taskToRemove = new DynamicJsonObject(); taskToRemove["_ref"] = newTaskResult.Reference; OperationResult result = restApi.RemoveFromCollection(itemRef, "Defects", new List <DynamicJsonObject>() { taskToRemove }, new NameValueCollection()); Assert.IsTrue(result.Success); Assert.AreEqual(0, result.Results.Count); story = restApi.GetByReference(itemRef, "Defects"); Assert.AreEqual(0, story["Defects"]["Count"]); // Now delete the defect and story TestHelperDeleteItem(restApi, newTaskResult.Reference); TestHelperDeleteItem(restApi, itemRef); }
static void Main(string[] args) { RallyRestApi restApi; restApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "v2.0"); String projectRef = "/project/123456"; //use valid OID of your project Request userRequest = new Request("User"); userRequest.Query = new Query("UserName", Query.Operator.Equals, "*****@*****.**"); QueryResult userResults = restApi.Query(userRequest); String userRef = userResults.Results.First()._ref; Console.WriteLine(userRef); DynamicJsonObject myStory = new DynamicJsonObject(); myStory["Name"] = "a new story"; myStory["Project"] = projectRef; myStory["Owner"] = userRef; CreateResult createResult = restApi.Create("HierarchicalRequirement", myStory); myStory = restApi.GetByReference(createResult.Reference, "FormattedID", "Owner", "Project"); Console.WriteLine(myStory["FormattedID"] + " " + myStory["Owner"]._refObjectName + " " + myStory["Project"]._refObjectName); }
static void Main(string[] args) { RallyRestApi restApi = new RallyRestApi(webServiceVersion: "v2.0"); String apiKey = "_abc777"; restApi.Authenticate(apiKey, "https://rally1.rallydev.com", allowSSO: false); String workspaceRef = "/workspace/123"; String projectRef = "/project/134"; DynamicJsonObject badDefect = new DynamicJsonObject(); badDefect["Name"] = "bad defect 2" + DateTime.Now; badDefect["Project"] = projectRef; CreateResult createRequest = restApi.Create(workspaceRef, "Defect", badDefect); badDefect = restApi.GetByReference(createRequest.Reference, "FormattedID", "Project", "State"); Console.WriteLine(badDefect["FormattedID"] + " " + badDefect["Project"]._refObjectName + " " + badDefect["State"]); badDefect["State"] = "Open"; OperationResult updateRequest = restApi.Update(badDefect["_ref"], badDefect); Console.WriteLine("Success? " + updateRequest.Success); Console.WriteLine("updated State: " + badDefect["State"]); }
public void ExampleMethodText() { string username = "******"; string password = "******"; // Initialize the REST API. You can specify a web service version if needed in the constructor. RallyRestApi restApi = new RallyRestApi(); restApi.Authenticate(username, password, "https://preview.rallydev.com", proxy: null, allowSSO: false); //Create an item DynamicJsonObject toCreate = new DynamicJsonObject(); toCreate["Name"] = "My Defect"; CreateResult createResult = restApi.Create("defect", toCreate); //Update the item DynamicJsonObject toUpdate = new DynamicJsonObject(); toUpdate["Description"] = "This is my defect."; OperationResult updateResult = restApi.Update(createResult.Reference, toUpdate); //Get the item DynamicJsonObject item = restApi.GetByReference(createResult.Reference); //Query for items Request request = new Request("defect"); request.Fetch = new List<string>() { "Name", "Description", "FormattedID" }; request.Query = new Query("Name", Query.Operator.Equals, "My Defect"); QueryResult queryResult = restApi.Query(request); foreach (var result in queryResult.Results) { //Process item as needed } //Delete the item OperationResult deleteResult = restApi.Delete(createResult.Reference); }
static void Main(string[] args) { RallyRestApi restApi = new RallyRestApi(webServiceVersion: "v2.0"); String apiKey = "_abc123"; restApi.Authenticate(apiKey, "https://rally1.rallydev.com", allowSSO: false); String workspaceRef = "/workspace/123"; String projectRef = "/project/456"; Request request = new Request("PortfolioItem/Feature"); request.Fetch = new List <string>() { "Name", "FormattedID" }; request.Query = new Query("FormattedID", Query.Operator.Equals, "F2356"); QueryResult result = restApi.Query(request); String featureRef = result.Results.First()._ref; Console.WriteLine("found" + featureRef); //create stories try { for (int i = 1; i <= 25; i++) { DynamicJsonObject story = new DynamicJsonObject(); story["Name"] = "story " + i; story["PlanEstimate"] = new Random().Next(2, 10); story["PortfolioItem"] = featureRef; story["Project"] = projectRef; CreateResult createResult = restApi.Create(workspaceRef, "HierarchicalRequirement", story); story = restApi.GetByReference(createResult.Reference, "FormattedID"); Console.WriteLine("creating..." + story["FormattedID"]); } //read stories DynamicJsonObject feature = restApi.GetByReference(featureRef, "UserStories"); Request storiesRequest = new Request(feature["UserStories"]); storiesRequest.Fetch = new List <string>() { "FormattedID", "PlanEstimate" }; storiesRequest.Limit = 1000; QueryResult storiesResult = restApi.Query(storiesRequest); int storyCount = 0; foreach (var userStory in storiesResult.Results) { Console.WriteLine(userStory["FormattedID"] + " " + userStory["PlanEstimate"]); storyCount++; } Console.WriteLine(storyCount); } catch (Exception e) { Console.WriteLine(e); } }
/// <summary> /// When passed an id of email message, method will create the user story with subject as user story title, and body as the description /// </summary> /// <param name="messageId"></param> private void CreateUserStoryWithEmail(UniqueId messageId) { _message = _inboxFolder.GetMessage(messageId); _emailSubject = _message.Subject; _emailBody = _message.TextBody; if (_emailSubject.IsEmpty()) { _emailSubject = EMAIL.NoSubject; } _toCreate[RALLY.Name] = (_emailSubject); _toCreate[RALLY.Description] = (_emailBody); _toCreate[RALLY.PortfolioItem] = RALLYQUERY.FeatureShareProject; _createUserStory = _rallyRestApi.Create(RALLY.HierarchicalRequirement, _toCreate); Console.WriteLine("Created User Story: " + _emailSubject); }
static void Main(string[] args) { RallyRestApi restApi = new RallyRestApi("*****@*****.**", "secret", "https://sandbox.rallydev.com", "v2.0"); DynamicJsonObject user = restApi.GetCurrentUser(); String userRef = user["_ref"]; String workspaceRef = "/workspace/12352608129"; //use valid workspace OID in your Rally String projectRef = "/project/14018981229"; //use valid project OID in your Rally System.Diagnostics.TextWriterTraceListener myListener = new System.Diagnostics.TextWriterTraceListener("log.log", "myListener"); try { //create story DynamicJsonObject myStory = new DynamicJsonObject(); myStory["Name"] = "my story " + DateTime.Now; myStory["Project"] = projectRef; myStory["Owner"] = userRef; CreateResult createStory = restApi.Create(workspaceRef, "HierarchicalRequirement", myStory); myStory = restApi.GetByReference(createStory.Reference, "FormattedID", "Owner", "Project"); myListener.WriteLine(DateTime.Now + "___________\r\n" + myStory["FormattedID"] + " Owner: " + myStory["Owner"]._refObjectName + " Project: " + myStory["Project"]._refObjectName); //update story myStory["Description"] = "updated " + DateTime.Now; //create tasks for (int i = 1; i <= 3; i++) { DynamicJsonObject myTask = new DynamicJsonObject(); myTask["Name"] = "task " + i + DateTime.Now; myTask["Owner"] = userRef; myTask["State"] = "In-Progress"; myTask["WorkProduct"] = myStory["_ref"]; CreateResult createTask = restApi.Create(workspaceRef, "Task", myTask); myTask = restApi.GetByReference(createTask.Reference, "FormattedID", "Owner", "State"); myListener.WriteLine(myTask["FormattedID"] + " State: " + myTask["StateX"]); } } catch (Exception e) { myListener.WriteLine(e); } myListener.Flush(); }
static void Main(string[] args) { RallyRestApi restApi = new RallyRestApi(webServiceVersion: "v2.0"); String apiKey = "_abc123"; restApi.Authenticate(apiKey, "https://rally1.rallydev.com", allowSSO: false); String projectRef = "/project/32904827032"; try { //create story DynamicJsonObject myStory = new DynamicJsonObject(); myStory["Name"] = "another story " + DateTime.Now; myStory["Project"] = projectRef; CreateResult createStory = restApi.Create(workspaceRef, "HierarchicalRequirement", myStory); myStory = restApi.GetByReference(createStory.Reference, "FormattedID", "Project"); //update story myStory["Description"] = "updated " + DateTime.Now; myStory["c_CustomString"] = "abc123"; Console.WriteLine("--------------------"); Console.WriteLine(myStory["FormattedID"]); OperationResult updateResult = restApi.Update(myStory["_ref"], myStory); //create tasks for (int i = 1; i <= 3; i++) { DynamicJsonObject myTask = new DynamicJsonObject(); myTask["Name"] = "task " + i + DateTime.Now; myTask["State"] = "In-Progress"; myTask["WorkProduct"] = myStory["_ref"]; CreateResult createTask = restApi.Create(workspaceRef, "Task", myTask); myTask = restApi.GetByReference(createTask.Reference, "FormattedID", "Owner", "State"); Console.WriteLine(myTask["FormattedID"]); } } catch (Exception e) { Console.WriteLine(e); } }
private void AssertCanCreate(RallyRestApi restApi) { var dynamicJson = new DynamicJsonObject(); dynamicJson["Name"] = "C# Json Rest Toolkit Test Defect"; CreateResult response = restApi.Create("defect", dynamicJson); Assert.AreEqual(0, response.Errors.Count); Assert.IsTrue(response.Reference.ToLower().Contains("defect")); dynamic testDefect = restApi.GetByReference(response.Reference); Assert.AreEqual(dynamicJson["Name"], testDefect.Name); defectOid = Ref.GetOidFromRef(response.Reference); }
private void AssertCreateFailure(RallyRestApi restApi) { var defect = new DynamicJsonObject(); defect["Name"] = "Sample Defect with invalid field"; defect["Iteration"] = "Foo"; CreateResult creationResult = restApi.Create("defect", defect); Assert.IsNull(creationResult.Reference); Assert.AreEqual(1, creationResult.Errors.Count); Assert.IsFalse(creationResult.Success); }
private void AssertCanDelete(RallyRestApi restApi) { var dynamicJson = new DynamicJsonObject(); dynamicJson["Name"] = "C# Json Rest Toolkit Test Defect"; CreateResult response = restApi.Create("defect", dynamicJson); Assert.AreEqual(0, response.Errors.Count); Assert.IsTrue(response.Reference.ToLower().Contains("defect")); OperationResult deleteResponse = restApi.Delete(Ref.GetRelativeRef(response.Reference)); dynamic testDefectEmpty = restApi.GetByReference(response.Reference); Assert.IsNull(testDefectEmpty); }
static void Main(string[] args) { RallyRestApi restApi = new RallyRestApi(webServiceVersion: "v2.0"); String apiKey = "_abc123"; restApi.Authenticate(apiKey, "https://rally1.rallydev.com", allowSSO: false); String workspaceRef = "/workspace/1011574887"; //non-default workspace of the user String projectRef = "/project/1791269111"; //a non-default project of the user (inside the workspace above) try { //create testset DynamicJsonObject myTestSet = new DynamicJsonObject(); myTestSet["Name"] = "important set " + DateTime.Now; myTestSet["Project"] = projectRef; CreateResult createTestSet = restApi.Create(workspaceRef, "TestSet", myTestSet); myTestSet = restApi.GetByReference(createTestSet.Reference, "FormattedID", "Project"); Console.WriteLine(myTestSet["FormattedID"] + " " + myTestSet["Project"]._refObjectName); //find current iteration Request iterationRequest = new Request("Iteration"); iterationRequest.Project = projectRef; iterationRequest.ProjectScopeDown = false; iterationRequest.ProjectScopeUp = false; iterationRequest.Fetch = new List <string>() { "ObjectID", "Name" }; iterationRequest.Query = new Query("(StartDate <= Today)").And(new Query("(EndDate >= Today)")); QueryResult queryResults = restApi.Query(iterationRequest); if (queryResults.TotalResultCount > 0) { Console.WriteLine(queryResults.Results.First()["Name"] + " " + queryResults.Results.First()["ObjectID"]); myTestSet["Iteration"] = queryResults.Results.First()._ref; OperationResult updateResult = restApi.Update(myTestSet["_ref"], myTestSet); } else { Console.WriteLine("No current iterations"); } } catch (Exception e) { Console.WriteLine(e); } }
static void Main(string[] args) { string tagName = "T3$T"; RallyRestApi restApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "v2.0"); //get current user DynamicJsonObject user = new DynamicJsonObject(); user = restApi.GetCurrentUser(); Console.Out.WriteLine("owner " + user["_ref"]); //find workspaces owned by this user //equivalent to this endpoint: https://rally1.rallydev.com/slm/webservice/v2.0/subscription/1154643/workspaces?query=(Owner%20=%20%22/user/12345%22) DynamicJsonObject sub = restApi.GetSubscription("Workspaces"); Request wRequest = new Request(sub["Workspaces"]); wRequest.Query = new Query("Owner", Query.Operator.Equals, user["_ref"]); QueryResult wResult = restApi.Query(wRequest); foreach (var workspace in wResult.Results) { //Console.Out.WriteLine(workspace["_refObjectName"] + " : " + workspace["_ref"]); Request tagRequest = new Request("tag"); tagRequest.Query = new Query("Name", Query.Operator.Equals, tagName); QueryResult tagResult = restApi.Query(tagRequest); if (tagResult.TotalResultCount == 0) { Console.Out.WriteLine("TAG " + tagName + " not found, creating"); DynamicJsonObject newTag = new DynamicJsonObject(); newTag["Name"] = tagName; newTag["Workspace"] = workspace["_ref"]; CreateResult createResult = restApi.Create("Tag", newTag); Console.Out.WriteLine(createResult.Reference + " created in workspace " + workspace["_refObjectName"]); } else { Console.Out.WriteLine("TAG " + tagName + " found in " + workspace["_refObjectName"]); Console.Out.WriteLine(tagResult.Results.First()["_refObjectName"] + " " + tagResult.Results.First()["_ref"]); } } }
public static void CreateTestCaseResultWork(string testcase, string result, string notes) { string rallyUser = System.Configuration.ConfigurationManager.AppSettings["rallyUser"]; string rallyPassword = System.Configuration.ConfigurationManager.AppSettings["rallyPassword"]; string build = System.Configuration.ConfigurationManager.AppSettings["build"]; string workspaceRef = "https://rally1.rallydev.com/slm/webservice/1.40/workspace/144782102.js"; //Log into rally RallyRestApi restApi = new RallyRestApi(rallyUser, rallyPassword, "https://rally1.rallydev.com", "1.40"); try { //Search to see if this test case exists Request request = new Request("testcase"); request.Fetch = new List <string> { "Name", "ObjectID", }; request.Query = new Query("Name", Query.Operator.Equals, testcase); QueryResult queryResult = restApi.Query(request); var result2 = queryResult.Results.First(); var objectID = result2["ObjectID"]; Console.WriteLine("Found the test case: " + result2["Name"] + " " + result2["ObjectID"]); //Create the test case result object DynamicJsonObject newTCResult = new DynamicJsonObject(); newTCResult["Date"] = DateTime.UtcNow.ToString("o"); newTCResult["TestCase"] = objectID; newTCResult["Notes"] = notes; newTCResult["Build"] = build; newTCResult["Verdict"] = result; CreateResult cr = restApi.Create(workspaceRef, "TestCaseResult", newTCResult); Console.WriteLine("Created test case result"); } catch (InvalidOperationException e) { //If the test case doesn't exist, then we need to create it Console.WriteLine("Cannot find the test case: " + testcase); } }
static void Main(string[] args) { RallyRestApi restApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "v2.0"); DynamicJsonObject user = restApi.GetCurrentUser(); String userRef = user["_ref"]; String workspaceRef = "/workspace/11111"; //use valid workspace OID in your Rally String projectRef = "/project/12345"; //use valid project OID in your Rally DynamicJsonObject myStory = new DynamicJsonObject(); myStory["Name"] = "my story"; myStory["Project"] = projectRef; myStory["Owner"] = userRef; CreateResult createResult = restApi.Create(workspaceRef, "HierarchicalRequirement", myStory); myStory = restApi.GetByReference(createResult.Reference, "FormattedID", "Owner", "Project"); Console.WriteLine(myStory["FormattedID"] + " " + myStory["Owner"]._refObjectName + " " + myStory["Project"]._refObjectName); }
private string TestHelperCreateDefect(RallyRestApi restApi, bool includeFullData = false) { var dynamicJson = new DynamicJsonObject(); dynamicJson["Name"] = "C# Json Rest Toolkit Test Defect"; if (includeFullData) { dynamicJson["Owner"] = restApi.GetCurrentUser()["_ref"]; dynamicJson["Package"] = "Package A"; } CreateResult response = restApi.Create("defect", dynamicJson); Assert.AreEqual(0, response.Errors.Count); Assert.IsTrue(response.Reference.ToLower().Contains("defect")); return(response.Reference); }
private void AssertCanDelete(RallyRestApi restApi, bool includeFullData = false) { var dynamicJson = new DynamicJsonObject(); dynamicJson["Name"] = "C# Json Rest Toolkit Test Defect"; if (includeFullData) { dynamicJson["Owner"] = restApi.GetCurrentUser()["_ref"]; dynamicJson["Package"] = "Package A"; } CreateResult response = restApi.Create("defect", dynamicJson); Assert.AreEqual(0, response.Errors.Count); Assert.IsTrue(response.Reference.ToLower().Contains("defect")); OperationResult deleteResponse = restApi.Delete(Ref.GetRelativeRef(response.Reference)); dynamic testDefectEmpty = restApi.GetByReference(response.Reference); Assert.IsNull(testDefectEmpty); }
public void ExampleMethodText() { string username = "******"; string password = "******"; // Initialize the REST API. You can specify a web service version if needed in the constructor. RallyRestApi restApi = new RallyRestApi(); restApi.Authenticate(username, password, "https://preview.rallydev.com", proxy: null, allowSSO: false); //Create an item DynamicJsonObject toCreate = new DynamicJsonObject(); toCreate["Name"] = "My Defect"; CreateResult createResult = restApi.Create("defect", toCreate); //Update the item DynamicJsonObject toUpdate = new DynamicJsonObject(); toUpdate["Description"] = "This is my defect."; OperationResult updateResult = restApi.Update(createResult.Reference, toUpdate); //Get the item DynamicJsonObject item = restApi.GetByReference(createResult.Reference); //Query for items Request request = new Request("defect"); request.Fetch = new List <string>() { "Name", "Description", "FormattedID" }; request.Query = new Query("Name", Query.Operator.Equals, "My Defect"); QueryResult queryResult = restApi.Query(request); foreach (var result in queryResult.Results) { //Process item as needed } //Delete the item OperationResult deleteResult = restApi.Delete(createResult.Reference); }
static void Main(string[] args) { RallyRestApi restApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "v2.0"); String workspaceRef = "/workspace/11111"; //use valid workspace OID in your Rally String projectRef = "/project/12345"; //use valid project OID in your Rally String userRef = "/user/777"; DynamicJsonObject d = new DynamicJsonObject(); d["Name"] = "some bug"; d["Project"] = projectRef; d["Owner"] = userRef; CreateResult createResult = restApi.Create(workspaceRef, "Defect", d); DynamicJsonObject defect = restApi.GetByReference(createResult.Reference, "FormattedID"); Console.WriteLine(defect["FormattedID"]); //update defect defect["Description"] = "bad bug"; OperationResult updateResult = restApi.Update(defect["_ref"], defect); }
//Creates the test case public static void CreateTestCaseWork(string testcase) { Console.WriteLine("CreateTestCaseWork method"); string rallyUser = System.Configuration.ConfigurationManager.AppSettings["rallyUser"]; string rallyPassword = System.Configuration.ConfigurationManager.AppSettings["rallyPassword"]; string workspaceRef = "https://rally1.rallydev.com/slm/webservice/1.40/workspace/144782102.js"; //Log into rally RallyRestApi restApi = new RallyRestApi(rallyUser, rallyPassword, "https://rally1.rallydev.com", "1.40"); try { //Search to see if this test case already exists, if it does, we don't want to create another one so do nothing Request request = new Request("testcase"); request.Fetch = new List <string> { "Name", "ObjectID", }; request.Query = new Query("Name", Query.Operator.Equals, testcase); QueryResult queryResult = restApi.Query(request); var result = queryResult.Results.First(); var objectID = result["ObjectID"]; Console.WriteLine("Found the test case: " + result["Name"] + " " + result["ObjectID"]); } catch (InvalidOperationException e) { //If the test case doesn't exist, then we need to create it DynamicJsonObject toCreate = new DynamicJsonObject(); toCreate["Name"] = testcase; toCreate["Method"] = "Automated"; CreateResult createResult = restApi.Create(workspaceRef, "testcase", toCreate); Console.WriteLine("Created testcase: " + testcase); } }
static void Main(string[] args) { String userName = "******"; String userPassword = "******"; String serverUrl = "https://rally1.rallydev.com"; String wsapiVersion = "1.38"; RallyRestApi restApi = new RallyRestApi( userName, userPassword, serverUrl, wsapiVersion ); restApi.Headers[RallyRestApi.HeaderType.Vendor] = "Rally Software"; restApi.Headers[RallyRestApi.HeaderType.Name] = "RestExample_AddUsersToProject"; // Query for Project for which we want to add permissions Request projectRequest = new Request("project"); projectRequest.Fetch = new List <string>() { "Name", "Owner", "State", "Description" }; String projectName = "Avalanche Hazard Mapping"; projectRequest.Query = new Query("Name", Query.Operator.Equals, projectName); QueryResult queryProjectResults = restApi.Query(projectRequest); var myProject = queryProjectResults.Results.First(); String myProjectReference = myProject["_ref"]; Console.WriteLine("Project Name: " + myProject["Name"]); Console.WriteLine("State: " + myProject["State"]); // Query for User for whom we wish to add ProjectPermission Request userRequest = new Request("user"); userRequest.Fetch = new List <string>() { "UserName", "Subscription", "DisplayName" }; // User needing the permissions userRequest.Query = new Query("UserName", Query.Operator.Equals, "\"[email protected]\""); QueryResult queryUserResults = restApi.Query(userRequest); var myUser = queryUserResults.Results.First(); String myUserReference = myUser["_ref"]; Console.WriteLine("Username: "******"UserName"]); Console.WriteLine("Display Name: " + myUser["DisplayName"]); Console.WriteLine("Subscription: " + myUser["Subscription"]); // Setup required ProjectPermission data DynamicJsonObject newProjectPermission = new DynamicJsonObject(); newProjectPermission["User"] = myUser; newProjectPermission["Project"] = myProject; newProjectPermission["Role"] = "Editor"; // Create the permission in Rally CreateResult addProjectPermissionResult = restApi.Create("ProjectPermission", newProjectPermission); DynamicJsonObject fetchedProjectPermission = restApi.GetByReference(addProjectPermissionResult.Reference, "Name"); Console.WriteLine("Created ProjectPermission with Role: " + fetchedProjectPermission["Name"]); }
static void Main(string[] args) { //Initialize the REST API RallyRestApi restApi; String rallyUserName = "******"; String rallyPassword = "******"; String rallyURL = "https://rally1.rallydev.com"; String wsapiVersion = "1.41"; String myWorkspaceName = "My Workspace"; restApi = new RallyRestApi( rallyUserName, rallyPassword, rallyURL, wsapiVersion ); // Get a Reference to Target Workspace Request workspaceRequest = new Request("workspace"); workspaceRequest.Fetch = new List <string>() { "Name", "ObjectID" }; workspaceRequest.Query = new Query("Name", Query.Operator.Equals, myWorkspaceName); QueryResult workspaceQueryResults = restApi.Query(workspaceRequest); var targetWorkspace = workspaceQueryResults.Results.First(); Console.WriteLine("Found Target Workspace: " + targetWorkspace["Name"]); String workspaceRef = targetWorkspace["_ref"]; //Query for Target Tag Request tagRequest = new Request("tag"); tagRequest.Fetch = new List <string>() { "Name", "ObjectID" }; // Query all Tags for a tag named "Montane" tagRequest.Query = new Query("Name", Query.Operator.Equals, "Tundra"); QueryResult queryTagResults = restApi.Query(tagRequest); var targetTagResult = queryTagResults.Results.First(); long tagOID = targetTagResult["ObjectID"]; DynamicJsonObject targetTag = restApi.GetByReference("tag", tagOID, "Name", "ObjectID"); // Query for User Story // FormattedID of target story String targetStoryFormattedID = "US5"; Request storyRequest = new Request("hierarchicalrequirement"); storyRequest.Fetch = new List <string>() { "Name", "ObjectID", "Iteration", "FormattedID", "Tags" }; storyRequest.Query = new Query("FormattedID", Query.Operator.Equals, targetStoryFormattedID); QueryResult queryStoryResults = restApi.Query(storyRequest); var targetUserStory = queryStoryResults.Results.First(); Console.WriteLine("Found Target User Story: " + targetUserStory["Name"]); // Grab collection of existing Tags var existingTags = targetUserStory["Tags"]; // Summarize Existing Tags Console.WriteLine("Existing Tags for Story" + targetStoryFormattedID + ": "); foreach (var tag in existingTags) { Console.WriteLine(tag["Name"]); } long targetOID = targetUserStory["ObjectID"]; // Now do update of the User Story // Tags collection on object is expected to be a System.Collections.ArrayList var targetTagArray = existingTags; targetTagArray.Add(targetTag); DynamicJsonObject toUpdate = new DynamicJsonObject(); toUpdate["Tags"] = targetTagArray; OperationResult updateResult = restApi.Update("HierarchicalRequirement", targetOID, toUpdate); foreach (var error in updateResult.Errors) { Console.WriteLine(error.ToString()); } // Re-read target Story DynamicJsonObject updatedStory = restApi.GetByReference(targetUserStory["_ref"], "Tags,Name"); var updatedTags = updatedStory["Tags"]; // Summarize Updated Tags Console.WriteLine("Updated Tags for Story" + targetStoryFormattedID + ": "); foreach (var tag in updatedTags) { Console.WriteLine(tag["Name"]); } // Create a New Tag, and add New Tag to Story DynamicJsonObject newTag = new DynamicJsonObject(); newTag["Name"] = "Boreal"; CreateResult createResult = restApi.Create(workspaceRef, "Tag", newTag); // Get the ref of the created Tag String newTagRef = createResult.Reference; // Read the Target Tag DynamicJsonObject newTagRead = restApi.GetByReference(newTagRef, "Name"); // Add the newly-created Tag to the Story targetTagArray.Add(newTagRead); toUpdate["Tags"] = targetTagArray; updateResult = restApi.Update("HierarchicalRequirement", targetOID, toUpdate); // Re-read target Story updatedStory = restApi.GetByReference(targetUserStory["_ref"], "Tags,Name"); updatedTags = updatedStory["Tags"]; // Summarize Updated Tags Console.WriteLine("Updated Tags (with newly-created Tag for Story" + targetStoryFormattedID + ": "); foreach (var tag in updatedTags) { Console.WriteLine(tag["Name"]); } Console.ReadKey(); }
static void Main(string[] args) { // Set user parameters String userName = "******"; String userPassword = "******"; // Set Rally parameters String rallyURL = "https://rally1.rallydev.com"; String rallyWSAPIVersion = "1.36"; //Initialize the REST API RallyRestApi restApi; restApi = new RallyRestApi(userName, userPassword, rallyURL, rallyWSAPIVersion); // 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(""); // 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; // Find User Story that we want to add attachment 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" }; // Add a query storyRequest.Query = new Query("FormattedID", Query.Operator.Equals, "US43"); // 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"]; // Read In Image Content String imageFilePath = "C:\\Users\\username\\"; String imageFileName = "image1.png"; String fullImageFile = imageFilePath + imageFileName; Image myImage = Image.FromFile(fullImageFile); // Get length from Image.Length attribute - don't use this in REST though // REST expects the length of the image in number of bytes as converted to a byte array var imageFileLength = new FileInfo(fullImageFile).Length; Console.WriteLine("Image File Length from System.Drawing.Image: " + imageFileLength); // Convert Image to Base64 format string imageBase64String = ImageToBase64(myImage, System.Drawing.Imaging.ImageFormat.Png); // Length calculated from Base64String converted back var imageNumberBytes = Convert.FromBase64String(imageBase64String).Length; // This differs from just the Length of the Base 64 String! Console.WriteLine("Image File Length from Convert.FromBase64String: " + imageNumberBytes); // DynamicJSONObject for AttachmentContent DynamicJsonObject myAttachmentContent = new DynamicJsonObject(); myAttachmentContent["Content"] = imageBase64String; try { CreateResult myAttachmentContentCreateResult = restApi.Create("AttachmentContent", myAttachmentContent); String myAttachmentContentRef = myAttachmentContentCreateResult.Reference; Console.WriteLine("Created: " + myAttachmentContentRef); // DynamicJSONObject for Attachment Container DynamicJsonObject myAttachment = new DynamicJsonObject(); myAttachment["Artifact"] = storyReference; myAttachment["Content"] = myAttachmentContentRef; myAttachment["Name"] = "AttachmentFromREST.png"; myAttachment["Description"] = "Attachment Desc"; myAttachment["ContentType"] = "image/png"; myAttachment["Size"] = imageNumberBytes; myAttachment["User"] = myUserRef; CreateResult myAttachmentCreateResult = restApi.Create("Attachment", myAttachment); List <string> createErrors = myAttachmentContentCreateResult.Errors; for (int i = 0; i < createErrors.Count; i++) { Console.WriteLine(createErrors[i]); } String myAttachmentRef = myAttachmentCreateResult.Reference; Console.WriteLine("Created: " + myAttachmentRef); } catch (Exception e) { Console.WriteLine("Unhandled exception occurred: " + e.StackTrace); Console.WriteLine(e.Message); } }
static void Main(string[] args) { // Set user parameters String userName = "******"; String userPassword = "******"; // 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 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(); }
static void Main(string[] args) { RallyRestApi restApi = new RallyRestApi(webServiceVersion: "v2.0"); String apiKey = "_abc123"; restApi.Authenticate(apiKey, "https://rally1.rallydev.com", allowSSO: false); String workspaceRef = "/workspace/1011574887"; String projectRef = "/project/1791269111"; String userName = "******"; try { Request storyRequest = new Request("hierarchicalrequirement"); storyRequest.Workspace = workspaceRef; storyRequest.Project = projectRef; storyRequest.Fetch = new List <string>() { "FormattedID" }; storyRequest.Query = new Query("FormattedID", Query.Operator.Equals, "US2917"); QueryResult queryResult = restApi.Query(storyRequest); var storyObject = queryResult.Results.First(); String storyReference = storyObject["_ref"]; Request userRequest = new Request("user"); userRequest.Fetch = new List <string>() { "UserName" }; userRequest.Query = new Query("UserName", Query.Operator.Equals, userName); QueryResult queryUserResults = restApi.Query(userRequest); DynamicJsonObject user = new DynamicJsonObject(); user = queryUserResults.Results.First(); String userRef = user["_ref"]; String imageFilePath = "C:\\images\\"; String imageFileName = "rally.png"; String fullImageFile = imageFilePath + imageFileName; Image myImage = Image.FromFile(fullImageFile); string imageBase64String = ImageToBase64(myImage, System.Drawing.Imaging.ImageFormat.Png); var imageNumberBytes = Convert.FromBase64String(imageBase64String).Length; Console.WriteLine("Image size: " + imageNumberBytes); DynamicJsonObject myAttachmentContent = new DynamicJsonObject(); myAttachmentContent["Content"] = imageBase64String; CreateResult myAttachmentContentCreateResult = restApi.Create(workspaceRef, "AttachmentContent", myAttachmentContent); String myAttachmentContentRef = myAttachmentContentCreateResult.Reference; Console.WriteLine(myAttachmentContentRef); DynamicJsonObject myAttachment = new DynamicJsonObject(); myAttachment["Artifact"] = storyReference; myAttachment["Content"] = myAttachmentContentRef; myAttachment["Name"] = "rally.png"; myAttachment["Description"] = "Attachment Desc"; myAttachment["ContentType"] = "image/png"; myAttachment["Size"] = imageNumberBytes; myAttachment["User"] = userRef; CreateResult myAttachmentCreateResult = restApi.Create(workspaceRef, "Attachment", myAttachment); List <string> createErrors = myAttachmentContentCreateResult.Errors; for (int i = 0; i < createErrors.Count; i++) { Console.WriteLine(createErrors[i]); } String myAttachmentRef = myAttachmentCreateResult.Reference; Console.WriteLine(myAttachmentRef); } catch (Exception e) { Console.WriteLine(e); } }
static void Main(string[] args) { RallyRestApi restApi; restApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "v2.0"); String projectRef = "/project/12352608219"; Request defectRequest = new Request("Defect"); defectRequest.Project = projectRef; defectRequest.Fetch = new List <string>() { "Name", "FormattedID", "Tasks" }; defectRequest.Query = new Query("FormattedID", Query.Operator.Equals, "DE8"); QueryResult defectResults = restApi.Query(defectRequest); String defRef = defectResults.Results.First()._ref; String defName = defectResults.Results.First().Name; Console.WriteLine(defName + " " + defRef); DynamicJsonObject defect = restApi.GetByReference(defRef, "Name", "FormattedID", "Tasks"); String taskCollectionRef = defect["Tasks"]._ref; Console.WriteLine(taskCollectionRef); ArrayList taskList = new ArrayList(); foreach (var d in defectResults.Results) { Request tasksRequest = new Request(d["Tasks"]); QueryResult tasksResult = restApi.Query(tasksRequest); foreach (var t in tasksResult.Results) { var tName = t["Name"]; var tFormattedID = t["FormattedID"]; Console.WriteLine("Task: " + tName + " " + tFormattedID); DynamicJsonObject task = new DynamicJsonObject(); task["_ref"] = t["_ref"]; taskList.Add(task); } } Console.WriteLine("Count of elements in the collection before adding a new task: " + taskList.Count); DynamicJsonObject newTask = new DynamicJsonObject(); newTask["Name"] = "another last task"; newTask["WorkProduct"] = defRef; CreateResult createResult = restApi.Create(projectRef, "Task", newTask); newTask = restApi.GetByReference(createResult.Reference, "FormattedID", "Name", "WorkProduct"); Console.WriteLine(newTask["FormattedID"] + " " + newTask["Name"] + " WorkProduct:" + newTask["WorkProduct"]["FormattedID"]); taskList.Add(newTask); Console.WriteLine("Count of elements in the array after adding a new task: " + taskList.Count); defect["Tasks"] = taskList; OperationResult updateResult = restApi.Update(defRef, defect); }
private string TestHelperCreateDefect(RallyRestApi restApi, bool includeFullData = false) { var dynamicJson = new DynamicJsonObject(); dynamicJson["Name"] = "C# Json Rest Toolkit Test Defect"; if (includeFullData) { dynamicJson["Owner"] = restApi.GetCurrentUser()["_ref"]; dynamicJson["Package"] = "Package A"; } CreateResult response = restApi.Create("defect", dynamicJson); Assert.AreEqual(0, response.Errors.Count); Assert.IsTrue(response.Reference.ToLower().Contains("defect")); return response.Reference; }