Skip to main content

Workflows using CoreWF in .net core

Workflow Foundation is a great tool when designing workflows for .net. Unfortunately, just like WCF, that technology is not going to be ported to .net core. However, a company named UI Path (https://www.uipath.com/)  that heavily relies on Windows Workflow Foundation, has started an unofficial port to .net (https://github.com/UiPath-Open/corewf).

In order to see how compatible would be the the new port with the current Windows Workflow for simple workflows, I created a playground project at  https://github.com/jptarqu/WorkflowForCorePlayground . The Visual Studio solution contains two projects:


  1. WorkflowForCorePlayground : a VB.net Windows Workflow project created using the VS template for .net 4.8. 
  2. CoreWfSample : a .net core console app that runs a cleaned version of the same xaml that project #1 has.
The idea is to explore the possibility of still having business users design the workflow using the regular .net framework 4.8 beautiful and easy-to-use designer, while still been able to run the workflow in .net, in for example an Azure Server-less Function. Obviously,  not all Workflow Activities would work with .net core, but hopefully simple workflows and flow charts encapsulating business rules can be used.

In order to use the CoreWF you must install the nuget in your project. But the nuget does not seem to be in Nuget.org, so you have to add the following url to yur nuget sources in Visual Studio:

https://www.myget.org/F/uipath-dev/api/v3/index.json

The .net core project works without needing to modfiy the xaml. I was able to copy and paste the xaml code from the xaml generated by the visual studio designer into the xaml file in my .net core.

My next experiment is to try creating an Azure Function that runs the xaml workflow.


Comments

Popular posts from this blog

Powershell script for converting JPG to TIFF

The following Powershell script will convert a batch of JPEG files to TIFF format: #This Code is released under MIT license [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") $files_folder = 'C:\path-where-your-jpg-files-are\' $pdfs = get-childitem $files_folder -recurse | where {$_.Extension -match "jpg"} foreach($pdf in $pdfs) { $picture = [System.Drawing.Bitmap]::FromFile( $pdf.FullName ) $tiff = $pdf.FullName.replace('.PDF','').replace('.pdf','').replace('.jpg','').replace('.JPG','') + '.tiff' $picture.Save($tiff) }

Power Automate: SFTP action "Test connection failed"

When I added an SFTP create file action to my Power Automate flow ( https://flow.microsoft.com ) , I got the following error in the action step, within the designer: "Test connection failed" To troubleshoot the Power Automate connection, I had to: go the Power Automate portal then "Data"->"Connections"  the sftp connection was there, I clicked on the ellipsis, and entered the connection info It turns out, that screen provides more details about the connection error. In my case, it was complaining that "SSH host key finger-print xxx format is not supported. It must be in 'MD5' format". I had provided the sha fingerprint that WinScp shows. Instead, I needed to use the MD5 version of the fingerprint. To get that, I had to run in command line (I was in a folder that had openssh in it): ssh -o FingerprintHash=md5 mysftpsite.com To get the fingerprint in MD5 format. I took the string (without the "MD5:" part of the string) and put

Alert if file missing using Powershell

The following Powershell script can be used to send an email alert when a file is missing from a folder or it is the same file from a previous check: $path_mask = "yourfile_*.txt" $previous_file_store = "lastfileread.txt" $script_name = "File Check" ###### Functions ########## Function EMailLog($subject, $message) {    $emailTo = "juanito@yourserver.com"    $emailFrom = "alert@yourserver.com"    $smtpserver="smtp.yourserver.com"       $smtp=new-object Net.Mail.SmtpClient($smtpServer)    $smtp.Send($emailFrom, $emailTo, $subject, $message) } Try {    #get files that match the mask    $curr_file = dir $path_mask |  select name    if ($curr_file.count -gt 0)    {        #file found        #check if the file is different from the previous file read        $previous_file = Get-Content $previous_file_store        $curr_file_name = $curr_file.Item(0).Name        if ($