Invoking Azure Functions to replace DOT NET calls in C/AL or AL

Invoking Azure Functions to replace DOT NET calls in C/AL or AL

Recently, Microsoft announced that dotnet can still be used in Dynamics 365 Business Central, but only with on-premise installations.

However, if our extension is to make it in the cloud the code leveraging dot net needs to be replaced with http API calls.

In this example I will show how a legacy C/AL code using dot net can be replaced with a call to an Azure function to achieve the original goal of validating a posting code.

Premise

  • Either Table 18 was modified and additional code was added in “Post Code” Validate trigger with Regex class entities to perform validation on post codes.
  • Or, the additional validation is executed when the Post Code Validate in standard is finished and a subscriber to Post Code Validate exists in our extension and is triggered, but still contains .net code(RegularExpressions class entitites) as we’re only dealing with on-premise (target=internal in app.json)

Objective

I want the additional validation to be executed when the standard validation is finished and the additional validation to not contain dotnet calls.

Design

  1. In a new AL project add a new codeunit:


2. The codeunit itself contains an event subscriber to Table18.Validate.PostCode (Use “teventsub” snippet to get the quick scaffolding of the event subscriber).

When the subscriber is triggered we are executing an Azure Function call: azfnvalidate-us-ca-zipcode. We’re retrieving a json object whose content is : {“PCValid” : true} or {“PCValid” : false}.

3. Write the Azure Function with Visual Studio Code

Pre-requisites:

  • Azure subscription
  • install C# extension
  • Azure Function Core Tools extension
  • install .net core (use npm or chocolatey)
  • Azure CLI Tools

A good guide to get you started with Azure Functions is here.

Once you have the default “Hello World” Azure Function created, replace your Run function with:

Publishing the function in Azure should generate a record in your chosen storage:

Testing

  1. Once published we can quickly spin a test for the new Azure Function in a web browser window:

2. Removing the “W” in the previous test, triggers the Azure Function to return above json.

3. Let’s test now the Customer card Post Code validation in Business Central:

Therefore, to replace a set of dotnet calls we need a worker placed somewhere else other than in AL or C/AL and a caller of that worker services placed in the extension. In my example use a codeunit (caller) in the extension range with a subscriber event defined that calls an Azure function(worker).

What other methods are you employing to achieve similar results ?

If you liked this article bookmark my blog or follow me for more stuff about NAV and Business Central.






要查看或添加评论,请登录

Silviu Virlan的更多文章

社区洞察

其他会员也浏览了