Skip to content

Commit 1d7a851

Browse files
author
Dmitry Kozlov
committed
migration to dotnet-isolated
1 parent dad7b21 commit 1d7a851

15 files changed

+107
-104
lines changed

FunctionApp/Dynamics365/BusinessCentral/Authorize.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using Microsoft.AspNetCore.Http;
22
using Microsoft.AspNetCore.Http.Extensions;
33
using Microsoft.AspNetCore.Mvc;
4+
using Microsoft.Azure.Functions.Worker;
45
using Microsoft.Azure.WebJobs;
5-
using Microsoft.Azure.WebJobs.Extensions.Http;
66
using Microsoft.Extensions.Logging;
77
using Microsoft.Extensions.Options;
88
using Microsoft.Identity.Client;
@@ -17,16 +17,16 @@ namespace Plumsail.DataSource.Dynamics365.BusinessCentral
1717
public class Authorize
1818
{
1919
private readonly AzureApp _settings;
20+
private readonly ILogger<Authorize> _logger;
2021

21-
public Authorize(IOptions<AppSettings> settings)
22+
public Authorize(IOptions<AppSettings> settings, ILogger<Authorize> logger)
2223
{
2324
_settings = settings.Value.AzureApp;
25+
_logger = logger;
2426
}
2527

26-
[FunctionName("D365-BC-Authorize")]
27-
public async Task<IActionResult> Run(
28-
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
29-
ILogger log)
28+
[Function("D365-BC-Authorize")]
29+
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
3030
{
3131
var scopes = new string[] { "https://graph.microsoft.com/.default", "offline_access" };
3232

FunctionApp/Dynamics365/BusinessCentral/Customers.cs

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
using Microsoft.AspNetCore.Http;
22
using Microsoft.AspNetCore.Mvc;
3+
using Microsoft.Azure.Functions.Worker;
34
using Microsoft.Azure.WebJobs;
4-
using Microsoft.Azure.WebJobs.Extensions.Http;
55
using Microsoft.Extensions.Logging;
66
using Microsoft.Extensions.Options;
7-
using Microsoft.Graph.Beta.Models;
87
using Microsoft.Graph;
8+
using Microsoft.Graph.Beta.Models;
99
using Plumsail.DataSource.Dynamics365.BusinessCentral.Settings;
1010
using System.Collections.Generic;
1111
using System.Threading.Tasks;
@@ -16,19 +16,19 @@ public class Customers
1616
{
1717
private readonly Settings.Customers _settings;
1818
private readonly GraphServiceClientProvider _graphProvider;
19+
private readonly ILogger<Customers> _logger;
1920

20-
public Customers(IOptions<AppSettings> settings, GraphServiceClientProvider graphProvider)
21+
public Customers(IOptions<AppSettings> settings, GraphServiceClientProvider graphProvider, ILogger<Customers> logger)
2122
{
2223
_settings = settings.Value.Customers;
2324
_graphProvider = graphProvider;
25+
_logger = logger;
2426
}
2527

26-
[FunctionName("D365-BC-Customers")]
27-
public async Task<IActionResult> Run(
28-
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
29-
ILogger log)
28+
[Function("D365-BC-Customers")]
29+
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req)
3030
{
31-
log.LogInformation("Dynamics365-BusinessCentral-Customers is requested.");
31+
_logger.LogInformation("Dynamics365-BusinessCentral-Customers is requested.");
3232

3333
var graph = await _graphProvider.Create();
3434
var company = await graph.GetCompanyAsync(_settings.Company);

FunctionApp/Dynamics365/BusinessCentral/Items.cs

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
using Microsoft.AspNetCore.Http;
22
using Microsoft.AspNetCore.Mvc;
3+
using Microsoft.Azure.Functions.Worker;
34
using Microsoft.Azure.WebJobs;
4-
using Microsoft.Azure.WebJobs.Extensions.Http;
55
using Microsoft.Extensions.Logging;
66
using Microsoft.Extensions.Options;
7-
using Microsoft.Graph.Beta.Models;
87
using Microsoft.Graph;
8+
using Microsoft.Graph.Beta.Models;
99
using Plumsail.DataSource.Dynamics365.BusinessCentral.Settings;
1010
using System.Collections.Generic;
1111
using System.Threading.Tasks;
@@ -16,19 +16,20 @@ public class Items
1616
{
1717
private readonly Settings.Items _settings;
1818
private readonly GraphServiceClientProvider _graphProvider;
19+
private readonly ILogger<Items> _logger;
1920

20-
public Items(IOptions<AppSettings> settings, GraphServiceClientProvider graphProvider)
21+
public Items(IOptions<AppSettings> settings, GraphServiceClientProvider graphProvider, ILogger<Items> logger)
2122
{
2223
_settings = settings.Value.Items;
2324
_graphProvider = graphProvider;
25+
_logger = logger;
2426
}
2527

26-
[FunctionName("D365-BC-Items")]
28+
[Function("D365-BC-Items")]
2729
public async Task<IActionResult> Run(
28-
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
29-
ILogger log)
30+
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req)
3031
{
31-
log.LogInformation("Dynamics365-BusinessCentral-Vendors is requested.");
32+
_logger.LogInformation("Dynamics365-BusinessCentral-Vendors is requested.");
3233

3334
var graph = await _graphProvider.Create();
3435
var company = await graph.GetCompanyAsync(_settings.Company);

FunctionApp/Dynamics365/BusinessCentral/Vendors.cs

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using Microsoft.AspNetCore.Http;
22
using Microsoft.AspNetCore.Mvc;
3+
using Microsoft.Azure.Functions.Worker;
34
using Microsoft.Azure.WebJobs;
4-
using Microsoft.Azure.WebJobs.Extensions.Http;
55
using Microsoft.Extensions.Logging;
66
using Microsoft.Extensions.Options;
77
using Microsoft.Graph;
@@ -16,19 +16,19 @@ public class Vendors
1616
{
1717
private readonly Settings.Vendors _settings;
1818
private readonly GraphServiceClientProvider _graphProvider;
19+
private readonly ILogger<Vendors> _logger;
1920

20-
public Vendors(IOptions<AppSettings> settings, GraphServiceClientProvider graphProvider)
21+
public Vendors(IOptions<AppSettings> settings, GraphServiceClientProvider graphProvider, ILogger<Vendors> logger)
2122
{
2223
_settings = settings.Value.Vendors;
2324
_graphProvider = graphProvider;
25+
_logger = logger;
2426
}
2527

26-
[FunctionName("D365-BC-Vendors")]
27-
public async Task<IActionResult> Run(
28-
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
29-
ILogger log)
28+
[Function("D365-BC-Vendors")]
29+
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req)
3030
{
31-
log.LogInformation("Dynamics365-BusinessCentral-Vendors is requested.");
31+
_logger.LogInformation("Dynamics365-BusinessCentral-Vendors is requested.");
3232

3333
var graph = await _graphProvider.Create();
3434
var company = await graph.GetCompanyAsync(_settings.Company);

FunctionApp/Dynamics365/CRM/Accounts.cs

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using Microsoft.AspNetCore.Http;
22
using Microsoft.AspNetCore.Mvc;
3+
using Microsoft.Azure.Functions.Worker;
34
using Microsoft.Azure.WebJobs;
4-
using Microsoft.Azure.WebJobs.Extensions.Http;
55
using Microsoft.Extensions.Logging;
66
using Newtonsoft.Json.Linq;
77
using System.Threading.Tasks;
@@ -11,18 +11,18 @@ namespace Plumsail.DataSource.Dynamics365.CRM
1111
public class Accounts
1212
{
1313
private readonly HttpClientProvider _httpClientProvider;
14+
private readonly ILogger<Accounts> _logger;
1415

15-
public Accounts(HttpClientProvider httpClientProvider)
16+
public Accounts(HttpClientProvider httpClientProvider, ILogger<Accounts> logger)
1617
{
1718
_httpClientProvider = httpClientProvider;
19+
_logger = logger;
1820
}
1921

20-
[FunctionName("D365-CRM-Accounts")]
21-
public async Task<IActionResult> Run(
22-
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
23-
ILogger log)
22+
[Function("D365-CRM-Accounts")]
23+
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req)
2424
{
25-
log.LogInformation("Dynamics365-CRM-Accounts is requested.");
25+
_logger.LogInformation("Dynamics365-CRM-Accounts is requested.");
2626

2727
var client = _httpClientProvider.Create();
2828
var contactsJson = await client.GetStringAsync("accounts");

FunctionApp/Dynamics365/CRM/Authorize.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using Microsoft.AspNetCore.Http;
22
using Microsoft.AspNetCore.Http.Extensions;
33
using Microsoft.AspNetCore.Mvc;
4+
using Microsoft.Azure.Functions.Worker;
45
using Microsoft.Azure.WebJobs;
5-
using Microsoft.Azure.WebJobs.Extensions.Http;
66
using Microsoft.Extensions.Logging;
77
using Microsoft.Extensions.Options;
88
using Microsoft.Identity.Client;
@@ -17,16 +17,16 @@ namespace Plumsail.DataSource.Dynamics365.CRM
1717
public class Authorize
1818
{
1919
private readonly AzureApp _settings;
20+
private readonly ILogger<Authorize> _logger;
2021

21-
public Authorize(IOptions<AppSettings> settings)
22+
public Authorize(IOptions<AppSettings> settings, ILogger<Authorize> logger)
2223
{
2324
_settings = settings.Value.AzureApp;
25+
_logger = logger;
2426
}
2527

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

FunctionApp/Dynamics365/CRM/Contacts.cs

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using Microsoft.AspNetCore.Http;
22
using Microsoft.AspNetCore.Mvc;
3+
using Microsoft.Azure.Functions.Worker;
34
using Microsoft.Azure.WebJobs;
4-
using Microsoft.Azure.WebJobs.Extensions.Http;
55
using Microsoft.Extensions.Logging;
66
using Newtonsoft.Json.Linq;
77
using System.Threading.Tasks;
@@ -11,18 +11,18 @@ namespace Plumsail.DataSource.Dynamics365.CRM
1111
public class Contacts
1212
{
1313
private readonly HttpClientProvider _httpClientProvider;
14+
private readonly ILogger<Contacts> _logger;
1415

15-
public Contacts(HttpClientProvider httpClientProvider)
16+
public Contacts(HttpClientProvider httpClientProvider, ILogger<Contacts> logger)
1617
{
1718
_httpClientProvider = httpClientProvider;
19+
_logger = logger;
1820
}
1921

20-
[FunctionName("D365-CRM-Contacts")]
21-
public async Task<IActionResult> Run(
22-
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
23-
ILogger log)
22+
[Function("D365-CRM-Contacts")]
23+
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req)
2424
{
25-
log.LogInformation("Dynamics365-CRM-Contacts is requested.");
25+
_logger.LogInformation("Dynamics365-CRM-Contacts is requested.");
2626

2727
var client = _httpClientProvider.Create();
2828
var contactsJson = await client.GetStringAsync("contacts");

FunctionApp/FunctionApp.csproj

+10-1
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,19 @@
44
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
55
<AssemblyName>Plumsail.DataSource.FunctionApp</AssemblyName>
66
<RootNamespace>Plumsail.DataSource</RootNamespace>
7+
<OutputType>Exe</OutputType>
78
</PropertyGroup>
89
<ItemGroup>
910
<PackageReference Include="Azure.Identity" Version="1.13.1" />
1011
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
1112
<PackageReference Include="Microsoft.Graph" Version="5.62.0" />
1213
<PackageReference Include="Microsoft.Graph.Beta" Version="5.86.0-preview" />
13-
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.6.0" />
14+
<FrameworkReference Include="Microsoft.AspNetCore.App" />
15+
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="2.0.0" />
16+
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="2.0.0" />
17+
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="2.0.0" />
18+
<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
19+
<PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="2.0.0" />
1420
</ItemGroup>
1521
<ItemGroup>
1622
<None Update="host.json">
@@ -21,4 +27,7 @@
2127
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
2228
</None>
2329
</ItemGroup>
30+
<ItemGroup>
31+
<Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext" />
32+
</ItemGroup>
2433
</Project>

FunctionApp/Program.cs

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using Microsoft.Azure.Functions.Worker;
2+
using Microsoft.Extensions.Configuration;
3+
using Microsoft.Extensions.DependencyInjection;
4+
using Microsoft.Extensions.Hosting;
5+
using System;
6+
using D365_BC = Plumsail.DataSource.Dynamics365.BusinessCentral;
7+
using D365_CRM = Plumsail.DataSource.Dynamics365.CRM;
8+
using SP = Plumsail.DataSource.SharePoint;
9+
10+
var host = new HostBuilder()
11+
.ConfigureFunctionsWebApplication()
12+
.ConfigureAppConfiguration((context, builder) => {
13+
builder.SetBasePath(Environment.CurrentDirectory)
14+
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
15+
.AddEnvironmentVariables();
16+
})
17+
.ConfigureServices((context, services) => {
18+
var configuration = context.Configuration;
19+
20+
services.AddApplicationInsightsTelemetryWorkerService();
21+
services.ConfigureFunctionsApplicationInsights();
22+
23+
services.Configure<D365_BC.Settings.AppSettings>(configuration.GetSection("Dynamics365.BusinessCentral"));
24+
services.AddTransient<D365_BC.GraphServiceClientProvider>();
25+
26+
services.Configure<D365_CRM.Settings.AppSettings>(configuration.GetSection("Dynamics365.CRM"));
27+
services.AddTransient<D365_CRM.HttpClientProvider>();
28+
29+
services.Configure<SP.Settings.AppSettings>(configuration.GetSection("SharePoint"));
30+
services.AddTransient<SP.GraphServiceClientProvider>();
31+
})
32+
.Build();
33+
34+
host.Run();

FunctionApp/SharePoint/GraphServiceClientExtensions.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ internal static async System.Threading.Tasks.Task<ListItemRequestBuilder> GetLis
1313
var site = await graph.Sites[$"{url.Host}:{url.AbsolutePath}"].GetAsync((requestConfiguration) =>
1414
{
1515
requestConfiguration.QueryParameters.Select = ["id"];
16-
requestConfiguration.QueryParameters.Expand = ["lists(select=id,name)"];
16+
requestConfiguration.QueryParameters.Expand = ["lists($select=id,name)"];
1717
});
1818

1919
var list = site.Lists.FirstOrDefault(list => list.Name == listName);

FunctionApp/SharePoint/ListData.cs

+10-7
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,43 @@
11
using Microsoft.AspNetCore.Http;
22
using Microsoft.AspNetCore.Mvc;
3+
using Microsoft.Azure.Functions.Worker;
34
using Microsoft.Azure.WebJobs;
4-
using Microsoft.Azure.WebJobs.Extensions.Http;
55
using Microsoft.Extensions.Logging;
66
using Microsoft.Extensions.Options;
77
using Microsoft.Graph;
88
using Microsoft.Graph.Models;
99
using System.Collections.Generic;
1010
using System.Threading.Tasks;
11+
using static System.Runtime.InteropServices.JavaScript.JSType;
1112

1213
namespace Plumsail.DataSource.SharePoint
1314
{
1415
public class ListData
1516
{
1617
private readonly Settings.ListData _settings;
1718
private readonly GraphServiceClientProvider _graphProvider;
19+
private readonly ILogger<ListData> _logger;
1820

19-
public ListData(IOptions<Settings.AppSettings> settings, GraphServiceClientProvider graphProvider)
21+
public ListData(IOptions<Settings.AppSettings> settings, GraphServiceClientProvider graphProvider, ILogger<ListData> logger)
2022
{
23+
_logger = logger;
2124
_settings = settings.Value.ListData;
2225
_graphProvider = graphProvider;
2326
}
2427

25-
[FunctionName("SharePoint-ListData")]
28+
[Function("SharePoint-ListData")]
2629
public async Task<IActionResult> Run(
27-
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
28-
ILogger log)
30+
[HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req)
2931
{
30-
log.LogInformation("ListData is requested.");
32+
_logger.LogInformation("ListData is requested.");
3133

3234
var graph = _graphProvider.Create();
3335
var list = await graph.GetListAsync(_settings.SiteUrl, _settings.ListName);
3436
var itemsPage = await list.Items.GetAsync(requestConfiguration =>
3537
{
38+
//requestConfiguration.QueryParameters.Filter = "fields/Title eq 'item 1'";
3639
requestConfiguration.QueryParameters.Select = ["id"];
37-
requestConfiguration.QueryParameters.Expand = ["fields(select=Title,Author)"];
40+
requestConfiguration.QueryParameters.Expand = ["fields($select=Title,Author)"];
3841
});
3942

4043
var items = new List<ListItem>();

FunctionApp/SharePoint/Settings/AppSettings.cs

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Text;
4-
5-
namespace Plumsail.DataSource.SharePoint.Settings
1+
namespace Plumsail.DataSource.SharePoint.Settings
62
{
73
public class AppSettings
84
{

FunctionApp/SharePoint/Settings/AzureApp.cs

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Text;
4-
5-
namespace Plumsail.DataSource.SharePoint.Settings
1+
namespace Plumsail.DataSource.SharePoint.Settings
62
{
73
public class AzureApp
84
{

0 commit comments

Comments
 (0)