SEPTEMBER 7, 2021

In this post, I’m going to show you how to run Microsoft’s RPA product from Flowable.  The full and complete way of doing this is by using Microsoft Power Automate Cloud to remotely drive Microsoft Power Automate Desktop, but that requires fees and complexity.  I’m going to show a way of directly driving their free desktop RPA as a proof of concept.  Microsoft has made RPA a commodity, so let’s take full advantage of that!

Microsoft Power Automate Desktop (I’ll use MPAD from now on) is free for Windows 10 and will be built into Windows 11.  It allows you to do all the RPA tasks that you might expect, including opening and manipulating documents or websites.  The example I’m going to use will just take a given website, open a browser for the site, grab the page title and close the browser.  Like any good how-to, you can take it further to make it do more!

The first challenge is that there is no way to invoke a bot created with MPAD standalone other than click a button from within the MPAD app.  There’s no API (except from Microsoft Power Automate Cloud) or command line interface.  This means we’ll need to have a bot constantly running, waiting to get some trigger and input to run.  An MPAD bot can make web service calls, so it would be possible to have a bot polling Flowable periodically for work (e.g. using the external worker feature of Flowable), but polling doesn’t feel very 21st Century.  There’s no event-based API either, however, a bot can wait for a file in a given location to be created.  We can use this as our trigger for the bot.

Once triggered by a file being created, we could have our bot use Flowable’s external worker approach, but again to keep it simple, I’m just going to use file contents as the input and output for the bot.  Also, to make it a bit flexible, I’m going to have one bot that waits and triggers on the file contents, which then calls a second bot (or more) to do the actual work, returning its output that the first bot then writes to file again. 

Getting started with Microsoft Power Automation Desktop

Let’s get that part running first.  You can download and install MPAD on Windows 10 from here (button near the bottom of the page).  Once installed, you can create the bots.  There isn’t an import feature in MPAD, but you can copy and paste bot content. First, create the “trigger” bot:

mpad-create-1024x651

Then copy and paste the following into the newly opened bot editor:

LOOP LoopIndex FROM 1 TO 2 STEP 0
    WAIT (File.Created File: $'''C:\\flowable\\data\\rpa\\bot1-in.txt''')
    File.ReadTextAsList File: $'''C:\\flowable\\data\\rpa\\bot1-in.txt''' Encoding: File.TextFileEncoding.UTF8 Contents=> FileContents
    File.RenameAddText Files: $'''C:\\flowable\\data\\rpa\\bot1-in.txt''' TextToAdd: $'''-last''' KeepExtension: True TextPosition: File.AddTextPosition.AfterName IfFileExists: File.IfExists.Overwrite RenamedFiles=> RenamedFiles
    SET NewOutput TO $'''No bot run.'''
    SWITCH FileContents[0]
        CASE = $'''webbot'''
            @@flowname: 'Bot get webpage title'
            External.RunFlow FlowId: 'b301680b-b12f-4ef0-a633-e9d383b2b12a' @NewInput: FileContents[1] @NewOutput=> NewOutput
    END
    File.WriteText File: $'''C:\\flowable\\data\\rpa\\bot1-out.txt''' TextToWrite: NewOutput AppendNewLine: True IfFileExists: File.IfFileExists.Overwrite Encoding: File.FileEncoding.Unicode
END

This will magically convert to the visual representation:

Screenshot-2021-08-27-082855-1024x683

This bot has been made ready for you to add more callable bots in the future by switching the one called based on a line in the input file. Then create the bot that drives the browser and copy and paste the following:

WebAutomation.LaunchEdge Url: NewInput WindowState: WebAutomation.BrowserWindowState.Normal ClearCache: False ClearCookies: False Timeout: 60 BrowserInstance=> Browser
WebAutomation.DataExtraction.GetDetailsOfWebPage BrowserInstance: Browser DetailsType: WebAutomation.DetailsType.Title Details=> NewOutput
ON ERROR

END
WebAutomation.CloseWebBrowser BrowserInstance: Browser

This too will get converted to the visual representation:

extract-web-1024x329

You should now have 2 bots.  We can test them without running Flowable, as they are just triggered by files.  The trigger bot has been configured to look for a file “bot1-in.txt” in the “C:\flowable\data\rpa” folder.  This assumes you have Flowable installed in “C:\flowable” and have created a subfolder “rpa” in the “data” folder.  If you have Flowable installed elsewhere, you’ll need to tweak the bot or create the necessary folders.  Start the trigger bot running in MPAD.

To trigger the bot, open Notepad and paste the following contents as the first 2 lines:

webbot
www.flowable.com

Save the file as bot1-in.txt in C:\flowable\data\rpa – which should immediately cause the bot to read the file contents, rename the file and then call the browser bot.  When the browser has closed, an output file bot1-out.txt should have been created in the same folder.  Open it to see the extracted title of the web page.  If things don’t work as expected, then it should be straight-forward to work out what’s going wrong by stepping through the bot in MPAD and twiddling with the files.

Bringing in the business automation

To drive this from Flowable, I’m going to use a script task to run the bot, followed by a user task to show the output in a form with a text field.  Just a simple 2 step process with a start form in an app.  The example app for Flowable Work can be downloaded from here, and the same example app for the open source Flowable can be downloaded from here.

rpa-flow-1024x200

The script task will create the necessary file and contents, then loop, sleeping every 2 seconds, waiting for the output file to be produced by the bot, before reading its contents into a process variable and deleting the output file.  I’ve used the following Groovy script:

File inFile = new File('/flowable/data/rpa/bot1-in.txt').write(selectBot + "\n" + textIn + "\n")

outFile = new File('/flowable/data/rpa/bot1-out.txt')
while(!outFile.exists()) {
   sleep(2000)
}

String newContent = new File('/flowable/data/rpa/bot1-out.txt').text
outFile.delete()
execution.setVariable('bot1Out', newContent)

To run this, publish the app, then start a new instance of the process, making sure your trigger bot is still running in MPAD.  You’ll be prompted for the bot to call (only one currently) and a website address for the bot to extract the page title.

Screenshot-2021-08-27-083429-1-1024x308

You should then see the bot open the browser, then close it, soon followed by a new Flowable task being created that displays the extracted page title.

flow-output-1024x276

Summary

There we go – using Flowable to orchestrate a sophisticated RPA that didn’t cost a cent.  To extend the example, you could make the file exchange more sophisticated, passing structured details in JSON, or making the input/output file location customizable.  Alternatively, take the External Worker approach, and use REST calls to get and set inputs and outputs. Time to go and experiment!

Paul Holmes-Higgin - Management

Paul Holmes-Higgin

Chief Product Officer

Co-founder of Flowable and a long-time Open Source advocate, that he believes still has an important role to play in making innovation more widely available.

Share this Blog post
flowable_blog_engineering_inspect
Engineering | JUNE 21, 2022

Visual debugging of BPMN and CMMN with Flowable Inspect

Visual debugging of BPMN and CMMN with Flowable Inspect One of the smartest and unique features of Flowable is the ability to debug and…Read more

Blog post React UI header
Business | MARCH 24, 2022

Reacting when your UI framework reaches end of life

Our long-serving automation editing application, Flowable Design, was built using the AngularJS UI framework. Time to react. Well, to React.Read more

photo-1550751827-4bd374c3f58b
Engineering | FEBRUARY 17, 2022

Running Flowable with Spring Native

In this post, we'll look at what it takes to run Flowable on GraalVM using the latest Spring Native release.Read more