diff --git a/.gitignore b/.gitignore index 91df373..dd4699b 100644 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,10 @@ dotnet/Xrm.Tools.SeverCommonTest/obj dotnet/Xrm.Tools.WebAPI.NuGet/bin/ dotnet/Xrm.Tools.WebAPI.NuGet/obj dotnet/Xrm.Tools.WebAPI.NuGet/obj/Debug/** -dotnet/Xrm.Tools.WebAPI.Core/obj/ +dotnet/Xrm.Tools.WebAPI.Core/obj +dotnet/Xrm.Tools.WebAPI.Core/bin +dotnet/Xrm.Tools.WebAPI.Core.Test/obj +dotnet/Xrm.Tools.WebAPI.Core.Test/bin .vs .nuget diff --git a/dotnet/Xrm.Tools.WebAPI.Core.Test/Xrm.Tools.WebAPI.Core.Test.csproj b/dotnet/Xrm.Tools.WebAPI.Core.Test/Xrm.Tools.WebAPI.Core.Test.csproj new file mode 100644 index 0000000..611151c --- /dev/null +++ b/dotnet/Xrm.Tools.WebAPI.Core.Test/Xrm.Tools.WebAPI.Core.Test.csproj @@ -0,0 +1,28 @@ + + + + netcoreapp2.1 + + false + + + + + + + + + + + + + + + + + + + + + + diff --git a/dotnet/Xrm.Tools.WebAPI.Core/Xrm.Tools.WebAPI.Core.csproj b/dotnet/Xrm.Tools.WebAPI.Core/Xrm.Tools.WebAPI.Core.csproj index cf53318..1f1fcaa 100644 --- a/dotnet/Xrm.Tools.WebAPI.Core/Xrm.Tools.WebAPI.Core.csproj +++ b/dotnet/Xrm.Tools.WebAPI.Core/Xrm.Tools.WebAPI.Core.csproj @@ -1,7 +1,7 @@  - netcoreapp1.0 + netcoreapp2.1 true xt.snk Xrm.Tools.WebAPI @@ -26,7 +26,8 @@ - + + \ No newline at end of file diff --git a/dotnet/Xrm.Tools.WebAPI.Core/bin/Debug/netcoreapp1.0/Xrm.Tools.WebAPI.deps.json b/dotnet/Xrm.Tools.WebAPI.Core/bin/Debug/netcoreapp1.0/Xrm.Tools.WebAPI.deps.json index 447c9c8..9d0f868 100644 --- a/dotnet/Xrm.Tools.WebAPI.Core/bin/Debug/netcoreapp1.0/Xrm.Tools.WebAPI.deps.json +++ b/dotnet/Xrm.Tools.WebAPI.Core/bin/Debug/netcoreapp1.0/Xrm.Tools.WebAPI.deps.json @@ -51,7 +51,7 @@ "System.Runtime.Serialization.Primitives/4.1.1": { "type": "package", "serviceable": true, - "sha512": "sha512-HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==", + "sha512": "sha512-uoLAgxKA0qYYdleZTUYCiVykz6S875iBgz0D0Q+OF2Z49MJh6zbKiJ3GZ6nXygdbMLgAuD1Zs0dHWMSRLDrVfA==", "path": "system.runtime.serialization.primitives/4.1.1", "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512" } diff --git a/dotnet/Xrm.Tools.WebAPI.NuGet/NuGet.exe b/dotnet/Xrm.Tools.WebAPI.NuGet/NuGet.exe index feb104d..4cbab24 100644 Binary files a/dotnet/Xrm.Tools.WebAPI.NuGet/NuGet.exe and b/dotnet/Xrm.Tools.WebAPI.NuGet/NuGet.exe differ diff --git a/dotnet/Xrm.Tools.WebAPI.NuGet/NuGet.log b/dotnet/Xrm.Tools.WebAPI.NuGet/NuGet.log index b53d5d1..8fc545c 100644 Binary files a/dotnet/Xrm.Tools.WebAPI.NuGet/NuGet.log and b/dotnet/Xrm.Tools.WebAPI.NuGet/NuGet.log differ diff --git a/dotnet/Xrm.Tools.WebAPI.NuGet/Package.nuspec b/dotnet/Xrm.Tools.WebAPI.NuGet/Package.nuspec index 2472f28..c6ba3ae 100644 --- a/dotnet/Xrm.Tools.WebAPI.NuGet/Package.nuspec +++ b/dotnet/Xrm.Tools.WebAPI.NuGet/Package.nuspec @@ -51,14 +51,16 @@ - - - + + + + - + + @@ -66,8 +68,8 @@ - - - + + + \ No newline at end of file diff --git a/dotnet/Xrm.Tools.WebAPI.NuGet/Xrm.Tools.CRMWebAPI.1.0.24.nupkg b/dotnet/Xrm.Tools.WebAPI.NuGet/Xrm.Tools.CRMWebAPI.1.0.24.nupkg index d501cfb..ac13e73 100644 Binary files a/dotnet/Xrm.Tools.WebAPI.NuGet/Xrm.Tools.CRMWebAPI.1.0.24.nupkg and b/dotnet/Xrm.Tools.WebAPI.NuGet/Xrm.Tools.CRMWebAPI.1.0.24.nupkg differ diff --git a/dotnet/Xrm.Tools.WebAPI.Standard/Xrm.Tools.WebAPI.Standard.csproj b/dotnet/Xrm.Tools.WebAPI.Standard/Xrm.Tools.WebAPI.Standard.csproj index fc7a072..1f47bb4 100644 --- a/dotnet/Xrm.Tools.WebAPI.Standard/Xrm.Tools.WebAPI.Standard.csproj +++ b/dotnet/Xrm.Tools.WebAPI.Standard/Xrm.Tools.WebAPI.Standard.csproj @@ -1,7 +1,7 @@  - netstandard1.4;netstandard2.0 + netstandard2.0 true xt.snk Xrm.Tools.WebAPI @@ -31,4 +31,10 @@ + + + 5.2.7 + + + \ No newline at end of file diff --git a/dotnet/Xrm.Tools.WebAPI.Test/ActionTests.cs b/dotnet/Xrm.Tools.WebAPI.Test/ActionTests.cs index e0defc3..bf5057a 100644 --- a/dotnet/Xrm.Tools.WebAPI.Test/ActionTests.cs +++ b/dotnet/Xrm.Tools.WebAPI.Test/ActionTests.cs @@ -10,103 +10,88 @@ namespace Xrm.Tools.WebAPI.Test public class ActionTests : UnitTestBaseClass { [TestMethod] - public void TestWinOpportunity() + public async Task TestWinOpportunity() { + var api = GetAPI(); + + dynamic account = new ExpandoObject(); + account.name = "test " + DateTime.Now.ToString(); + Guid accountID = await api.Create("accounts", account); + + dynamic contact = new ExpandoObject(); + contact.firstname = "test " + DateTime.Now.ToString(); + contact.lastname = "test " + DateTime.Now.ToString(); + Guid contactID = await api.Create("contacts", contact); + + dynamic opportunity = new ExpandoObject(); + var oppIndexer = opportunity as IDictionary; + opportunity.name = "Test opportunity " + DateTime.Now.ToString(); + oppIndexer["customerid_account@odata.bind"] = "/accounts(" + accountID.ToString() + ")"; + oppIndexer["parentcontactid@odata.bind"] = "/contacts(" + contactID.ToString() + ")"; + Guid oppID = await api.Create("opportunities", opportunity); + + dynamic opportClose = new ExpandoObject(); + var opportCloseIndexer = opportClose as IDictionary; + opportClose.subject = "Won Opportunity"; + opportCloseIndexer["opportunityid@odata.bind"] = "/opportunities(" + oppID.ToString() + ")"; + dynamic lostOpportParams = new ExpandoObject(); + lostOpportParams.Status = 3; + lostOpportParams.OpportunityClose = opportClose; + await api.ExecuteAction("WinOpportunity", lostOpportParams); + + System.Diagnostics.Trace.WriteLine("finished"); - Task.Run(async () => - { - var api = GetAPI(); - - dynamic account = new ExpandoObject(); - account.name = "test " + DateTime.Now.ToString(); - Guid accountID = await api.Create("accounts", account); + } + [TestMethod] + public async Task TestLostOpportunity() + { - dynamic contact = new ExpandoObject(); - contact.firstname = "test " + DateTime.Now.ToString(); - contact.lastname = "test " + DateTime.Now.ToString(); - Guid contactID = await api.Create("contacts", contact); + var api = GetAPI(); - dynamic opportunity = new ExpandoObject(); - var oppIndexer = opportunity as IDictionary; - opportunity.name = "Test opportunity " + DateTime.Now.ToString(); - oppIndexer["customerid_account@odata.bind"] = "/accounts(" + accountID.ToString() + ")"; - oppIndexer["parentcontactid@odata.bind"] = "/contacts(" + contactID.ToString() + ")"; - Guid oppID = await api.Create("opportunities", opportunity); + dynamic account = new ExpandoObject(); + account.name = "test " + DateTime.Now.ToString(); + Guid accountID = await api.Create("accounts", account); - dynamic opportClose = new ExpandoObject(); - var opportCloseIndexer = opportClose as IDictionary; - opportClose.subject = "Won Opportunity"; - opportCloseIndexer["opportunityid@odata.bind"] = "/opportunities(" + oppID.ToString() + ")"; - dynamic lostOpportParams = new ExpandoObject(); - lostOpportParams.Status = 3; - lostOpportParams.OpportunityClose = opportClose; - await api.ExecuteAction("WinOpportunity", lostOpportParams); + dynamic contact = new ExpandoObject(); + contact.firstname = "test " + DateTime.Now.ToString(); + contact.lastname = "test " + DateTime.Now.ToString(); + Guid contactID = await api.Create("contacts", contact); - System.Diagnostics.Trace.WriteLine("finished"); + dynamic opportunity = new ExpandoObject(); + var oppIndexer = opportunity as IDictionary; + opportunity.name = "Test opportunity " + DateTime.Now.ToString(); + oppIndexer["customerid_account@odata.bind"] = "/accounts(" + accountID.ToString() + ")"; + oppIndexer["parentcontactid@odata.bind"] = "/contacts(" + contactID.ToString() + ")"; + Guid oppID = await api.Create("opportunities", opportunity); + dynamic opportClose = new ExpandoObject(); + var opportCloseIndexer = opportClose as IDictionary; + opportClose.subject = "Lost Opportunity"; + opportCloseIndexer["opportunityid@odata.bind"] = "/opportunities(" + oppID.ToString() + ")"; + dynamic lostOpportParams = new ExpandoObject(); + lostOpportParams.Status = 4; + lostOpportParams.OpportunityClose = opportClose; + await api.ExecuteAction("LoseOpportunity", lostOpportParams); - }).Wait(); - } - [TestMethod] - public void TestLostOpportunity() - { + System.Diagnostics.Trace.WriteLine("finished"); - Task.Run(async () => - { - var api = GetAPI(); - - dynamic account = new ExpandoObject(); - account.name = "test " + DateTime.Now.ToString(); - Guid accountID = await api.Create("accounts", account); - - dynamic contact = new ExpandoObject(); - contact.firstname = "test " + DateTime.Now.ToString(); - contact.lastname = "test " + DateTime.Now.ToString(); - Guid contactID = await api.Create("contacts", contact); - - dynamic opportunity = new ExpandoObject(); - var oppIndexer = opportunity as IDictionary; - opportunity.name = "Test opportunity " + DateTime.Now.ToString(); - oppIndexer["customerid_account@odata.bind"] = "/accounts(" + accountID.ToString() + ")"; - oppIndexer["parentcontactid@odata.bind"] = "/contacts(" + contactID.ToString() + ")"; - Guid oppID = await api.Create("opportunities", opportunity); - - dynamic opportClose = new ExpandoObject(); - var opportCloseIndexer = opportClose as IDictionary; - opportClose.subject = "Lost Opportunity"; - opportCloseIndexer["opportunityid@odata.bind"] = "/opportunities(" + oppID.ToString() +")"; - dynamic lostOpportParams = new ExpandoObject(); - lostOpportParams.Status = 4; - lostOpportParams.OpportunityClose = opportClose; - await api.ExecuteAction("LoseOpportunity", lostOpportParams); - - System.Diagnostics.Trace.WriteLine("finished"); - - - }).Wait(); } [TestMethod] - public void TestCalculateRollup() + public async Task TestCalculateRollup() { + var api = GetAPI(); - Task.Run(async () => - { - var api = GetAPI(); - - dynamic voteCountUpdate = new ExpandoObject(); - voteCountUpdate.Target = new ExpandoObject(); - var ivote = voteCountUpdate.Target as IDictionary; - - ivote["@odata.id"] = "ctccrm_ideas(19dc848b-1c5e-e711-8112-e0071b66aea1)"; - voteCountUpdate.FieldName = "ctccrm_votes"; - await api.ExecuteFunction("CalculateRollupField", voteCountUpdate); - + dynamic voteCountUpdate = new ExpandoObject(); + voteCountUpdate.Target = new ExpandoObject(); + var ivote = voteCountUpdate.Target as IDictionary; - System.Diagnostics.Trace.WriteLine("finished"); + ivote["@odata.id"] = "ctccrm_ideas(19dc848b-1c5e-e711-8112-e0071b66aea1)"; + voteCountUpdate.FieldName = "ctccrm_votes"; + await api.ExecuteFunction("CalculateRollupField", voteCountUpdate); - }).Wait(); + System.Diagnostics.Trace.WriteLine("finished"); } } } diff --git a/dotnet/Xrm.Tools.WebAPI.Test/BasicCRUDTests.cs b/dotnet/Xrm.Tools.WebAPI.Test/BasicCRUDTests.cs index 65280ed..e289863 100644 --- a/dotnet/Xrm.Tools.WebAPI.Test/BasicCRUDTests.cs +++ b/dotnet/Xrm.Tools.WebAPI.Test/BasicCRUDTests.cs @@ -1,214 +1,173 @@ -using System; -using Microsoft.VisualStudio.TestTools.UnitTesting; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; using System.Dynamic; +using System.IO; using System.Threading.Tasks; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System.Collections.Generic; using Xrm.Tools.WebAPI.Requests; -using System.IO; namespace Xrm.Tools.WebAPI.Test { [TestClass] public class BasicCRUDTests : UnitTestBaseClass { - + [TestMethod] - public void TestMethod1() + public async Task TestMethod1() { + var api = GetAPI(); - Task.Run(async () => - { - var api = GetAPI(); + dynamic data = new ExpandoObject(); + data.name = "test " + DateTime.Now.ToString(); - dynamic data = new ExpandoObject(); - data.name = "test " + DateTime.Now.ToString(); + Guid createdID = await api.Create("accounts", data); - Guid createdID = await api.Create("accounts", data); + var retrievedObject = await api.Get("accounts", createdID, new CRMGetListOptions() { FormattedValues = true }); - var retrievedObject = await api.Get("accounts", createdID, new CRMGetListOptions() { FormattedValues = true }); + var retrievedObjectEx = await api.Get("accounts", createdID); - var retrievedObjectEx = await api.Get("accounts", createdID); + dynamic updateObject = new ExpandoObject(); + updateObject.name = "updated name " + DateTime.Now.ToString(); - dynamic updateObject = new ExpandoObject(); - updateObject.name = "updated name " + DateTime.Now.ToString(); + var updateResult = await api.Update("accounts", createdID, updateObject); + //update with an upsert + var upsertResult = await api.Update("accounts", Guid.NewGuid(), updateObject, Upsert: true); - var updateResult = await api.Update("accounts", createdID, updateObject); - //update with an upsert - var upsertResult = await api.Update("accounts", Guid.NewGuid(), updateObject, Upsert: true); + await api.Delete("accounts", upsertResult.EntityID); - await api.Delete("accounts", upsertResult.EntityID); + var results = await api.GetList("accounts", new Requests.CRMGetListOptions() { Top = 5, FormattedValues = true }); - var results = await api.GetList("accounts", new Requests.CRMGetListOptions() { Top = 5, FormattedValues=true }); + string fetchXml = ""; - string fetchXml = ""; + var fetchResults = await api.GetList("accounts", QueryOptions: new CRMGetListOptions() { FetchXml = fetchXml }); - var fetchResults = await api.GetList("accounts", QueryOptions: new CRMGetListOptions() { FetchXml = fetchXml }); + var count = await api.GetCount("accounts"); - var count = await api.GetCount("accounts"); - - List batchList = new List(); - for (int i=0;i<5;i++) - { - dynamic batchCreateData = new ExpandoObject(); - batchCreateData.name = "test " + DateTime.Now.ToString(); - batchList.Add(batchCreateData); - } - var batchResults = await api.Create("accounts", batchList.ToArray()); - - dynamic gettimeoptions = new ExpandoObject(); - gettimeoptions.LocalizedStandardName = "Pacific Standard Time"; - gettimeoptions.LocaleId = 1033; - - var gettimeResults = await api.ExecuteFunction("GetTimeZoneCodeByLocalizedName",gettimeoptions); + List batchList = new List(); + for (int i = 0; i < 5; i++) + { + dynamic batchCreateData = new ExpandoObject(); + batchCreateData.name = "test " + DateTime.Now.ToString(); + batchList.Add(batchCreateData); + } + var batchResults = await api.Create("accounts", batchList.ToArray()); - var whoamiResults = await api.ExecuteFunction("WhoAmI"); + dynamic gettimeoptions = new ExpandoObject(); + gettimeoptions.LocalizedStandardName = "Pacific Standard Time"; + gettimeoptions.LocaleId = 1033; - System.Diagnostics.Trace.WriteLine("finished"); + var gettimeResults = await api.ExecuteFunction("GetTimeZoneCodeByLocalizedName", gettimeoptions); + var whoamiResults = await api.ExecuteFunction("WhoAmI"); - }).Wait(); + System.Diagnostics.Trace.WriteLine("finished"); } [TestMethod] - public void TestCreateRelatedRecords1() + public async Task TestCreateRelatedRecords1() { + var api = GetAPI(); - Task.Run(async () => - { - var api = GetAPI(); + dynamic account = new ExpandoObject(); + account.name = "Test Account " + DateTime.Now.ToString(); + dynamic primaryContact = new ExpandoObject(); + primaryContact.firstname = "John"; + primaryContact.lastname = "Smith;"; + account.primarycontactid = primaryContact; + dynamic opportunity = new ExpandoObject(); + opportunity.name = "OP for " + account.name; + account.opportunity_customer_accounts = new object[] { opportunity }; + dynamic task = new ExpandoObject(); + task.subject = "Task for opportunity"; + opportunity.Opportunity_Tasks = new object[] { task }; - dynamic account = new ExpandoObject(); - account.name = "Test Account " + DateTime.Now.ToString(); - dynamic primaryContact = new ExpandoObject(); - primaryContact.firstname = "John"; - primaryContact.lastname = "Smith;"; - account.primarycontactid = primaryContact; - dynamic opportunity = new ExpandoObject(); - opportunity.name = "OP for " + account.name; - account.opportunity_customer_accounts = new object[] { opportunity }; - dynamic task = new ExpandoObject(); - task.subject = "Task for opportunity"; - opportunity.Opportunity_Tasks = new object[] { task }; + Guid createdID = await api.Create("accounts", account); - Guid createdID = await api.Create("accounts", account); - - System.Diagnostics.Trace.WriteLine("finished"); - - - }).Wait(); + System.Diagnostics.Trace.WriteLine("finished"); } [TestMethod] - public void TestCreateRelatedRecords2() + public async Task TestCreateRelatedRecords2() { + var api = GetAPI(); - Task.Run(async () => - { - var api = GetAPI(); - - dynamic account = new ExpandoObject(); - account.name = "Test Account " + DateTime.Now.ToString(); - Guid accountID = await api.Create("accounts", account); - dynamic primaryContact = new ExpandoObject(); - primaryContact.firstname = "John"; - primaryContact.lastname = "Smith;"; - Guid contactID = await api.Create("contacts", primaryContact); + dynamic account = new ExpandoObject(); + account.name = "Test Account " + DateTime.Now.ToString(); + Guid accountID = await api.Create("accounts", account); + dynamic primaryContact = new ExpandoObject(); + primaryContact.firstname = "John"; + primaryContact.lastname = "Smith;"; + Guid contactID = await api.Create("contacts", primaryContact); - await api.Associate("accounts", accountID, "primarycontactid", "contacts", contactID); + await api.Associate("accounts", accountID, "primarycontactid", "contacts", contactID); - await api.DeleteAssociation("accounts", accountID, "primarycontactid", "contacts", contactID); + await api.DeleteAssociation("accounts", accountID, "primarycontactid", "contacts", contactID); - System.Diagnostics.Trace.WriteLine("finished"); - - - }).Wait(); + System.Diagnostics.Trace.WriteLine("finished"); } [TestMethod] - public void TestFetchXml() + public async Task TestFetchXml() { + var api = GetAPI(); - Task.Run(async () => + CRMGetListOptions qOptions = new CRMGetListOptions() { - var api = GetAPI(); - - CRMGetListOptions qOptions = new CRMGetListOptions() - { - FetchXml = @"" - }; - var accounts = await api.GetList("accounts", qOptions); - foreach (dynamic account in accounts.List) - { - var myAccount = account as IDictionary; - - Console.WriteLine(myAccount["contact.fullname"]); - } - - System.Diagnostics.Trace.WriteLine("finished"); + FetchXml = @"" + }; + var accounts = await api.GetList("accounts", qOptions); + foreach (dynamic account in accounts.List) + { + var myAccount = account as IDictionary; + Console.WriteLine(myAccount["contact.fullname"]); + } - }).Wait(); + System.Diagnostics.Trace.WriteLine("finished"); } [TestMethod] - public void TestOrderBy() + public async Task TestOrderBy() { + var api = GetAPI(); - Task.Run(async () => - { - var api = GetAPI(); - - var accounts = await api.GetList("accounts", new CRMGetListOptions() { Top = 10, FormattedValues = true, Select = new string[] { "name" }, OrderBy = new string[] { "name" } }); - + var accounts = await api.GetList("accounts", new CRMGetListOptions() { Top = 10, FormattedValues = true, Select = new string[] { "name" }, OrderBy = new string[] { "name" } }); - System.Diagnostics.Trace.WriteLine("finished"); - - }).Wait(); + System.Diagnostics.Trace.WriteLine("finished"); } [TestMethod] - public void TestApply() + public async Task TestApply() { + var api = GetAPI(); - Task.Run(async () => - { - var api = GetAPI(); - - var opps = await api.GetList("opportunities", new CRMGetListOptions() { Apply= "aggregate(estimatedvalue with sum as total)" }); + var opps = await api.GetList("opportunities", new CRMGetListOptions() { Apply = "aggregate(estimatedvalue with sum as total)" }); - System.Diagnostics.Trace.WriteLine("finished"); - - - }).Wait(); + System.Diagnostics.Trace.WriteLine("finished"); } [TestMethod] - public void TestExpandQuery() + public async Task TestExpandQuery() { + var api = GetAPI(); - Task.Run(async () => + dynamic whoamiResults = await api.ExecuteFunction("WhoAmI"); + CRMGetListOptions userOptions = new CRMGetListOptions() { - var api = GetAPI(); - - dynamic whoamiResults = await api.ExecuteFunction("WhoAmI"); - CRMGetListOptions userOptions = new CRMGetListOptions() - { - Expand = new CRMExpandOptions[] - { new CRMExpandOptions() + Expand = new CRMExpandOptions[] + { new CRMExpandOptions() { Property="businessunitid", Select = new string[] { "businessunitid","name","websiteurl" } } - } - }; - - var userResults = await api.Get("systemusers",Guid.Parse(whoamiResults.UserId),QueryOptions:userOptions); - - CRMGetListOptions buOptions = new CRMGetListOptions() - { - Expand = new CRMExpandOptions[] - { new CRMExpandOptions() + } + }; + + var userResults = await api.Get("systemusers", Guid.Parse(whoamiResults.UserId), QueryOptions: userOptions); + + CRMGetListOptions buOptions = new CRMGetListOptions() + { + Expand = new CRMExpandOptions[] + { new CRMExpandOptions() { Property="business_unit_system_users", Select = new string[] { "systemuserid","fullname" }, Filter = "systemuserid ne " + whoamiResults.UserId, @@ -216,68 +175,51 @@ public void TestExpandQuery() Top=5 } - } - }; - var buResult = await api.Get("businessunits", - Guid.Parse(userResults.businessunitid.businessunitid), - QueryOptions: buOptions); - dynamic userCount = buResult.business_unit_system_users.Count; - - System.Diagnostics.Trace.WriteLine("finished"); - - - }).Wait(); + } + }; + var buResult = await api.Get("businessunits", + Guid.Parse(userResults.businessunitid.businessunitid), + QueryOptions: buOptions); + dynamic userCount = buResult.business_unit_system_users.Count; + + System.Diagnostics.Trace.WriteLine("finished"); } [TestMethod] - public void TestAltKeyUpdate() + public async Task TestAltKeyUpdate() { - - Task.Run(async () => - { - var api = GetAPI(); - string statid = "2bf3c48a-de2d-e511-80f8-c4346bac7da8"; - dynamic data = new ExpandoObject(); - data.tt_name = "test"; - data.tt_blocks = 1; - data.tt_externalstatid = statid; - var result = await api.Update("test_entity", "test_externalstatid='" + statid + "'", data, Upsert: true); - - - }).Wait(); + var api = GetAPI(); + string statid = "2bf3c48a-de2d-e511-80f8-c4346bac7da8"; + dynamic data = new ExpandoObject(); + data.tt_name = "test"; + data.tt_blocks = 1; + data.tt_externalstatid = statid; + var result = await api.Update("test_entity", "test_externalstatid='" + statid + "'", data, Upsert: true); } [TestMethod] - public void TestAltKeyGet() + public async Task TestAltKeyGet() { - Task.Run(async () => - { - var api = GetAPI(); - string statid = "2bf3c48a-de2d-e511-80f8-c4346bac7da8"; - - var result = await api.Get("test_entity", $"test_externalstatid='{statid}'"); - }).Wait(); + var api = GetAPI(); + string statid = "2bf3c48a-de2d-e511-80f8-c4346bac7da8"; + + var result = await api.Get("test_entity", $"test_externalstatid='{statid}'"); } [TestMethod] - public void TestFileFields() + public async Task TestFileFields() { - Task.Run(async () => - { - var api = GetAPI(); - - dynamic data = new ExpandoObject(); - data.name = "test " + DateTime.Now.ToString(); - - Guid createdID = await api.Create("accounts", data); + var api = GetAPI(); - var fileData = File.ReadAllBytes("c:\\test\\logo.jpg"); - await api.UpdateFileData("accounts", createdID, "cr0e2_logo", "logo.jpg", fileData); - var getData = await api.GetFileData("accounts", createdID, "cr0e2_logo"); - File.WriteAllBytes("c:\\test\\logoGet.jpg",getData); + dynamic data = new ExpandoObject(); + data.name = "test " + DateTime.Now.ToString(); + Guid createdID = await api.Create("accounts", data); - }).Wait(); + var fileData = File.ReadAllBytes("c:\\test\\logo.jpg"); + await api.UpdateFileData("accounts", createdID, "cr0e2_logo", "logo.jpg", fileData); + var getData = await api.GetFileData("accounts", createdID, "cr0e2_logo"); + File.WriteAllBytes("c:\\test\\logoGet.jpg", getData); } } diff --git a/dotnet/Xrm.Tools.WebAPI.Test/BasicChangeTrackingTests.cs b/dotnet/Xrm.Tools.WebAPI.Test/BasicChangeTrackingTests.cs index 4ab60e9..d35679c 100644 --- a/dotnet/Xrm.Tools.WebAPI.Test/BasicChangeTrackingTests.cs +++ b/dotnet/Xrm.Tools.WebAPI.Test/BasicChangeTrackingTests.cs @@ -9,26 +9,20 @@ namespace Xrm.Tools.WebAPI.Test public class BasicChangeTrackingTests : UnitTestBaseClass { [TestMethod] - public void TestMethod1() + public async Task TestMethod1() { + var api = GetAPI(); - Task.Run(async () => - { - var api = GetAPI(); + var results = await api.GetList("accounts", new Requests.CRMGetListOptions() { TrackChanges = true, FormattedValues = true }); - var results = await api.GetList("accounts", new Requests.CRMGetListOptions() { TrackChanges=true, FormattedValues = true }); + results = await api.GetList("accounts", new Requests.CRMGetListOptions() { TrackChanges = true, TrackChangesLink = results.TrackChangesLink, FormattedValues = true }); - results = await api.GetList("accounts", new Requests.CRMGetListOptions() { TrackChanges = true, TrackChangesLink=results.TrackChangesLink, FormattedValues = true }); + dynamic data = new ExpandoObject(); + data.name = "test " + DateTime.Now.ToString(); - dynamic data = new ExpandoObject(); - data.name = "test " + DateTime.Now.ToString(); - - Guid createdID = await api.Create("accounts", data); - - results = await api.GetList("accounts", new Requests.CRMGetListOptions() { TrackChanges = true, TrackChangesLink = results.TrackChangesLink, FormattedValues = true }); - - }).Wait(); + Guid createdID = await api.Create("accounts", data); + results = await api.GetList("accounts", new Requests.CRMGetListOptions() { TrackChanges = true, TrackChangesLink = results.TrackChangesLink, FormattedValues = true }); } } } diff --git a/dotnet/Xrm.Tools.WebAPI.Test/BasicMetadataTests.cs b/dotnet/Xrm.Tools.WebAPI.Test/BasicMetadataTests.cs index 1912a49..8cb7c32 100644 --- a/dotnet/Xrm.Tools.WebAPI.Test/BasicMetadataTests.cs +++ b/dotnet/Xrm.Tools.WebAPI.Test/BasicMetadataTests.cs @@ -12,73 +12,56 @@ namespace Xrm.Tools.WebAPI.Test public class BasicMetadataTests : UnitTestBaseClass { [TestMethod] - public void TestOptionSetNames() + public async Task TestOptionSetNames() { - Task.Run(async () => - { - var api = GetAPI(); + var api = GetAPI(); - var optionSet = await api.GetOptionSetByName("need"); - - var optionSetLabels = await api.GetOptionSetUserLabels("need"); - - }).Wait(); + var optionSet = await api.GetOptionSetByName("need"); + var optionSetLabels = await api.GetOptionSetUserLabels("need"); } [TestMethod] - public void TestEntitySetNames() + public async Task TestEntitySetNames() { - Task.Run(async () => - { - var api = GetAPI(); - - var entityNameList = await api.GetEntityDisplayNameList(); + var api = GetAPI(); - var entityNameListWithLCID = await api.GetEntityDisplayNameList(1033); + var entityNameList = await api.GetEntityDisplayNameList(); - }).Wait(); + var entityNameListWithLCID = await api.GetEntityDisplayNameList(1033); } [TestMethod] - public void TestAttributeNames() + public async Task TestAttributeNames() { - Task.Run(async () => - { - var api = GetAPI(); + var api = GetAPI(); - var entityNameList = await api.GetEntityDisplayNameList(); + var entityNameList = await api.GetEntityDisplayNameList(); - var firstEntity = entityNameList.Where(e => e.LogicalName == "account").FirstOrDefault(); + var firstEntity = entityNameList.Where(e => e.LogicalName == "account").FirstOrDefault(); - var attrNameList = await api.GetAttributeDisplayNameList(firstEntity.MetadataId); + var attrNameList = await api.GetAttributeDisplayNameList(firstEntity.MetadataId); - var attrNameListWithLCID = await api.GetAttributeDisplayNameList(firstEntity.MetadataId,1033); - - }).Wait(); + var attrNameListWithLCID = await api.GetAttributeDisplayNameList(firstEntity.MetadataId, 1033); } [TestMethod] - public void TestCopyAttribute() + public async Task TestCopyAttribute() { - Task.Run(async () => - { - var api = GetAPI(); - - var entityNameList = await api.GetEntityDisplayNameList(); + var api = GetAPI(); - var accountEntity = entityNameList.Where(e => e.LogicalName == "account").FirstOrDefault(); + var entityNameList = await api.GetEntityDisplayNameList(); - var attrNameList = await api.GetAttributeDisplayNameList(accountEntity.MetadataId); + var accountEntity = entityNameList.Where(e => e.LogicalName == "account").FirstOrDefault(); - var nameAttr = attrNameList.Where(a => a.LogicalName == "name").FirstOrDefault(); + var attrNameList = await api.GetAttributeDisplayNameList(accountEntity.MetadataId); - var newAttrib = await api.CopyEntityAttribute(accountEntity.MetadataId, accountEntity.MetadataId, nameAttr.MetadataId, nameAttr.AttributeType, "dy_name123"); + var nameAttr = attrNameList.Where(a => a.LogicalName == "name").FirstOrDefault(); - }).Wait(); + var newAttrib = await api.CopyEntityAttribute(accountEntity.MetadataId, accountEntity.MetadataId, nameAttr.MetadataId, nameAttr.AttributeType, "dy_name123"); } - } -} + } +} \ No newline at end of file diff --git a/dotnet/Xrm.Tools.WebAPI.sln b/dotnet/Xrm.Tools.WebAPI.sln index eaf4a94..139b312 100644 --- a/dotnet/Xrm.Tools.WebAPI.sln +++ b/dotnet/Xrm.Tools.WebAPI.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26730.3 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29709.97 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xrm.Tools.WebAPI", "Xrm.Tools.WebAPI\Xrm.Tools.WebAPI.csproj", "{8D1C4066-5DEF-4CC9-B84F-58944BBE86F0}" EndProject @@ -13,6 +13,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xrm.Tools.WebAPI.Core", "Xr EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xrm.Tools.WebAPI.Standard", "Xrm.Tools.WebAPI.Standard\Xrm.Tools.WebAPI.Standard.csproj", "{94F41AEC-9406-44E1-BE56-2E786C51CCA7}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xrm.Tools.WebAPI.Core.Test", "Xrm.Tools.WebAPI.Core.Test\Xrm.Tools.WebAPI.Core.Test.csproj", "{FEC9B0BD-D3BF-487C-B90E-F4F3F01C9080}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -39,6 +41,10 @@ Global {94F41AEC-9406-44E1-BE56-2E786C51CCA7}.Debug|Any CPU.Build.0 = Debug|Any CPU {94F41AEC-9406-44E1-BE56-2E786C51CCA7}.Release|Any CPU.ActiveCfg = Release|Any CPU {94F41AEC-9406-44E1-BE56-2E786C51CCA7}.Release|Any CPU.Build.0 = Release|Any CPU + {FEC9B0BD-D3BF-487C-B90E-F4F3F01C9080}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FEC9B0BD-D3BF-487C-B90E-F4F3F01C9080}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FEC9B0BD-D3BF-487C-B90E-F4F3F01C9080}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FEC9B0BD-D3BF-487C-B90E-F4F3F01C9080}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/dotnet/Xrm.Tools.WebAPI/CRMWebAPI.cs b/dotnet/Xrm.Tools.WebAPI/CRMWebAPI.cs index 7bc3e50..60d86d4 100644 --- a/dotnet/Xrm.Tools.WebAPI/CRMWebAPI.cs +++ b/dotnet/Xrm.Tools.WebAPI/CRMWebAPI.cs @@ -345,16 +345,6 @@ public async Task Create(string entityCollection, object[] datal { await CheckAuthToken(); -#if WINDOWS_APP - throw new NotImplementedException(); -#elif NETCOREAPP1_0 - throw new NotImplementedException(); -#elif NETSTANDARD1_4 - throw new NotImplementedException(); -#elif NETSTANDARD2_0 - throw new NotImplementedException(); -#else - var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Authorization = @@ -371,9 +361,12 @@ public async Task Create(string entityCollection, object[] datal foreach (var data in datalist) { HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, _crmWebAPIConfig.APIUrl + entityCollection); + req.Version = new Version(major: 1, minor: 1); req.Content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json"); + HttpMessageContent content = new HttpMessageContent(req); + content.Headers.Remove("Content-Type"); content.Headers.TryAddWithoutValidation("Content-Type", "application/http"); content.Headers.TryAddWithoutValidation("Content-Transfer-Encoding", "binary"); @@ -414,7 +407,6 @@ public async Task Create(string entityCollection, object[] datal } return finalResult; -#endif } /// /// currently the content type for individual responses is missing msgtype=response that the API needs to parse it