This post is a follow up to this one:
(99+) Creating a Machine Learning model in Azure - beginner's step by step guide - Dynamics 365 Business Central Community
Here, we call the model from Business Central, and not from Postman.
REST
In this post we assume that you have already created a ML model in Azure, as described in the post linked above. To activate it we just run a REST call - here we send a parameter in the Body section. We just send "Credit Limit (LCY)" from a customer card to keep things simple. Here is the code needed - once you have deployed it, then go to a Customer Card, enter an amount in "Credit Limit (LCY)", then select action Related -> Customer -> "Run ML model", and the model will do what it does (multiplies by 2), and then send the result back.
Please do not be shy to suggest better code for making REST calls, but here is one version:
pageextension 50101 CustCardExt extends "Customer Card"
{
layout
{
// Add changes to page layout here
}
actions
{
// Add changes to page actions here
addlast("&Customer")
{
action(RunML)
{
Caption = 'Run ML model';
ApplicationArea = all;
Image = MachineCenter;
trigger OnAction()
var
myInt: Integer;
begin
Message('Hello.');
RunMLCodeunit.RunModel(rec."Credit Limit (LCY)");
end;
}
}
}
var
myInt: Integer;
RunMLCodeunit: Codeunit RunML;
}
codeunit 50101 RunML
{
trigger OnRun()
begin
end;
procedure RunModel(Input: Integer)
var
HTTPClient: HttpClient;
ResponseMessage: HttpResponseMessage;
myInt: Integer;
URL: Text;
RequestHttpContent: HttpContent;
Txt: Text;
Payload: Text;
GlobalNumber: Decimal;
begin
URL := 'http://1237ef2a-1a05-4e12-8889-1f078a5abcd8.uksouth.azurecontainer.io/score';
HTTPClient.DefaultRequestHeaders.Add('User-Agent', 'Dynamics 365');
httpClient.DefaultRequestHeaders.Add('Accept', 'application/json');
HTTPClient.DefaultRequestHeaders.Add('Authorization', 'Bearer hVzABCsutkc0l2nChyrCB66QxfYQGaWn');
Payload := '{"Inputs": {"input1": [{"Number": ' + format(Input) + '}]},"GlobalParameters": {}}';
RequestHttpContent.WriteFrom(Payload);
HTTPClient.Post(URL, RequestHttpContent, ResponseMessage);
ResponseMessage.Content.ReadAs(Txt);
Message(Txt);
end;
var
myInt: Integer;
}
*This post is locked for comments