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); }
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[] workspaces = new String[] { "/workspace/12352608129", "/workspace/34900020610" }; foreach (var s in workspaces) { Console.WriteLine(" ______________ " + s + " _________________"); Request typedefRequest = new Request("TypeDefinition"); typedefRequest.Workspace = s; typedefRequest.Fetch = new List<string>() { "ElementName", "Ordinal" }; typedefRequest.Query = new Query("Parent.Name", Query.Operator.Equals, "Portfolio Item"); QueryResult typedefResponse = restApi.Query(typedefRequest); foreach (var t in typedefResponse.Results) { if (t["Ordinal"] > -1) { Console.WriteLine("ElementName: " + t["ElementName"] + " Ordinal: " + t["Ordinal"]); } } } }
static void Main(string[] args) { //Initialize the REST API RallyRestApi restApi; //with this user I get hundreds of workspaces - this is a subadmin restApi = new RallyRestApi("*****@*****.**", "supersecret", "https://rally1.rallydev.com", "v2.0"); //with this user I get only two workspaces //restApi = new RallyRestApi("*****@*****.**", "scret", "https://rally1.rallydev.com", "v2.0"); /***************THIS CODE PRINTS OUT ALL WORKSPACES AND PROJECTS IN THE SUB ******************************/ //get the current subscription DynamicJsonObject sub = restApi.GetSubscription("Workspaces"); Request wRequest = new Request(sub["Workspaces"]); wRequest.Limit = 1000; QueryResult queryResult = restApi.Query(wRequest); int allProjects = 0; foreach (var result in queryResult.Results) { var workspaceReference = result["_ref"]; var workspaceName = result["Name"]; Console.WriteLine("Workspace: " + workspaceName); Request projectsRequest = new Request(result["Projects"]); projectsRequest.Fetch = new List<string>() { "Name", "State", }; projectsRequest.Limit = 10000; //project requests are made per workspace QueryResult queryProjectResult = restApi.Query(projectsRequest); int projectsPerWorkspace = 0; foreach (var p in queryProjectResult.Results) { allProjects++; projectsPerWorkspace++; Console.WriteLine(projectsPerWorkspace + " Project: " + p["Name"] + " State: " + p["State"]); } Console.WriteLine("----------------------------"); } Console.WriteLine("Returned " + allProjects + " projects in the subscription"); }
static void Main(string[] args) { //Initialize the REST API using API KEYd RallyRestApi restApi; restApi = new RallyRestApi("_abc123", "https://rally1.rallydev.com"); DateTime now = DateTime.Today; DateTime checkback = now.AddDays(-2); //last two days String checkbackString = checkback.ToString("yyyy-MM-dd"); //get the subscription DynamicJsonObject sub = restApi.GetSubscription("Workspaces"); Request wRequest = new Request(sub["Workspaces"]); wRequest.Limit = 1000; QueryResult queryResult = restApi.Query(wRequest); foreach (var result in queryResult.Results) { var workspaceReference = result["_ref"]; var workspaceName = result["Name"]; Request projectsRequest = new Request(result["Projects"]); projectsRequest.Fetch = new List<string>() { "Name" }; projectsRequest.Limit = 1000; QueryResult queryProjectResult = restApi.Query(projectsRequest); foreach (var p in queryProjectResult.Results) { Request artifactRequest = new Request("artifact"); artifactRequest.Project = p["_ref"]; artifactRequest.Query = new Query("LastUpdateDate", Query.Operator.GreaterThanOrEqualTo, checkbackString); QueryResult queryResults = restApi.Query(artifactRequest); if (queryResults.TotalResultCount > 0) { Console.WriteLine("Project: " + p["Name"] + " (Workspace " + workspaceName + ")"); } } } }
static void Main(string[] args) { RallyRestApi restApi; restApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "v2.0"); String workspaceRef = "/workspace/12352608129"; //use your workspace object id Request defectRequest = new Request("defect"); defectRequest.Workspace = workspaceRef; defectRequest.Query = new Query("LastUpdateDate", Query.Operator.GreaterThanOrEqualTo, "2014-07-20"); defectRequest.Fetch = new List<string>() { "Name", "FormattedID" }; int stopAfter = 2; //KEEP IT LOW UNTIL YOU MAKE SURE IT IS DELETING THE INTENDED SUBSET OF YOUR DATA int count = 0; QueryResult queryDefectResults = restApi.Query(defectRequest); foreach (var d in queryDefectResults.Results) { if (count == stopAfter) { break; } Console.WriteLine("Deleting: " + d["FormattedID"] + " " + d["Name"]); OperationResult deleteResult = restApi.Delete(workspaceRef, d["_ref"]); //DELTED DEFECTS WILL BE FOUND IN THE RECYCLE BIN count++; } }
static void Main(string[] args) { int storyCount = 0; int taskCount = 0; RallyRestApi restApi; restApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "v2.0"); String workspaceRef = "/workspace/12352608129"; //replace this OID with an OID of your workspace Request sRequest = new Request("HierarchicalRequirement"); sRequest.Workspace = workspaceRef; sRequest.Fetch = new List<string>() { "FormattedID", "Name", "Tasks", "Iteration"}; sRequest.Query = new Query("(Iteration.StartDate <= Today)").And(new Query("(Iteration.EndDate >= Today)")); QueryResult queryResults = restApi.Query(sRequest); foreach (var s in queryResults.Results) { Console.WriteLine("FormattedID: " + s["FormattedID"] + " Name: " + s["Name"]); storyCount++; Request tasksRequest = new Request(s["Tasks"]); QueryResult queryTaskResult = restApi.Query(tasksRequest); foreach (var t in queryTaskResult.Results) { Console.WriteLine("Task: " + t["FormattedID"] + " State: " + t["State"]); taskCount++; } } Console.WriteLine(storyCount + " stories, " + taskCount + " tasks "); }
static void Main(string[] args) { RallyRestApi restApi; restApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "v2.0"); String workspaceRef = "/workspace/12345"; //replace this OID with ObjectID of your workspace Request revRequest = new Request("Revision"); revRequest.Workspace = workspaceRef; revRequest.Fetch = new List<string>() { "Description", "User", "CreationDate" }; DateTime now = DateTime.Now; Console.WriteLine("now: " + now); //look 4 hours back //DateTime fourHoursBack = now.AddHours(-4); //String fourHoursBackString = fourHoursBack.ToString("yyyy-MM-dd" + "T" + "HH:mm"); //Console.WriteLine(fourHoursBack); //Console.WriteLine(fourHoursBackString); //revRequest.Query = new Query("CreationDate", Query.Operator.GreaterThanOrEqualTo, fourHoursBackString); //look 10 min back DateTime someMinutesBack = now.AddMinutes(-10); String someMinutesBackString = someMinutesBack.ToString("yyyy-MM-dd" + "T" + "HH:mm"); Console.WriteLine("someMinutesBack: " + someMinutesBack); Console.WriteLine("someMinutesBackString: " + someMinutesBackString); revRequest.Query = new Query("CreationDate", Query.Operator.GreaterThanOrEqualTo, someMinutesBackString); QueryResult queryRevResults = restApi.Query(revRequest); foreach (var rev in queryRevResults.Results) { Console.WriteLine("----------"); Console.WriteLine("Description: " + rev["Description"] + " Author: " + rev["User"]._refObjectName + " CreationDate: " + rev["CreationDate"]); } }
static void Main(string[] args) { int storyCount = 0; int taskCount = 0; RallyRestApi restApi; restApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "v2.0"); String workspaceRef = "/workspace/1234"; //replace this OID with an OID of your workspace Request sRequest = new Request("HierarchicalRequirement"); sRequest.Workspace = workspaceRef; sRequest.Fetch = new List<string>() { "FormattedID", "Name", "Tasks", "Release", "Project", "Owner" }; sRequest.Query = new Query("Release.Name", Query.Operator.Equals, "r1").And(new Query("Owner", Query.Operator.Equals, "*****@*****.**")); QueryResult queryResults = restApi.Query(sRequest); foreach (var s in queryResults.Results) { Console.WriteLine("FormattedID: " + s["FormattedID"] + " Name: " + s["Name"] + " Release: " + s["Release"]._refObjectName + " Project: " + s["Project"]._refObjectName + " Owner: " + s["Owner"]._refObjectName); storyCount++; Request tasksRequest = new Request(s["Tasks"]); QueryResult queryTaskResult = restApi.Query(tasksRequest); foreach (var t in queryTaskResult.Results) { Console.WriteLine("Task: " + t["FormattedID"] + " State: " + t["State"]); taskCount++; } } Console.WriteLine(storyCount + " stories, "+ taskCount + " tasks "); }
static void Main(string[] args) { RallyRestApi restApi; restApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "v2.0"); String projectRef = "/project/12352608219"; Request request = new Request("TestSet"); request.Project = projectRef; request.Fetch = new List<string>() { "Name", "FormattedID", "TestCases" }; request.Query = new Query("FormattedID", Query.Operator.Equals, "TS31"); QueryResult result = restApi.Query(request); String testsetRef = result.Results.First()._ref; DynamicJsonObject testset = restApi.GetByReference(testsetRef, "TestCases"); Request request2 = new Request(testset["TestCases"]); request2.Fetch = new List<string>() { "Name", "FormattedID" }; request2.Limit = 1000; QueryResult result2 = restApi.Query(request2); int caseCount = 0; foreach (var testcase in result2.Results) { Console.WriteLine("TestCase: " + testcase["FormattedID"]); caseCount++; } Console.WriteLine(caseCount); }
static void Main(string[] args) { RallyRestApi restApi; restApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "v2.0"); String workspaceRef = "/workspace/12345"; //replace this OID with an OID of your workspace DateTime today = DateTime.Today; DateTime checkback = today.AddDays(-2); //last two days String checkbackString = checkback.ToString("yyyy-MM-dd"); Request sRequest = new Request("HierarchicalRequirement"); sRequest.Workspace = workspaceRef; sRequest.Fetch = new List<string>() { "Name", "FormattedID", "RevisionHistory", "Revisions", "LastUpdateDate" }; sRequest.Query = new Query("LastUpdateDate", Query.Operator.GreaterThanOrEqualTo, checkbackString); QueryResult queryResults = restApi.Query(sRequest); foreach (var s in queryResults.Results) { Console.WriteLine("**********************************************************"); Console.WriteLine("FormattedID: " + s["FormattedID"] + " Name: " + s["Name"]); Console.WriteLine("**********************************************************"); String historyRef = s["RevisionHistory"]._ref; Request revisionsRequest = new Request("Revisions"); revisionsRequest.Query = new Query("RevisionHistory", Query.Operator.Equals, historyRef); revisionsRequest.Fetch = new List<string>() { "User", "Description", "RevisionNumber", "CreationDate" }; QueryResult revisionsResults = restApi.Query(revisionsRequest); foreach (var r in revisionsResults.Results) { Console.WriteLine("-------------------------------------------------------"); Console.WriteLine("Description: " + r["Description"] + " Author: " + r["User"]._refObjectName + " CreationDate: " + r["CreationDate"]); } } }
public List<dynamic> GetArtifactNotificationForDateRange(RallyRestApi rallyApi, string LastItemDateStamp, string currentRunTime, string projectRef) { List<dynamic> returnValue; Request request = new Request("artifactnotification"); request.Project = projectRef; //request.PageSize = 200; request.Limit = 5000; request.Fetch = new List<string>() { "IDPrefix", "ID"}; request.Query = new Query("CreationDate", Query.Operator.GreaterThan, LastItemDateStamp).And(new Query("CreationDate", Query.Operator.LessThanOrEqualTo, currentRunTime)); try { QueryResult qr = rallyApi.Query(request); var results = qr.Results; foreach (var r in results) { Console.WriteLine(r["IDPrefix"] + r["ID"]); } returnValue = results.ToList(); return returnValue; } catch (Exception) { throw; } }
static void Main(string[] args) { RallyRestApi restApi; restApi = new RallyRestApi("_abc123", "https://rally1.rallydev.com"); String projectRef = "/project/12352608219"; bool projectScopingUp = false; bool projectScopingDown = false; Request storyRequest = new Request("hierarchicalrequirement"); storyRequest.Project = projectRef; storyRequest.ProjectScopeUp = projectScopingUp; storyRequest.ProjectScopeDown = projectScopingDown; storyRequest.Limit = 10000; storyRequest.Query = new Query("LastUpdateDate", Query.Operator.GreaterThanOrEqualTo, "2013-01-01"); storyRequest.Fetch = new List<string>() { "Name", "FormattedID" }; QueryResult queryResults = restApi.Query(storyRequest); int count = 0; foreach (var d in queryResults.Results) { count++; Console.WriteLine(count + ". FormattedID: " + d["FormattedID"] + " Name: " + d["Name"]); } Console.WriteLine("Found " + queryResults.TotalResultCount); }
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/12352608129"; //String projectRef = "/project/39468725060"; Request request = new Request("Attachment"); request.Workspace = workspaceRef; //request.Project = projectRef; request.Fetch = new List<string>() { "Artifact", "TestCaseResult", "Size", "CreationDate" }; request.Limit = 400; request.Order = "CreationDate Desc"; QueryResult results = restApi.Query(request); foreach (var a in results.Results) { if (a["Artifact"] != null) { Console.WriteLine("Artifact: " + a["Artifact"]["_ref"]); } else if (a["TestCaseResult"] != null) { Console.WriteLine("TestCaseResult: " + a["TestCaseResult"]["_ref"]); } Console.WriteLine("Size: " + a["Size"]); } }
public List<dynamic> GetStories(string currentRunTime, string projectRef) { List<dynamic> returnValue; RallyRestApi rallyApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "v2.0"); Request request = new Request("HierarchicalRequirement"); request.Project = projectRef; request.ProjectScopeUp = false; request.ProjectScopeDown = false; request.PageSize = 200; try { QueryResult qr = rallyApi.Query(request); var results = qr.Results; returnValue = results.ToList(); while (results.Count() == 200) { Console.WriteLine("inside while loop... " + results.Count()); request.Start = returnValue.Count + 1; results = rallyApi.Query(request).Results; returnValue.AddRange(results); } Console.WriteLine("total results returned... " + returnValue.Count); } catch (Exception) { throw; } return returnValue; }
static void Main(string[] args) { String apiKey = "_abc123"; RallyRestApi restApi = new RallyRestApi(apiKey, "https://rally1.rallydev.com"); String projectRef = "/project/12352608219"; Request request = new Request("RecycleBinEntry"); request.Project = projectRef; request.Fetch = new List<string>() { "Name"}; request.Query = new Query("ID", Query.Operator.Equals, "DE6"); QueryResult result = restApi.Query(request); Console.WriteLine("Name: " + result.Results.First()["Name"]); }
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); } }
static void Main(string[] args) { RallyRestApi restApi; restApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "v2.0"); String projectRef = "/project/222"; Request testSetRequest = new Request("TestSet"); testSetRequest.Project = projectRef; testSetRequest.Fetch = new List<string>() { "Name", "FormattedID", "TestCases" }; testSetRequest.Query = new Query("FormattedID", Query.Operator.Equals, "TS22"); QueryResult queryTestSetResults = restApi.Query(testSetRequest); String tsRef = queryTestSetResults.Results.First()._ref; String tsName = queryTestSetResults.Results.First().Name; Console.WriteLine(tsName + " " + tsRef); DynamicJsonObject testSet = restApi.GetByReference(tsRef, "FormattedID", "TestCases"); String testCasesCollectionRef = testSet["TestCases"]._ref; Console.WriteLine(testCasesCollectionRef); ArrayList testCasesList = new ArrayList(); foreach (var ts in queryTestSetResults.Results) { Request tcRequest = new Request(ts["TestCases"]); QueryResult queryTestCasesResult = restApi.Query(tcRequest); foreach (var tc in queryTestCasesResult.Results) { var tName = tc["Name"]; var tFormattedID = tc["FormattedID"]; Console.WriteLine("Test Case: " + tName + " " + tFormattedID); DynamicJsonObject aTC = new DynamicJsonObject(); aTC["_ref"] = tc["_ref"]; testCasesList.Add(aTC); //add each test case in the collection to array 'testCasesList' } } Console.WriteLine("count of elements in the array before adding a new tc:" + testCasesList.Count); DynamicJsonObject anotherTC = new DynamicJsonObject(); anotherTC["_ref"] = "/testcase/123456789"; //any existing test to add to the collection testCasesList.Add(anotherTC); Console.WriteLine("count of elements in the array:" + testCasesList.Count); testSet["TestCases"] = testCasesList; OperationResult updateResult = restApi.Update(tsRef, testSet); }
public Defect GetRallyDefect(string key) { var request = new Request("defect") { Fetch = new List<string> { "Name", "Description", "State", "CreationDate" }, Query = new Query("FormattedId", Query.Operator.Equals, key) }; //If we get an exception from the underlying connection, we currently need to swallow it and return a null... QueryResult queryResult; try { queryResult = _rallyRestApi.Query(request); } catch (Exception) { return null; } //Likewise if the result is null or we don't get any results... if (queryResult == null || !queryResult.Results.Any()) return null; var firstResult = queryResult.Results.FirstOrDefault(); if (firstResult == null) return null; // Extract the defect id var defectIdMatch = DefectIdResolver.Match(firstResult["_ref"] as string); if (!defectIdMatch.Success) return null; var defectId = defectIdMatch.Groups["Id"].Value; var baseUri = new Uri(_rallyRestApi.WebServiceUrl); var baseUrl = string.Format("{0}://{1}#/detail/defect/{2}", baseUri.Scheme, baseUri.Host, defectId); return new Defect { Id = defectId, FormattedId = key, Created = DateTime.Parse(firstResult["CreationDate"]), State = firstResult["State"], Name = firstResult["Name"], Description = firstResult["Description"], Url = baseUrl }; }
static void Main(string[] args) { RallyRestApi restApi; //restApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "v2.0"); restApi = new RallyRestApi("_abc123", "https://rally1.rallydev.com"); //either username/passowrd or API Key authetnication is valid String workspaceRef = "/workspace/12352608129"; //replace this OID with an OID of your workspace DateTime today = DateTime.Today; DateTime checkback = today.AddDays(-5); String checkbackString = checkback.ToString("yyyy-MM-dd"); Request sRequest = new Request("HierarchicalRequirement"); sRequest.Workspace = workspaceRef; sRequest.Fetch = new List<string>() { "Name", "FormattedID", "Changesets", "LastUpdateDate" }; sRequest.Query = new Query("LastUpdateDate", Query.Operator.GreaterThanOrEqualTo, checkbackString); QueryResult queryResults = restApi.Query(sRequest); foreach (var s in queryResults.Results) { Console.WriteLine("**********************************************************"); Console.WriteLine("FormattedID: " + s["FormattedID"] + " Name: " + s["Name"]); Console.WriteLine("**********************************************************"); Request changesetRequest = new Request("Changesets"); QueryResult changesetResult = restApi.Query(changesetRequest); String author = "None"; if (changesetResult.TotalResultCount > 0) { foreach (var c in changesetResult.Results) { if (c["Author"] != null) { author = c["Author"]._refObjectName; } Console.WriteLine("changeset: Author:" + author + " SCMRepository: " + c["SCMRepository"]._refObjectName + " Message: " + c["Message"]); Request changesRequest = new Request(c["Changes"]); QueryResult changesResult = restApi.Query(changesRequest); foreach (var ch in changesResult.Results) { Console.WriteLine("Change: " + ch["Action"] + " PathAndFilename: " + ch["PathAndFilename"]); } } } } }
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) { //Initialize the REST API RallyRestApi restApi; restApi = new RallyRestApi("*****@*****.**", "topsecret", "https://rally1.rallydev.com", "v2.0"); //Set our Workspace and Project scopings String workspaceRef = "/workspace/1111"; //use valid OID of your workspace String projectRef = "/project/2222"; //use valid OID of your project bool projectScopingUp = false; bool projectScopingDown = true; Request userRequest = new Request("User"); userRequest.Workspace = workspaceRef; userRequest.Project = projectRef; userRequest.ProjectScopeUp = projectScopingUp; userRequest.ProjectScopeDown = projectScopingDown; /* userRequest.Fetch = new List<string>() { "Role", "CostCenter", "LastLoginDate", "OfficeLocation", "CreationDate" };*/ userRequest.Query = new Query("UserName", Query.Operator.Equals, "*****@*****.**"); QueryResult userResults = restApi.Query(userRequest); String userRef = userResults.Results.First()._ref; DynamicJsonObject user = restApi.GetByReference(userRef, "Name", "Role", "CostCenter", "LastLoginDate", "OfficeLocation", "CreationDate"); String role = user["Role"]; String costCenter = user["CostCenter"]; String lastLoginDate = user["LastLoginDate"]; String officeLocation = user["OfficeLocation"]; String creationDate = user["CreationDate"]; Console.WriteLine("Role: " + role + " CostCenter: " + costCenter + " LastLoginDate: " + lastLoginDate + " OfficeLocation: " + officeLocation + " CreationDate: " + creationDate); }
static void Main(string[] args) { RallyRestApi restApi; restApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "v2.0"); String workspaceRef = "/workspace/12352608129"; //replace this OID with an ObjectID of your workspace Request revRequest = new Request("Revision"); revRequest.Workspace = workspaceRef; revRequest.Fetch = new List<string>() { "Description", "User", "CreationDate" }; DateTime today = DateTime.Today; String todayString = today.ToString("yyyy-MM-dd"); revRequest.Query = new Query("CreationDate", Query.Operator.GreaterThanOrEqualTo, todayString); QueryResult queryRevResults = restApi.Query(revRequest); foreach (var rev in queryRevResults.Results) { Console.WriteLine("----------"); Console.WriteLine("Description: " + rev["Description"] + " Author: " + rev["User"]._refObjectName + " CreationDate: " + rev["CreationDate"]); } }
static void Main(string[] args) { //Initialize the REST API RallyRestApi restApi; restApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "v2.0"); //Set Workspace String workspaceRef = "/workspace/12352608129"; //please replace this OID with an OID of your workspace Request revRequest = new Request("Revision"); revRequest.Workspace = workspaceRef; revRequest.Fetch = new List<string>() { "Description"}; DateTime now = DateTime.Today; DateTime oneMonthBack = now.AddMonths(-1); String thenString = oneMonthBack.ToString("yyyy-MM-dd"); revRequest.Query = new Query("CreationDate", Query.Operator.GreaterThanOrEqualTo, thenString); QueryResult queryRevResults = restApi.Query(revRequest); Console.WriteLine(queryRevResults.TotalResultCount); }
static void Main(string[] args) { RallyRestApi restApi; //this app is using old 2.0.1 of .NET Toolkit restApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "v2.0"); String workspaceRef = "/workspace/12345"; //replace this OID with an OID of your workspace Request request = new Request("Artifact"); request.Workspace = workspaceRef; request.Fetch = new List<string>() { "FormattedID", "Name"}; request.Query = new Query("FormattedID", Query.Operator.Equals, "DE4"); QueryResult result = restApi.Query(request); //since artifact query disregards prefix in FormattedID, it will return DE4, TA4, US4 if they all exist, hence //there is no guarantee that the first result will be a defect id we use result.Results.First()._ref as below: //String defectRef = result.Results.First()._ref; String defectRef = ""; foreach (var artifact in result.Results) { Console.WriteLine(artifact["_type"] + ": " + artifact["_ref"]); if (artifact["_type"] == "Defect") { defectRef = artifact["_ref"]; } } Request conversationPostRequest = new Request("ConversationPost"); conversationPostRequest.Workspace = workspaceRef; conversationPostRequest.Query = new Query("Artifact", Query.Operator.Equals, defectRef); conversationPostRequest.Fetch = new List<string>() { "Text", "User" }; QueryResult conversationPostResult = restApi.Query(conversationPostRequest); Console.WriteLine("Discussions:-------------------"); foreach (var post in conversationPostResult.Results) { Console.WriteLine(post["User"]["_refObjectName"] + ": " + post["Text"]); } }
static void Main(string[] args) { //Initialize the REST API RallyRestApi restApi; restApi = new RallyRestApi("*****@*****.**", "secret", "https://rally1.rallydev.com", "1.43"); //NOTE: 1.43 will be unsupported after June 2014 Request subRequest = new Request("Subscription"); subRequest.Fetch = new List<string>() { "Name", "ObjectID", "Workspaces", "Projects" }; String subQueryString = "(Name = \"Rally Support\")"; subRequest.Query = new Query(subQueryString); QueryResult subQueryResults = restApi.Query(subRequest); foreach (var s in subQueryResults.Results) { Console.WriteLine("Name: " + s["Name"]); Console.WriteLine("ObjectID: " + s["ObjectID"]); var workspaces = s["Workspaces"]; int projectCounter = 0; foreach (var w in workspaces) { Console.WriteLine("Workspace: " + w["ObjectID"] + " " + w["Name"]); var projects = w["Projects"]; foreach (var p in projects) { Console.WriteLine("Project: " + p["ObjectID"] + " " + p["Name"]); projectCounter++; } Console.WriteLine("projects total in the sub: " + projectCounter); } } }
static void Main(string[] args) { DateTime today = DateTime.Today; DateTime forward = today.AddDays(90); String forwardString = forward.ToString("yyyy-MM-dd"); DateTime back = today.AddDays(-90); String backString = back.ToString("yyyy-MM-dd"); RallyRestApi restApi; restApi = new RallyRestApi("_abc123", "https://rally1.rallydev.com"); //either username/passowrd or API Key authetnication is valid String workspaceRef = "/workspace/12352608129"; //replace this OID with an OID of your workspace Request request = new Request("PortfolioItem/Feature"); request.Workspace = workspaceRef; request.Fetch = new List<string>() {"Name","FormattedID","PlannedStartDate","PlannedEndDate"}; request.Query = new Query("PlannedStartDate", Query.Operator.GreaterThan, backString).And(new Query("PlannedEndDate", Query.Operator.LessThanOrEqualTo, forwardString)); QueryResult results = restApi.Query(request); foreach (var f in results.Results) { Console.WriteLine("FormattedID: " + f["FormattedID"] + " Name: " + f["Name"] + " PlannedStartDate: " + f["PlannedStartDate"] + " PlannedEndDate: " + f["PlannedEndDate"]); Console.WriteLine("**********************************************************"); } }
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); }
/// <summary> /// Grabs all User Stories for the indicated parent. The parent can be an Epic or another User Story /// </summary> /// <param name="ParentID">Formatted ID of the Parent</param> /// <param name="ParentName">Name of the parent, specifically the Epic name</param> /// <param name="RootParent">Indicates if the parent is the top-level User Story or not. If looking for sub-stories, things are handled differently</param> public static List<UserStory> GetUserStoriesPerParent(string ParentID, string ParentName, bool RootParent) { List<UserStory> listReturn = new List<UserStory>(); // Grab all UserStories under the given Epic LogOutput("Using RallyAPI to request story information for all parents...", "GetUserStoriesPerParent", true); LogOutput("Building Rally Request...", "GetUserStoriesPerParent", true); Request rallyRequest = new Request("HierarchicalRequirement"); rallyRequest.Fetch = new List<string>() { "Name", "FormattedID", "Release", "Iteration", "Blocked", "Owner", "ScheduleState", "DirectChildrenCount", "Description", "PlanEstimate" }; // If this is the "Root" or highest order User Story, then we want to grab by the FormattedID of the actual portfolio // item. If this is a subordinate, then we want to grab everything where the PARENT object is the FormattedID that // we passed into the method if (RootParent) { rallyRequest.Query = new Query("PortfolioItem.FormattedID", Query.Operator.Equals, ParentID); } else { rallyRequest.Query = new Query("Parent.FormattedID", Query.Operator.Equals, ParentID); } LogOutput("Running Rally Query request...", "GetUserStoriesPerParent", true); QueryResult rallyResult = RallyAPI.Query(rallyRequest); LogOutput("Looping through Query request...", "GetUserStoriesPerParent", true); foreach (var result in rallyResult.Results) { UserStory story = new UserStory(); story.Name = RationalizeData(result["Name"]); story.FormattedID = RationalizeData(result["FormattedID"]); story.Owner = RationalizeData(result["Owner"]); story.Release = RationalizeData(result["Release"]); story.Iteration = RationalizeData(result["Iteration"]); story.State = RationalizeData(result["ScheduleState"]); story.Children = RationalizeData(result["DirectChildrenCount"]); story.Description = RationalizeData(result["Description"]); story.ParentProject = ParentID; story.ParentEpic = ParentName; story.PlanEstimate = RationalizeData(result["PlanEstimate"], true); story.Tasks = GetTasksForUserStory(story.FormattedID); story.Blocked = RationalizeData(result["Blocked"]); LogOutput("Appending new story object to return list...", "GetUserStoriesPerParent", true); listReturn.Add(story); LogOutput(story.FormattedID + " " + story.Name, "GetUserStoriesPerParent", true); // Check for children. If there are children, then we need to drill down // through all children to retrieve the full list of stories if (story.Children > 0) { // Recursively get child stories until we reach the lowest level listReturn.AddRange(GetUserStoriesPerParent(story.FormattedID.Trim(), "", false)); } } LogOutput("Completed processing all stories, returning list", "GetUserStoriesPerParent", true); return listReturn; }
/// <summary> /// retrieves all Tasks for the indicated User Story /// </summary> /// <param name="StoryID">Formatted ID of the User Story to get tasks for</param> public static List<Task> GetTasksForUserStory(string StoryID) { List<Task> listReturn = new List<Task>(); // Grab all Tasks under the given Story LogOutput("Using RallyAPI to request task information for all stories...", "GetTasksForUserStory", true); LogOutput("Building Rally Request...", "GetTasksForUserStory", true); Request rallyRequest = new Request("Tasks"); rallyRequest.Fetch = new List<string>() { "Name", "FormattedID", "Estimate", "ToDo", "Actuals", "Owner", "State", "Description", "LastUpdateDate", "Blocked", "BlockedReason" }; rallyRequest.Query = new Query("WorkProduct.FormattedID", Query.Operator.Equals, StoryID); LogOutput("Running Rally Query request...", "GetTasksForUserStory", true); QueryResult rallyResult = RallyAPI.Query(rallyRequest); LogOutput("Looping through Query request...", "GetTasksForUserStory", true); foreach (var result in rallyResult.Results) { Task task = new Task(); task.Name = RationalizeData(result["Name"]); task.FormattedID = RationalizeData(result["FormattedID"]); task.Owner = RationalizeData(result["Owner"]); task.Estimate = (decimal)RationalizeData(result["Estimate"], true); task.ToDo = (decimal)RationalizeData(result["ToDo"], true); task.Actual = (decimal)RationalizeData(result["Actuals"], true); task.State = RationalizeData(result["State"]); task.Description = RationalizeData(result["Description"]); task.LastUpdate = Convert.ToDateTime(RationalizeData(result["LastUpdateDate"])); task.Blocked = RationalizeData(result["Blocked"]); task.BlockedReason = RationalizeData(result["BlockedReason"]); LogOutput("Appending new task object to return list...", "GetTasksForUserStory", true); listReturn.Add(task); } LogOutput("Completed processing all tasks, returning list", "GetTasksForUserStory", true); return listReturn; }
/// <summary> /// This will retrieve all projects (Rally "Features") for the passed Initiative /// </summary> /// <param name="InitiativeID">Formatted ID of the Initiative in Rally</param> public static List<Project> GetProjectsForInitiative(string InitiativeID) { List<Project> listReturn = new List<Project>(); // Grab all Features under the given initiative LogOutput("Using RallyAPI to request project information for all Initiatives...", "GetProjectsForInitiative", true); LogOutput("Building Rally Request...", "GetProjectsForInitiative", true); //Request rallyRequest = new Request("PortfolioItem/Feature"); Request rallyRequest = new Request("PortfolioItem/Initiative"); rallyRequest.Fetch = new List<string>() { "Name", "FormattedID", "Owner", "PlannedStartDate", "PlannedEndDate", "ActualEndDate", "c_ProjectUpdate", "c_RevokedReason", "State", "ValueScore", "Description", "Expedite", "c_UpdateOwner", "c_Stakeholder", "Project", "LastUpdateDate", "StateChangedDate" }; rallyRequest.Query = new Query("Parent.Name", Query.Operator.Equals, InitiativeID); LogOutput("Running Rally Query request...", "GetProjectsForInitiative", true); QueryResult rallyResult = RallyAPI.Query(rallyRequest); LogOutput("Looping through Query request...", "GetProjectsForInitiative", true); foreach (var result in rallyResult.Results) { // Create and populate the Project object Project proj = new Project(); proj.Name = RationalizeData(result["Name"]); proj.FormattedID = RationalizeData(result["FormattedID"]); proj.Owner = RationalizeData(result["Owner"]); proj.PlannedEndDate = Convert.ToDateTime(result["PlannedEndDate"]); proj.PlannedStartDate = Convert.ToDateTime(result["PlannedStartDate"]); proj.ActualEndDate = Convert.ToDateTime(result["ActualEndDate"]); proj.LastUpdateDate = Convert.ToDateTime(result["LastUpdateDate"]); proj.StatusUpdate = GetPlainTextFromHtml(RationalizeData(result["c_ProjectUpdate"])); proj.RevokedReason = RationalizeData(result["c_RevokedReason"]); proj.OpportunityAmount = RationalizeData(result["ValueScore"]); proj.State = RationalizeData(result["State"]); proj.StakeHolder = RationalizeData(result["c_Stakeholder"]); proj.Description = GetPlainTextFromHtml(RationalizeData(result["Description"])); proj.Expedite = RationalizeData(result["Expedite"]); proj.UpdateOwner = RationalizeData(result["c_UpdateOwner"]); proj.Initiative = InitiativeID; proj.ScrumTeam = RationalizeData(result["Project"]); proj.StateChangedDate = Convert.ToDateTime(result["StateChangedDate"]); LogOutput("Appending new project object to return list...", "GetProjectsForInitiative", true); listReturn.Add(proj); } LogOutput("Completed processing all projects, returning list", "GetProjectsForInitiative", true); return listReturn; }