Breaking news from around the world
Get the Bing + MSN extension
Now Available in Community - MBAS 2019 Presentation Videos
Catch the most popular sessions on demand and learn how Dynamics 365, Power BI, PowerApps, Microsoft Flow, and Excel are powering major transformations around the globe. | View Gallery
2019 release wave 2 Discover the latest updates to Dynamics 365Release overview guides and videos Release Plan | Early Access Availability
Ace your Dynamics 365 deployment with packaged services delivered by expert consultants. | Explore service offerings
Connect with the ISV success team on the latest roadmap, developer tool for AppSource certification, and ISV community engagements | ISV self-service portal
The FastTrack program is designed to help you accelerate your Dynamics 365 deployment with confidence.
FastTrack Program | Finance TechTalks | Customer Engagement TechTalks | Talent TechTalks | Upcoming TechTalks
In previous blog I’ve announced free iAL extension for Visual Studio Code.
First version (0.1.0) allows you to get image for action.
Just type the name/description of your action, and iAL will find the best image for it, among 1100+ standard images using machine learning algorithms.
Is this magic? =) Well, let’s see how it really works.
The Big picture of the process is the next:
1) Developer creates Action on page, adds Image property, press Ctrl+Shift+P , select “iAL: Get image for action” (iAL extension should be installed), types the purpose of action (name or short description) and click Enter
2) iAL extension function “GetImage” send HTTP request to Azure Function “get-nav-actionimage”
3) Azure Function “get-nav-actionimage” send HTTP request to Azure Machine Learning web service “Get-NAV-ActionImage”
4) Azure ML web service “Get-NAV-ActionImage” run experiment “Get-NAV-ActionImage”
5) The result of experiment is “Image Value” (“Scored Value” in terms of Azure ML)
6) Azure Function get “Image Value” in response from Azure ML Web Service
7) iAL Extension get “Image Value” in response from Azure Function
8) Developer get “Image Value” in VS Code editor
The whole process can take from 1 second to 20 seconds. Why there is so big difference in execution speed?
Because of Azure Functions.
As you see we use Azure Functions here. Why? Because Azure ML WebService URL can be changed.
I found that when you change experiment workplace then url changes. Also, if I want to create new experiment (for better speed/accuracy) then this also will result in different url.
So, I don’t want Azure ML URL to be hardcoded in VS Code extension. I want to be sure that every user use one url to get correct result.
That is why I use Azure function which has static URL (which is hardcoded in VS Code extension).
And my Azure function has hardcoded URL to Azure ML web service, which I can change on the fly.
But what influence on Azure function execution time? This is “Always On” feature. When this feature is deactivated, then Azure functions app goes to sleep mode after some period of inactivity. And on free price tier “Always On” is turned off, and cannot be activated.
That is why, when developers use my extension rarely, then for every developer the process take about 20 sec. But if developers will use this app more often, then time for every developer will be reduced up to 1 sec (azure function will not go to sleep mode).
Yesterday I found Azure service “API management”. Did not tried it yet, may be it will solve this problem (//To Investigate).
The next Azure Function code interact with Azure Machine Learning web service
declare var require: any
export function run(context: any, req: any): void
context.log("TypeScript HTTP trigger function processed a request.")
if (req.query.alActionName || (req.body && req.body.alActionName))
body: "Please pass an Action Name on the query string or in the request body"
let request = require('request');
const uri = 'https://europewest.services.azureml.net/workspaces/YOUR-WORKSPACE-ID/services/YOUR-WEB-SERVICE-ID/execute?api-version=2.0&format=swagger';
const apiKey = 'YOUR-API-KEY';
let data =
'Text on Action': (req.query.alActionName || req.body.alActionName)
const reqOptions =
"Authorization": "Bearer " + apiKey,
request(reqOptions, function (error, response, body)
if (error !== undefined && error !== null)
body: 'Failed to read the content. Error: ' + error
if (response.statusCode !== 200)
body: 'Failed to read the content. Status code ' + response.statusCode + ' and body: ' + body
let jsonObject = JSON.parse(body);
let alActionImage = jsonObject.Results.output1["Scored Labels"];
To execute this code in Azure Functions you need also to
In next blog I will describe how to create Azure Machine Learning web service to propose Image for Action.
Feel free to use iAL extension in your everyday work and please, rate it and leave feedback on Marketplace and create issues on ial github project.
Business Applications communities