Skip to content

Commit bde7f4f

Browse files
author
Dmitry Kozlov
committed
added routes for getting individial records from Contacts and Accounts lists of Dynamics 365 CRM
1 parent ae6890d commit bde7f4f

File tree

3 files changed

+72
-11
lines changed

3 files changed

+72
-11
lines changed

FunctionApp/Dynamics365/CRM/Accounts.cs

+35-5
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,45 @@ public Accounts(HttpClientProvider httpClientProvider, ILogger<Accounts> logger)
1818
}
1919

2020
[Function("D365-CRM-Accounts")]
21-
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req)
21+
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = "crm/accounts/{id?}")] HttpRequest req, Guid? id)
2222
{
2323
_logger.LogInformation("Dynamics365-CRM-Accounts is requested.");
2424

25-
var client = _httpClientProvider.Create();
26-
var accountsJson = await client.GetStringAsync("accounts");
27-
var accounts = JsonValue.Parse(accountsJson);
25+
try
26+
{
27+
var client = _httpClientProvider.Create();
2828

29-
return new OkObjectResult(accounts?["value"]);
29+
if (!id.HasValue)
30+
{
31+
var accountsJson = await client.GetStringAsync("accounts?$select=accountid,name");
32+
var accounts = JsonValue.Parse(accountsJson);
33+
return new OkObjectResult(accounts?["value"]);
34+
}
35+
36+
var accountResponse = await client.GetAsync($"accounts({id})");
37+
if (!accountResponse.IsSuccessStatusCode)
38+
{
39+
if (accountResponse.StatusCode == System.Net.HttpStatusCode.NotFound)
40+
{
41+
return new NotFoundResult();
42+
}
43+
44+
// throws Exception
45+
accountResponse.EnsureSuccessStatusCode();
46+
}
47+
48+
var accountJson = await accountResponse.Content.ReadAsStringAsync();
49+
return new ContentResult()
50+
{
51+
Content = accountJson,
52+
ContentType = "application/json"
53+
};
54+
}
55+
catch (HttpRequestException ex)
56+
{
57+
_logger.LogError(ex, "An error has occured while processing Dynamics365-CRM-Accounts request.");
58+
return new StatusCodeResult(ex.StatusCode.HasValue ? (int)ex.StatusCode.Value : StatusCodes.Status500InternalServerError);
59+
}
3060
}
3161
}
3262
}

FunctionApp/Dynamics365/CRM/Authorize.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public Authorize(IOptions<AppSettings> settings, ILogger<Authorize> logger)
2626
}
2727

2828
[Function("D365-CRM-Authorize")]
29-
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
29+
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "crm/authorize")] HttpRequest req)
3030
{
3131
var scopes = new string[] { $"https://admin.services.crm.dynamics.com/user_impersonation", "offline_access" };
3232

FunctionApp/Dynamics365/CRM/Contacts.cs

+36-5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using Grpc.Core;
12
using Microsoft.AspNetCore.Http;
23
using Microsoft.AspNetCore.Mvc;
34
using Microsoft.Azure.Functions.Worker;
@@ -18,15 +19,45 @@ public Contacts(HttpClientProvider httpClientProvider, ILogger<Contacts> logger)
1819
}
1920

2021
[Function("D365-CRM-Contacts")]
21-
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req)
22+
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = "crm/contacts/{id?}")] HttpRequest req, Guid? id)
2223
{
2324
_logger.LogInformation("Dynamics365-CRM-Contacts is requested.");
2425

25-
var client = _httpClientProvider.Create();
26-
var contactsJson = await client.GetStringAsync("contacts");
27-
var contacts = JsonValue.Parse(contactsJson);
26+
try
27+
{
28+
var client = _httpClientProvider.Create();
2829

29-
return new OkObjectResult(contacts?["value"]);
30+
if (!id.HasValue)
31+
{
32+
var contactsJson = await client.GetStringAsync("contacts?$select=contactid,fullname");
33+
var contacts = JsonValue.Parse(contactsJson);
34+
return new OkObjectResult(contacts?["value"]);
35+
}
36+
37+
var contactResponse = await client.GetAsync($"contacts({id})");
38+
if (!contactResponse.IsSuccessStatusCode)
39+
{
40+
if (contactResponse.StatusCode == System.Net.HttpStatusCode.NotFound)
41+
{
42+
return new NotFoundResult();
43+
}
44+
45+
// throws Exception
46+
contactResponse.EnsureSuccessStatusCode();
47+
}
48+
49+
var contactJson = await contactResponse.Content.ReadAsStringAsync();
50+
return new ContentResult()
51+
{
52+
Content = contactJson,
53+
ContentType = "application/json"
54+
};
55+
}
56+
catch (HttpRequestException ex)
57+
{
58+
_logger.LogError(ex, "An error has occured while processing Dynamics365-CRM-Contacts request.");
59+
return new StatusCodeResult(ex.StatusCode.HasValue ? (int)ex.StatusCode.Value : StatusCodes.Status500InternalServerError);
60+
}
3061
}
3162
}
3263
}

0 commit comments

Comments
 (0)