Tuesday, October 1, 2019

Microsoft Flow | Transfer a file to Azure Storage Blob with Manually Triggered Flow

This video shows how to create a manually triggered Flow to transfer a file to an Azure Storage Container using the Azure Storage Blob connector. You will learn how to set up an Azure storage account and a container and create a workflow to transfer a file from your mobile device or PC to a blob in Azure. I also show how to leverage expressions to obtain the file name for the selected file.



For additional information, please check the following resources:

Flow Buttons - click here
PowerApps Azure Blob Storage Connector (Shane Young) - click here

Until next post!

MG.-
Mariano Gomez, MVP

Thursday, September 26, 2019

Power Platform Share with Steve, Mariano, and Belinda (Episode 6)

MVPs Steve Endow (Twitter: @steveendow), Belinda Allen (Twitter: @MsBelindaAllen), and Mariano Gomez (Twitter: @dgpblogster) sit down with Bob McAdam (Twitter: @4mcadam), General Manager of the GP User Group (GPUG) to discuss the addition of Power Platform sessions in a Microsoft Dynamics GP Technical Conference.



Recording was done live and onsite from Fargo, ND on September 12, 2019, but captures the bulk of where the Microsoft Dynamics GP partner channel is with the demand for these sessions.

Until next post!

MG.-
Mariano Gomez, MVP

Thursday, September 19, 2019

PowerApps | Passing Record Collections from Microsoft Flow to PowerApps

In my previous video, I showed you how we can pass collections from PowerApps as a JSON payload to Microsoft Flow. Now, we will see how we can get a JSON payload back into PowerApps. The technique used here requires knowledge of various PowerApps functions to accomplish the job: Split(), FirstN(), Last(), RemoveIf() , and a timer.

 

For more information, take a look at the following videos and articles:

Microsoft Flow | Passing collections from PowerApps to Flow - click here

Until next post!

MG.-
Mariano Gomez, MVP

Wednesday, September 11, 2019

PowerApps | Fabrikam Utility Billing Center sample app

I just got done with presentations at the yearly Microsoft Dynamics GP Technical Conference in Fargo, ND and had the privilege of delivering a session titled Leveraging your on-premises data with the Power Platform.

During this session I presented a moderately complex sample application that leverages PowerApps AI Builder Form Processing to capture utility bills. These bills are submitted to the Microsoft Dynamics GP ERP application via a call to Microsoft Flow, which then invokes an eConnect API stored procedures to integrate these documents as Accounts Payable invoices.

The Solution

The solution leverages 3 AI Builder forms processing models for 3 distinct utility vendors.


Each model contains 5 form fields, selected during the build process, after training the model with 5 documents.



Each model was published and used to create a PowerApps application - the Fabrikam Utility Billing Center app.


This canvas app, is capable of reading utility bills for each vendor. The document information is stored in a collection and displayed in a gallery for each bill read. The total of all bills read is displayed in summary at the bottom of the gallery.


A button has been added to submit the collection of documents to Microsoft Dynamics GP. In turn, this button executes a Microsoft Flow workflow.


The workflow receives the JSON payload from PowerApps then iterates on the collection to convert the document amount from a string to an actual float value that can be passed into an eConnect API stored procedure, which is invoked via the SQL connector.


All documents are stored in a batch called POWERAPPS in Microsoft Dynamics GP from where they can be reviewed and posted.


An application user can choose to select a specific transaction from the batch and perform additional reviews.


I have a couple videos zooming into some of the techniques I used to create this end to end solution so be sure to watch them and subscribe to my YouTube channel:





For an overview of Microsoft Dynamics GP click here.

To download eConnect and eConnect Programmer's reference guide, click here.

I have added this application, the workflow, the stored procedure wrappers to the eConnect API stored procedures, and the slide deck to my GitHub repository, here.

Until next post!

MG.-
Mariano Gomez, MVP

Wednesday, September 4, 2019

Microsoft Flow | Passing collections from PowerApps to Flow

In this video I explore how you can pass a collection of records from PowerApps to Microsoft Flow by leveraging the JSON() serialization function. I also cover some other topics like working with JSON schemas, Data Operations, Variables, and Control Structures in Flow.



References: PowerApps | Form Processing with AI Builder: https://youtu.be/sVx6gsA2N5M PowerApps | A look at the new JSON() serializer function: https://youtu.be/CWt_t5OaCzs

Until next post!

MG.-
Mariano Gomez, MVP

Monday, August 26, 2019

PowerApps | Introduction to Build Tools for Azure DevOps

This short introductory video walks you through the installation of the PowerApps Build Tools component in an Azure DevOps environment. In addition, I show you where you can find information about PowerApps Build Tools and point you to a hands-on lab you can download to get your PowerApps DevOps journey started.



For more information, please check the following sources:

PowerApps Build Tools for Azure DevOps Overview - here
Build Tools for Azure DevOps Hands-on Lab - GitHub here

Until next post!

MG.-
Mariano Gomez, MVP

Wednesday, August 21, 2019

Microsoft Flow | Form Processing with AI Builder

You previously saw me use a AI Builder to build and train a form processing model to understand a utility bill. I also show how to build a real life PowerApps application to take advantage of the utility billing model and some elements and considerations while doing so.


In this new video, I show you how to leverage Microsoft Flow to create a simple orchestration around the same utility bill form processing model. In the process, we will look into building simple expressions with WDL, parsing JSON with the JSON connector, and working with variables.

More info on using AI Builder with Microsoft Flow here.

Until next post!

MG.-
Mariano Gomez, MVP

Friday, August 16, 2019

Microsoft Dynamics GP | Embed PowerApps apps

This video shows how to embed PowerApps applications inside of Microsoft Dynamics GP, leveraging the Connect gadget feature as a mechanism to deliver the application. Learn how you can achieve this in 2 simple steps to create a unique user experience.



More information on Dex.ini settings and web client:

Dex.ini on this site - click here
Web client on this site - click here

Until next post!

MG.-
Mariano Gomez, MVP

Tuesday, August 13, 2019

PowerApps | Persisted Button Pressed Numeric Up/Dn Control - Part 2

This is part 2 of 2 showing how to build a persisted button pressed numeric up/down control. This video shows how to leverage PowerApps components to create a single reusable unit that can be leveraged across other applications.



You can find more information about PowerApps Components by watching the following Microsoft MVPs and community members' videos:

Shane Young - Intro PowerApps Components including Input and Output properties
Daniel Christian - PowerApps community call-April 2019

Until next post!

MG.-
Mariano Gomez, MVP

Monday, August 5, 2019

PowerApps | Persisted Button Pressed Numeric Up/Dn Control - Part 1

This is part 1 of 2 showing how to build a persisted button pressed numeric up/down control. This video addresses the fundamentals of the control, starting with understanding the button pressed event, how it can be used to start and stop a timer, how to make 2 buttons increase and decrease a text input control, and finally introducing a timer to persist the press.



Part 2 will show how to componentize all these controls into a unit that can be reused across other applications.

For more information on button and timer controls, please check the following videos from MVP Shane Young (Twitter: @ShaneCows):

PowerApps Timer Control: https://youtu.be/Xe2NI2aTGvY
PowerApps Hide Button Based on User and other fun: https://youtu.be/0MB-z9cyFCQ

Until next post!

MG.-
Mariano Gomez, MVP

Tuesday, July 30, 2019

PowerApps | Form Processing with AI Builder

In this video I explore the recently released AI Builder Form Processing component, by creating and training a utilities billing model. I also show how to build a real life PowerApps application to take advantage of the utility billing model and some elements and considerations while doing so.


You can find more information on AI Builder here:

https://docs.microsoft.com/en-us/ai-builder/overview

Until next post!

MG.-
Mariano Gomez, MVP

Tuesday, July 23, 2019

Power Platform - Did you know? Mobile Apps

This video explores some basic capabilities available with the PowerApps, Microsoft Flow, and Power BI mobile applications.

 

Here I only highlight 3 of those capabilities:

1. Pinning PowerApps applications to the device home screen and marking an application as favorite
2. Create a Flow workflow from a template or from blank
3. Annotating a Power BI dashboards and tiles for easy follow up

Until next post!

MG.-
Mariano Gomez, MVP

Thursday, July 11, 2019

Developing PowerApps and Flow apps with Azure Cognitive Services' Computer Vision

This is a session I presented at the recent Azure Virtual Day Camp, hosted by Dynamic Communities' D365UG, on June 26, 2019.

In this presentation I show how to leverage Azure Cognitive Services' Computer Vision service with PowerApps and Flow to build a badge scanner. In addition, I show how to use some simple, but powerful PowerApps and Flow functions to do string and image manipulation.

 

NOTE: During this live presentation I had a few audio irregularities. I did the best I could to edit the video to eliminate any moderator shouts to check if I was still around :) However, I don't think it takes away from the ease of understanding the session.

Until next post!

MG.-
Mariano Gomez, MVP

Wednesday, July 10, 2019

#PowerApps - A look at the new JSON() serializer function

In this video I take a look at the newly released JSON() serialization function and how it can be used to serialize an image, added to PowerApps in the month of June. You can read the full details on the PowerApps Blog article, JSON for canvas apps.



Also, take a look at the video created by PowerApps MVP, April Dunham on the subject, along with her intro to AI Builder.

Until next post!

MG.-
Mariano Gomez, MVP

Saturday, June 29, 2019

#PowerApps #PowerBI: Cash flow in Power BI and PowerApps - THR1014

This past Microsoft Business Applications Summit 2019 - Atlanta, I teamed up with fellow Microsoft MVP, Belinda Allen to deliver a 20 minutes theater session showing how to build a cash flow in Power BI, then use Microsoft Flow to get notifications based on specific conditions in the report, and embedding the cash change calendar as a tile in a PowerApps application.

We had a lot of fun putting this presentation together, so I hope you enjoy it.



Until next post!

MG.-
Mariano Gomez, MVP

Sunday, June 9, 2019

#PowerApps: Componentizing Google Maps

Hi PowerAppers!

PowerApps Canvas Apps Components remain one of those features that seem to have endless possibilities. I have, for quite some time now, been working with the Google Maps API in many of my applications to return a static image pointing to a specific location on the map.

As I moved from application to application, I noticed that I always ended up doing the same operations: format a label with a string representing the maps API Url, then substituting very specific elements within that string, with address information or latitude and longitude coordinates, adding the API key, and playing with the size of the map image returned by the maps API. Frankly, a time consuming process that added no value to my projects.

This is a sample Google maps API Url string with some the classic substitution patterns:

Click image to enlarge

In order to solve this problem, I decided to farm this out to Canvas Apps Components. Since my Url string had many placeholders for things like location, zoom values, image size, API key, and even the color of the marker, I figured all those elements could become custom input properties to the component, as shown below:

Component Custom Properties

We could then proceed to add an image control from the media gallery, and set the Image property to our formatted Url with the custom properties as placeholders, as shown below:

Click image to enlarge
Finally, we need the component size to grow accordingly with the map size - here's an idea: you may want to introduce a buffer between the map size and the component size, which would visually act as a border. For this we will set the component Width and Height properties to the GoogleMap.MapImgWidth and GoogleMap.MapImgHeight custom property values and we are done.

To test this all, I created a simple test harness screen:


Now that the map is an actual component, it's easy to move it across PowerApps apps using the new import from cloud applications.

You can download the component from the PowerApps Community Apps Gallery, here.

Related Articles:

#PowerApps: Numeric Up/Down control with persisted button press event using components

Until next post!

MG.-
Mariano Gomez, MVP

Wednesday, May 29, 2019

#MSDYN365BC: Building a Development Environment for Microsoft Dynamics GP ISVs - Selecting a Source Control Provider

So far, I have covered the process of setting up both the Microsoft Dynamics 365 BC containerized application components, along with the VS Code IDE and AL language extensions. We also built the "Hello World" extension on BC's Customer List page and deployed it to our container by following some simple debugging steps. You can read more about it in the following articles:

#MSDYN365BC: Building a Development Environment for Microsoft Dynamics GP ISVs Part 1/3
#MSDYN365BC: Building a Development Environment for Microsoft Dynamics GP ISVs Part 2/3
#MSDYN365BC: Building a Development Environment for Microsoft Dynamics GP ISVs Part 3/3 #MSDYN365BC: Building a Development Environment for Microsoft Dynamics GP ISVs - Installing Visual Studio Code

The purpose of today's article is to show you how to set up a source code control provider to host your projects for a multi-developer's environment. If you are a Microsoft Dexterity developer, you are probably familiar with using source code control repositories like Visual Source Safe, Team Foundation Server, or even Azure DevOps Repos. I wrote an entire series of articles on the subject, which you can review here:

#DevOps Series: Microsoft Dexterity Source Code Control with Visual Studio Team Services



Downloading and Installing Git


To begin, we will need Git. Git is a plug in for VS Code that allows you to manage code in both Azure DevOps and GitHub, depending on your source code control repository preferences. You can begin the download process by going directly to https://www.git-scm.com/download/win

https://www.git-scm.com/download/win

1. Launch the Git installer and accept the license agreement.

2. In the Select Components window, choose to add Git to your desktop. It just makes life a lot easier. Note, you can also integrate Git to File Explorer, in order to be able to open configuration files and Bash files directly.


3. In Choosing the default editor used by Git make sure to select VS Code as this is primarily the tool used for AL development anyways. This way, you will have one place to develop your code and address any source code repository administrative tasks.


4. For the PATH environment variable, you will want to make sure you can run Git from the Windows command line (DOS prompt) and any third party software - including VS Code.


5. Accept the default here and move on. Of course, if you have a domain environment and want to issue and validate certificates against your Windows Certificate Store, then make sure to choose the Windows Secure Channel library option.


6. I honestly don't have a preference here, but if I had to guess, the Checkout Windows-style, commit Unix-style line endings option is probably more suitable for code being checked into your repository.


7. For the terminal emulator setting, we will use Windows' default console window.


8. Here, I only accepted the defaults.



Connecting to Azure Repos

There are tons of resources on the net explaining how to point VS Code to an Azure DevOps or GitHub repository, depending on your organization's preference. This particular article will explain how to integrate with Azure Repos.

1. Open VS Code and click on the Extensions button. Type "Azure Repos" to locate and install that particular extension .

Azure Repos extension
2. For the final part of this article, you can see the complete process in the following video I prepared showing how to create a Azure DevOps project, synchronize the repository with VS Code, and add your first project files to the repository.


Until next post!

MG.-
Mariano Gomez, MVP

Tuesday, April 30, 2019

#MSDYN365BC: Building a Development Environment for Microsoft Dynamics GP ISVs - Installing Visual Studio Code

In the previous 3 articles of the series, I talked about the rationale for selecting a container based environment for development purposes, we also installed Docker and downloaded and installed the Microsoft Dynamics 365 Business Central containers for Docker. This then set us on a path to installing the development IDE and selecting a source code control provider to host our AL solutions.

See:

#MSDYN365BC: Building a Development Environment for Microsoft Dynamics GP ISVs Part 1/3
#MSDYN365BC: Building a Development Environment for Microsoft Dynamics GP ISVs Part 2/3
#MSDYN365BC: Building a Development Environment for Microsoft Dynamics GP ISVs Part 3/3

This article in particular, will focus on the installation of Visual Studio Code (VS Code) and the AL language extensions for the environment.


Installing VS Code

VS Code is to BC developers what Dexterity is to Dynamics GP developers. VS Code provides the IDE required to incorporate the AL language extensions to develop BC integrating solutions. Although SanScript is integrated into the Dex IDE, the analogy still holds.

1. To get started, download VS Code from https://code.visualstudio.com



2. Click on the Download button on the upper right corner of the menu bar. You will then select the Windows 7, 8, 10 option to download the actual installer.


3. Once you have downloaded the installer, choose to run the executable. This will initiate the wizard from which you will follow a set of guided prompts to complete the installation.


4. Acknowledge the license agreement and click on Next to continue. You will then be asked to enter a new installation folder or accept the default - personally, I find that the defaults work best.


5. The installation process will then lay down all the files and register all appropriate components so you can begin using the application.


6. Once the installation is complete, please proceed to click on Finish. This should launch VS Code if you left the checkmark selected.


Installing AL language components and utilities

One of the aspects I like about VS Code is the extensions concept. Extensions are simply, plug ins that augment the VS Code environment. One such extensions is the AL language extension, created by Microsoft.

1. Click on the Extensions button on the left Activity Bar (square button). Type "AL" in the search bar to proceed. This should surface the "AL Language" extension by Microsoft. Click on Install to add this extension to VS Code.


2. Install PowerShell by Microsoft. Following similar process, click on the Extension button and type PowerShell. If you prefer working in the PowerShell ISE environment or from the PowerShell command prompt, that's entirely up to you, but know there's a PowerShell extension for VS Code, which brings the entire language into the VS Code IDE.


3. Install GitLens by Eric Armodio. Following similar process, click on the Extension button and type GitLens. With GitLens you can visualize code authorship at a glance via Git blame annotations and code lens, seamlessly navigate and explore Git repositories, gain insights via powerful comparison commands, and much more.


4. Install Insert GUID by Heath Stewart. Insert GUID is a simple command extension for Visual Studio Code to insert globally unique identifiers (GUIDs) into the Code text editor in a variety of formats.


5. Install Docker Explorer by Jun Han. With Docker Explorer you can manage Docker containers, Docker images, Docker Hub and Azure Container Registry right from VS Code.



"Hello World"

The "Hello World" project serves to test the entire installation up to this point and is the first foray into the world of AL extensions.

1. Press Ctrl+Shift+P on your keyboard to open the VS Code Command Palette (Alternatively, you can choose View | Command Palette from the menu). Type AL:Go! to locate the option to create an AL project.



2. Enter a local folder where you would like to store the project. In this case, I simply removed the last portion of the folder name and replaced with HelloWorld.


3. You will immediately be prompted to select the server type you will be running this project against. Since we've deployed the local containers, it's safe to say we can choose Your Own Server from the drop-down


The above operation results in the creation of a launch.json file that is added to the project.


4. Proceed to replace the server name, currently defaulted to localhost, to the name assigned to your BC container, in this case http://demo-bc. Change the instance to NAV from the default, BC130.

Press Ctrl+Shift+P and type AL:Download Symbols to retrieve all the Windows symbol packages for debugging purposes. More information on AL Windows Symbol Packages here.


5. Press Ctrl+Shift+B on your keyboard to compile the project and create the publishing package for our "Hello World" extension.


This extension simply sets a trigger to the OnOpenPage() event of the Customer List page that displays the message "App published: Hello word". The page is loaded by default as specified in the launch.json file.


6. Press F5 on your keyboard to launch the application in debugging mode. This should launch BC and present the message above.


Once the message has been cleared, the application will continue to load the Customer List.




In the next article, I will talk about connecting to a source code repository and what else we need in order to get our environment fully ready. I will also cover some techniques that are much more adaptable to Microsoft Dynamics GP developers as far as working with AL files and folders and how we can leverage our Dexterity knowledge here to help us administer our projects.

Until next post!

MG.-
Mariano Gomez, MVP