/// <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);
			}
		}
Exemplo n.º 10
0
		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")
			});
		}