<br />
<b>Deprecated</b>:  YoastSEO_Vendor\Symfony\Component\DependencyInjection\Container::__construct(): Implicitly marking parameter $parameterBag as nullable is deprecated, the explicit nullable type must be used instead in <b>/home/nubelus/sharedove/adisjugo/wp-content/plugins/wordpress-seo/vendor_prefixed/symfony/dependency-injection/Container.php</b> on line <b>60</b><br />
<br />
<b>Deprecated</b>:  YoastSEO_Vendor\League\OAuth2\Client\Provider\AbstractProvider::authorize(): Implicitly marking parameter $redirectHandler as nullable is deprecated, the explicit nullable type must be used instead in <b>/home/nubelus/sharedove/adisjugo/wp-content/plugins/wordpress-seo/vendor_prefixed/league/oauth2-client/src/Provider/AbstractProvider.php</b> on line <b>416</b><br />
<br />
<b>Deprecated</b>:  YoastSEO_Vendor\GuzzleHttp\Client::getConfig(): Implicitly marking parameter $option as nullable is deprecated, the explicit nullable type must be used instead in <b>/home/nubelus/sharedove/adisjugo/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/Client.php</b> on line <b>181</b><br />
<br />
<b>Deprecated</b>:  YoastSEO_Vendor\GuzzleHttp\ClientInterface::getConfig(): Implicitly marking parameter $option as nullable is deprecated, the explicit nullable type must be used instead in <b>/home/nubelus/sharedove/adisjugo/wp-content/plugins/wordpress-seo/vendor_prefixed/guzzlehttp/guzzle/src/ClientInterface.php</b> on line <b>77</b><br />
{"id":3709,"date":"2018-12-14T15:22:38","date_gmt":"2018-12-14T15:22:38","guid":{"rendered":"https:\/\/blog.sharedove.com\/adisjugo\/?p=3709"},"modified":"2019-03-02T13:01:13","modified_gmt":"2019-03-02T13:01:13","slug":"extending-powerapps-language-with-azure-functions","status":"publish","type":"post","link":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/","title":{"rendered":"Extending PowerApps and Flow, part 3: Extending PowerApps language with Azure Functions"},"content":{"rendered":"<p>In the previous two articles of this blog post series, we have seen how to <a href=\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2016\/11\/29\/extending-powerapps-and-flow-part-1-adding-custom-data-sources-through-azure-api-apps\/\">utilize Azure API Apps to connect to external data sources<\/a>, and how to <a href=\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2016\/12\/01\/extending-powerapps-and-flow-part-2-extending-powerapps-expression-language-with-azure-api-apps\/\">utilize the same app to extend limited PowerApps expression language with additional value controllers<\/a>.<\/p>\n<p>But sometimes, if we really want to do something simple, an Azure API App can be an overkill, from development, deployment and management perspective. If we remember that use case from the last post, where our only goal was to check if the beer name contains the word \u201cHeineken\u201d, we obviously don\u2019t need an Azure Api APP for that. It\u2019s just one IF clause, after all. For that, Azure Functions might be a way to go.<\/p>\n<p><a href=\"http:\/\/functions.azure.com\">Azure Functions<\/a> are a great vehicle for hosting small, single-tasked pieces of code. Since they run on hamsters, we will call it the \u201cserverless computing\u201d. Basically, you can log in to your Azure portal, or go to <a href=\"http:\/\/functions.azure.com\">functions.azure.com<\/a> and start writing your code in a web editor. There is a number of programing languages, plus JavaScript, available to use. If you are not into web editors for writing code, you can use anything you wish, and store your function code on GitHub or VSTS, with continuous integration. Since recently, there are also Visual Studio Tools for Azure Functions available. Those Visual Studio tools are at the moment still in preview and they they require VS2015 U3 with Azure SDK installed. There are quite some bugs still there, but \u2013 this is only a preview, and it will, probably, get better with the time.<\/p>\n<p>In this blog post, we\u2019ll make a walk-trough using Visual Studio 2015 Update3 and VS Tools for Azure Functions, to create and deploy a function, and to reuse it in the PowerApp that we have built in the previous two articles.<\/p>\n<p>So let\u2019s start with creating a Visual Studio project! After installing all the prerequisites, you should have the \u201cAzure Functions (Preview)\u201d project available among the Cloud projects.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/001.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"001\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/001_thumb.png\" alt=\"001\" width=\"964\" height=\"515\" border=\"0\"><\/a><\/p>\n<p>After creating an empty Azure Function project, you\u2019ll need to add a new Azure Function from the \u201cAdd\u201d context menu in the solution explorer:<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/002.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"002\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/002_thumb.png\" alt=\"002\" width=\"803\" height=\"543\" border=\"0\"><\/a><\/p>\n<p>The next you will need to choose the programming language, and the function type. I\u2019ll choose C# (there are many other choices), and \u201cHttpTrigger\u201d function trigger. Note that functions can be triggered on many different ways \u2013 we have webhooks, queues,&nbsp; integration with Azure Service Bus, timers, and many, many other possibilities. In our case, HttpTrigger is what we need.<\/p>\n<p>Choose the Authorization level. I\u2019ll take \u201cAnonymous\u201d here, for the sake of simplicity. You can of course choose \u201cFunction\u201d, \u201cAdmin\u201d, and provide function or master admin keys which you can create in Azure Portal (later about it). Furthermore, since Azure Functions are based on Azure App Service platform, you can also choose some of the supported Authentication mechanisms there, like AAD, Microsoft Account, Facebook etc, which might be a valid scenario when you want to fetch some SharePoint data, but I will cover that in another article, since PowerApps are anyway not (yet) able to pass authentication tokens, and cannot be used for that scenario.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/003.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"003\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/003_thumb.png\" alt=\"003\" width=\"808\" height=\"554\" border=\"0\"><\/a><\/p>\n<p>Once we\u2019re done with that, let\u2019s code our function. We\u2019ll make the same use case as in the last article \u2013 check if the name parameter (from the request) contains string \u201cHEINEKEN\u201d, and we\u2019ll return our result in the response variable.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/004.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"004\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/004_thumb.png\" alt=\"004\" width=\"1352\" height=\"936\" border=\"0\"><\/a><\/p>\n<p>You can build, and publish your function.<\/p>\n<p>If you go to your Azure portal, and open that same function there, you will se that you can even edit your code manually inside the portal. Be aware that there is no version control, or rolling back of your code there, so whatever you do in the portal will change the previously published function.<\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/004a.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"004a\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/004a_thumb.png\" alt=\"004a\" width=\"1171\" height=\"911\" border=\"0\"><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>In the \u201cIntegrate\u201d tab, we can change the authorization level here, from Anonymous to Function or Admin.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/004a3.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"004a3\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/004a3_thumb.png\" alt=\"004a3\" width=\"350\" height=\"352\" border=\"0\"><\/a><\/p>\n<p>If we do, we can get our default keys, or create new ones, in the \u201cManage\u201d tab.<\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/004b.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"004b\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/004b_thumb.png\" alt=\"004b\" width=\"964\" height=\"333\" border=\"0\"><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>OK, once we\u2019re done with that, let\u2019s try the function. If we pass the the value \u201cHeineken\u201d to the name parameter in the query string, we see that our function works as expected:<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/005.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"005\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/005_thumb.png\" alt=\"005\" width=\"899\" height=\"159\" border=\"0\"><\/a><\/p>\n<p>If we go to the \u201cMonitor\u201d tab of our function, we can see all the details about it\u2019s invocation and results:<\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/006.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"006\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/006_thumb.png\" alt=\"006\" width=\"1488\" height=\"546\" border=\"0\"><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>The next we need to do is to create the swagger definition for our function. You remember: PowerApps want swagger. My preferred swagger creation tool (no, I do not like creating it manually) is:<\/p>\n<p><a href=\"http:\/\/editor.swagger.io\/\">http:\/\/editor.swagger.io\/<\/a><\/p>\n<p>You can even try you function there, and everything. My operation is called \u201cRunThis\u201d, this is what I will be calling in PowerApps.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/007.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"007\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/007_thumb.png\" alt=\"007\" width=\"1667\" height=\"770\" border=\"0\"><\/a><\/p>\n<p>Pay attention, that if you have used any other authorization than anonymous (Function, Admin), you\u2019ll have to pass another parameter in your GETter&nbsp; operation:<\/p>\n<p>{<br \/>\n&#8220;name&#8221;: &#8220;code&#8221;,<br \/>\n&#8220;in&#8221;: &#8220;query&#8221;,<br \/>\n&#8220;description&#8221;: &#8220;code&#8221;,<br \/>\n&#8220;default&#8221;: &#8220;[enter function\/admin code]&#8221;,<br \/>\n&#8220;type&#8221;: &#8220;string&#8221;<br \/>\n}<\/p>\n<p><strong>NOTE: I am not a fan of storing keys in the configuration files which are uploaded some management portal. I don\u2019t think that is a good security solution, from all many reasons. One of the major reasons is that a connection created on such a way can be reused by everyone who has rights to create apps in this environment, so that authorization looses its purpose immediately. But, for the moment, its either that, or no authorization at all.<\/strong><\/p>\n<p>Once we\u2019ve created the swagger definition, let\u2019s upload it to the PowerApps (with or without key), the same way we have uploaded swagger for Web APIs published as Azure API Apps:<\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/009.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"009\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/009_thumb.png\" alt=\"009\" width=\"844\" height=\"712\" border=\"0\"><\/a><\/p>\n<p>Here we have no other choice but to select \u201cNo Authentication\u201d:<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/010.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"010\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/010_thumb.png\" alt=\"010\" width=\"594\" height=\"219\" border=\"0\"><\/a><\/p>\n<p>There is our custom API:<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/011.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"011\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/011_thumb.png\" alt=\"011\" width=\"1179\" height=\"284\" border=\"0\"><\/a><\/p>\n<p>We can add it as a data source in the PowerApps designer:<\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/012.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"012\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/012_thumb.png\" alt=\"012\" width=\"380\" height=\"603\" border=\"0\"><\/a><\/p>\n<p>And use it in the PowerApp itself, the same way we have used it for the API Apps:<\/p>\n<p><strong>UpdateContext({BeerQualityAzureFunction:<span style=\"color: #008000; font-size: large;\">BeerQualityAzureApp.RunThis<\/span>(txtBeerName.Text)})<\/strong><\/p>\n<p>With the expected result for the given beer:&nbsp; <img decoding=\"async\" class=\"wlEmoticon wlEmoticon-smile\" style=\"border-style: none;\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/wlEmoticon-smile.png\" alt=\"Smile\"><\/p>\n<p><a href=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/013.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"013\" src=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/013_thumb.png\" alt=\"013\" width=\"645\" height=\"961\" border=\"0\"><\/a><\/p>\n<div class=\"fb-background-color\">\n\t\t\t  <div \n\t\t\t  \tclass = \"fb-comments\" \n\t\t\t  \tdata-href = \"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/\"\n\t\t\t  \tdata-numposts = \"59\"\n\t\t\t  \tdata-lazy = \"true\"\n\t\t\t\tdata-colorscheme = \"light\"\n\t\t\t\tdata-order-by = \"time\"\n\t\t\t\tdata-mobile=true>\n\t\t\t  <\/div><\/div>\n\t\t  <style>\n\t\t    .fb-background-color {\n\t\t\t\tbackground:  !important;\n\t\t\t}\n\t\t\t.fb_iframe_widget_fluid_desktop iframe {\n\t\t\t    width: 100% !important;\n\t\t\t}\n\t\t  <\/style>\n\t\t  ","protected":false},"excerpt":{"rendered":"<p>In the previous two articles of this blog post series, we have seen how to utilize Azure API Apps to connect to external data sources, and how to utilize the same app to extend limited PowerApps expression language with additional value controllers. But sometimes, if we really want to do something simple, an Azure API [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3712,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[11,12],"tags":[126,55],"class_list":["post-3709","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","category-howto","tag-powerapps","tag-sharepoint"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Extending PowerApps and Flow, part 3: Extending PowerApps language with Azure Functions - Adis Jugo blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Extending PowerApps and Flow, part 3: Extending PowerApps language with Azure Functions - Adis Jugo blog\" \/>\n<meta property=\"og:description\" content=\"In the previous two articles of this blog post series, we have seen how to utilize Azure API Apps to connect to external data sources, and how to utilize the same app to extend limited PowerApps expression language with additional value controllers. But sometimes, if we really want to do something simple, an Azure API [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/\" \/>\n<meta property=\"og:site_name\" content=\"Adis Jugo blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-12-14T15:22:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-03-02T13:01:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/Vintage-Art-Background-Imag.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1200\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"adis.jugo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"adis.jugo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/\",\"url\":\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/\",\"name\":\"Extending PowerApps and Flow, part 3: Extending PowerApps language with Azure Functions - Adis Jugo blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/Vintage-Art-Background-Imag.jpg\",\"datePublished\":\"2018-12-14T15:22:38+00:00\",\"dateModified\":\"2019-03-02T13:01:13+00:00\",\"author\":{\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/#\/schema\/person\/a5ca63552094ce9d5a0440f3a1ac9a4c\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/#primaryimage\",\"url\":\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/Vintage-Art-Background-Imag.jpg\",\"contentUrl\":\"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/Vintage-Art-Background-Imag.jpg\",\"width\":1920,\"height\":1200},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.sharedove.com\/adisjugo\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Extending PowerApps and Flow, part 3: Extending PowerApps language with Azure Functions\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/#website\",\"url\":\"https:\/\/blog.sharedove.com\/adisjugo\/\",\"name\":\"Adis Jugo blog\",\"description\":\"The Southern Side\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.sharedove.com\/adisjugo\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/#\/schema\/person\/a5ca63552094ce9d5a0440f3a1ac9a4c\",\"name\":\"adis.jugo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.sharedove.com\/adisjugo\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cc5a23cf1bd0b9d8401c9dd65c6c141041ec0c6e37eedbb511779e4a40a198fd?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cc5a23cf1bd0b9d8401c9dd65c6c141041ec0c6e37eedbb511779e4a40a198fd?s=96&d=mm&r=g\",\"caption\":\"adis.jugo\"},\"url\":\"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/author\/adisjugo\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Extending PowerApps and Flow, part 3: Extending PowerApps language with Azure Functions - Adis Jugo blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/","og_locale":"en_US","og_type":"article","og_title":"Extending PowerApps and Flow, part 3: Extending PowerApps language with Azure Functions - Adis Jugo blog","og_description":"In the previous two articles of this blog post series, we have seen how to utilize Azure API Apps to connect to external data sources, and how to utilize the same app to extend limited PowerApps expression language with additional value controllers. But sometimes, if we really want to do something simple, an Azure API [&hellip;]","og_url":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/","og_site_name":"Adis Jugo blog","article_published_time":"2018-12-14T15:22:38+00:00","article_modified_time":"2019-03-02T13:01:13+00:00","og_image":[{"width":1920,"height":1200,"url":"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/Vintage-Art-Background-Imag.jpg","type":"image\/jpeg"}],"author":"adis.jugo","twitter_card":"summary_large_image","twitter_misc":{"Written by":"adis.jugo","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/","url":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/","name":"Extending PowerApps and Flow, part 3: Extending PowerApps language with Azure Functions - Adis Jugo blog","isPartOf":{"@id":"https:\/\/blog.sharedove.com\/adisjugo\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/#primaryimage"},"image":{"@id":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/Vintage-Art-Background-Imag.jpg","datePublished":"2018-12-14T15:22:38+00:00","dateModified":"2019-03-02T13:01:13+00:00","author":{"@id":"https:\/\/blog.sharedove.com\/adisjugo\/#\/schema\/person\/a5ca63552094ce9d5a0440f3a1ac9a4c"},"breadcrumb":{"@id":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/#primaryimage","url":"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/Vintage-Art-Background-Imag.jpg","contentUrl":"https:\/\/blog.sharedove.com\/adisjugo\/wp-content\/uploads\/2016\/12\/Vintage-Art-Background-Imag.jpg","width":1920,"height":1200},{"@type":"BreadcrumbList","@id":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/2018\/12\/14\/extending-powerapps-language-with-azure-functions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.sharedove.com\/adisjugo\/"},{"@type":"ListItem","position":2,"name":"Extending PowerApps and Flow, part 3: Extending PowerApps language with Azure Functions"}]},{"@type":"WebSite","@id":"https:\/\/blog.sharedove.com\/adisjugo\/#website","url":"https:\/\/blog.sharedove.com\/adisjugo\/","name":"Adis Jugo blog","description":"The Southern Side","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.sharedove.com\/adisjugo\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.sharedove.com\/adisjugo\/#\/schema\/person\/a5ca63552094ce9d5a0440f3a1ac9a4c","name":"adis.jugo","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.sharedove.com\/adisjugo\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/cc5a23cf1bd0b9d8401c9dd65c6c141041ec0c6e37eedbb511779e4a40a198fd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cc5a23cf1bd0b9d8401c9dd65c6c141041ec0c6e37eedbb511779e4a40a198fd?s=96&d=mm&r=g","caption":"adis.jugo"},"url":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/author\/adisjugo\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/posts\/3709","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/comments?post=3709"}],"version-history":[{"count":5,"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/posts\/3709\/revisions"}],"predecessor-version":[{"id":3959,"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/posts\/3709\/revisions\/3959"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/media\/3712"}],"wp:attachment":[{"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/media?parent=3709"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/categories?post=3709"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.sharedove.com\/adisjugo\/index.php\/wp-json\/wp\/v2\/tags?post=3709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}