/// <summary> /// See ticket for original code: https://versiononesupport.zendesk.com/agent/tickets/27711 /// </summary> public static void QueryForPraveen() { var client = new VersionOneRestClient(V1_REST_API_URL, USERNAME, PASSWORD); var results = client.Query("Story") .Select("Name", "Status.Name", "AssetState", "IsDeleted") .Where( Or( Equal("Name", "Story 1"), NotEqual("AssetState", 64) ) ) .Retrieve(); /** Alternative syntax ideas: // Using chained Or after an operator: var results = client.Query("Story") .Select("Name", "Status.Name", "AssetState", "IsDeleted") .Where( Equal("Name", "Story 1").Or(NotEqual("AssetState", 64)) ) .Retrieve(); // Using extension methods: var results = client.Query("Story") .Select("Name", "Status.Name", "AssetState", "IsDeleted") .Where( "Name".Equal("Story 1") .Or( "AssetState".Equal(64) ) ) .Retrieve(); **/ foreach (dynamic story in results) { // Debug.WriteLine($"Story OID Token: {story.OidToken}"); // TODO: fix this part Debug.WriteLine($"Name: {story.Name}"); Debug.WriteLine($"Status: {story["Status.Name"]}"); Debug.WriteLine($"AssetState: {story.AssetState}"); } }
private static void QueryWithStronglyTypedQueryBuilderForMemberWithLambdaBasedFilter(VersionOneRestClient client) { WriteIntro("QueryWithStronglyTypedQueryBuilderForMemberWithLambdaBasedFilter:"); var results = client.Query<Member>() .Select(m => m.Name, m => m.Nickname, m => m.Workitems) .Filter(m => m.Name, ComparisonOperator.NotEquals, "Administrator") .Paging(1) .Retrieve(); foreach (Member result in results) { WriteLine("Name:" + result.Name); WriteLine("Description:" + result.Nickname); WriteLine("Workitems count: " + result.Workitems.Count); foreach (var workItemName in result.Workitems) { WriteLine("Work item name: " + workItemName); } WriteLine(Environment.NewLine); } }
private static void QueryForScopes() { var client = new VersionOneRestClient(V1_REST_API_URL, USERNAME, PASSWORD); var featureResult = client .Query("Epic") .Select("Scope", "Scope.Name", "Name", "ID", "Description", "Status", "Priority", "Source") // params array of attribute names // However, you could still do this if you really need the array to hang around: // var attrNames = new[] { "Scope", "Scope.Name", "Name", "ID", "Description", "Status", "Priority", "Source" }; // .Select(attrNames) .Where( Equal("Scope", "Scope:1121"), // Implicit AND when terms separated by commas Equal("Scope.Name", "Sample: Release 1.0") // Other functions thanks to C# 6 "using static" free-standing functions: //,NotEqual //,GreaterThan //,GreaterThanOrEqual //,LessThan //,LessThanOrEqual //,Exists //,NotExists ) .Paging(10, 0) // size 10, start with page 0 .Retrieve(); Debug.WriteLine($"Count = {featureResult.Count}"); var x = 0; foreach (var feature in featureResult) { Debug.WriteLine($"============#: {++x}"); Debug.WriteLine($" Oid : {feature.OidToken}"); //foreach (var attr in feature) //{ // if (attr.Type == Newtonsoft.Json.Linq.JTokenType.String) // { // var value = attr.Value.ToString(); // if (value != null && value.Length > 80) value = value.Substring(1, 80) + "....."; // Debug.WriteLine($"--{attr.Name} : {value}"); // } // else // { // Debug.WriteLine($"--{attr.Name} : {attr.Value}"); // } //} // Array of names approach: var attrNames = new[] { "Scope", "Scope.Name", "Name", "ID", "Description", "Status", "Priority", "Source" }; foreach (var attrName in attrNames) { var attr = feature[attrName] as Newtonsoft.Json.Linq.JToken; if (attr == null) continue; if (attr.Type == Newtonsoft.Json.Linq.JTokenType.String) { var value = attr.ToString(); if (value != null && value.Length > 80) value = value.Substring(1, 80) + "....."; Debug.WriteLine($"--{attrName} : {value}"); } else { Debug.WriteLine($"--{attrName} : {attr}"); } } } var scopeResult = client.Query("Scope") .Select("Name", "Schedule.Name", "Schedule", "Owner") .Where( Equal("Name", "Sample: Release 1.0") ) .Retrieve(); Debug.WriteLine($"Count = {scopeResult.Count}"); x = 0; foreach (dynamic scope in scopeResult) // With dynamic, we can just have scope.Name, etc, etc { Debug.WriteLine($"------------#: {++x}"); Debug.WriteLine($" Oid: {scope.OidToken}"); Debug.WriteLine($"--Name : {scope.Name}"); Debug.WriteLine($"--Schedule Name : {scope["Schedule.Name"]}"); // Using [] syntax to dot-notation into child attributes Debug.WriteLine($"--Schedule: {scope.Schedule}"); // Broken at the moment Debug.WriteLine($"--Owner : {scope.Owner}"); } }
private static void QueryWithIsEqualOperatorConvenienceHelper(VersionOneRestClient client) { WriteIntro("QueryWithIsEqualOperatorConvenienceHelper:"); var results = client.Query("Defect") .Select("Name", "Description", "Children") .Filter("ID", ComparisonOperator.Equals, "Defect:64939") .Paging(10) .Retrieve(); foreach (dynamic result in results) { WriteRawJson(result); WriteLine("Name:" + result.Name); WriteLine("Description:" + result.Description); if (result.Children == null) continue; WriteLine("Chilren count: " + result.Children.Count); foreach (var item in result.Children) { WriteLine("Child: " + item); } } }
private static void QueryWithStronglyTypedQueryBuilderForScopeWithStringBasedFilter(VersionOneRestClient client) { WriteIntro("QueryWithStronglyTypedQueryBuilderForScopeWithStringBasedFilter:"); var results = client.Query<Scope>() .Select(s => s.Name, s => s.Description, s => s.Workitems) .Filter("SecurityScope.Name", ComparisonOperator.NotEquals, "System (All Projects)") .Paging(1) .Retrieve(); foreach (Scope result in results) { WriteLine("Name:" + result.Name); WriteLine("Description:" + result.Description); WriteLine("Workitems count: " + result.Workitems.Count); foreach (var item in result.Workitems) { WriteLine("Workitem: " + item); } WriteLine(Environment.NewLine); } }
private static void QueryWithNotEqualsStringFormFilter(VersionOneRestClient client) { WriteIntro("QueryWithNotEqualsStringFormFilter:"); var results = client.Query("Scope") .Select("Name", "Description", "Workitems.Name") .Filter("SecurityScope.Name", "!=", "System (All Projects)") // excludes top level one .Paging(5, 2) .Retrieve(); foreach (var result in results) { WriteRawJson(result); // Lazy! } }
private static void QueryWithSimpleWhere(VersionOneRestClient client) { WriteIntro("QueryWithSimpleWhere:"); var results = client.Query("Member") //.Select("Name", "Nickname", "OwnedWorkitems.Name") .Where("Name", "Sample: Alfred Smith") // <-- Simple match .Paging(10) .Retrieve(); WriteLine(results.ToString()); foreach (dynamic result in results) { WriteRawJson(result); WriteLine("Name:" + result.Name); WriteLine("Name:" + result.Nickname); result.Parent = "Epic:5555"; if (result["OwnedWorkitems.Name"].HasValues == false) continue; WriteLine("Workitems: " + result["OwnedWorkitems.Name"]); WriteLine("Workitems count: " + result["OwnedWorkitems.Name"].Count); foreach (var proj in result["OwnedWorkitems.Name"]) { WriteLine("Program: " + proj); } } }
private static void QueryWithNotExists(VersionOneRestClient client) { WriteIntro("QueryWithNotExists:"); var results = client.Query("Scope") .Select("Parent", "Children") .Where( NotExists("Parent") ) .Paging(10) .Retrieve(); WriteLine(results.ToString()); foreach (dynamic result in results) { WriteRawJson(result); result.Workitems.RemoveValue("Story:123"); } }
private static void QueryWithExists(VersionOneRestClient client) { WriteIntro("QueryWithExists:"); var results = client.Query("Scope") .Select("Parent") .Where( Exists("Parent") ) .Paging(10) .Retrieve(); WriteLine(results.ToString()); foreach (var result in results) { WriteRawJson(result); } }
private static void Create(VersionOneRestClient client) { WriteIntro("Create:"); var scope = "Scope:86271"; dynamic asset = client.Create("Story", new { Name = "Testing the client.Create method at " + DateTime.Now.ToLongTimeString(), Description = "Just playing around...", Scope = scope, Owners = Relation("Member:20") }); var oidToken = asset.OidToken; asset = client.Create("Issue", new { Name = "My Issue", Scope = scope, PrimaryWorkitems = Relation(oidToken) }); var tok1 = asset.OidToken; WriteLine(tok1); asset = client.Create("Issue", new { Name = "My Issue 2", Scope = scope, PrimaryWorkitems = Relation(oidToken) }); var tok2 = asset.OidToken; WriteLine(tok2); asset = client.Query("Story") .Select("Name", "Issues", "Description") .Where("ID", oidToken) .RetrieveFirst(); WriteLine(asset); var storyTasks = asset._links["Issues"]; WriteLine(storyTasks); //results[0].RemoveRelatedAssets("Issues", "Issue:1", "Issue:2"); //results[0].RemoveRelatedAssets("Issues", new string[] { tok1.ToString(), tok2.ToString() }); //results[0].RemoveRelatedAssets("Issues", new [] { tok1, tok2 }); asset.RemoveRelatedAssets("Issues", tok1, tok2); storyTasks = asset._links["Issues"]; WriteLine(storyTasks); asset.AddRelatedAssets("Issues", tok1); storyTasks = asset._links["Issues"]; WriteLine(storyTasks); asset.Name = "Newbie name"; //results[0].NewProp = "New Prop"; asset.Description = "Just playing around..."; var changes = asset.GetChangesDto(); var payload = RestApiPayloadBuilder.Build(changes); asset = client.Update(oidToken, new { Owners = Remove("Member:20") }); }