[UIPath] How to filter multiple dynamic values in one column using DataTable.Select method

I've been looking for ways to filter multiple values in a datatable but I'm only led to one solution, the Select() method. For those who were sold on UIPath being a drag-and-drop-no-coding-required solution to automation, this could be intimidating. Heck, if I didn't know about SQL I'd be dead beat right now. Yup! The only way (at least for now) to select multiple values from a column in a datatable is by using the DataTable.Select method.

Thankfully, it's not that hard.

RelatedHelpful DataTable methods and queries for better sorting, filtering, extracting

Say I have this datatable called rulesDT,



And I want to get all rows where Home Location is either London, Manila, or Tokyo

If only UIPath had a feature like this in its Filter DataTable activity, it would be easy right?

UIPath wishlist: Allow IN operation

But since there's none at the moment, here's what worked for me.

Using DataTable.Select()

var rows = new DataRow[]; //Array of DataRow

var outputDT = new DataTable;

assign rows = rulesDT.Select("[Home Location] IN ('London','Manila','Tokyo')");

//Check if there are results
if(rows.Count > 1){
   outputDT = rows.CopyToDataTable();
} else {
   //Do something
}

The pseudo code above, when applied as a UIPath workflow, will return a datatable with rows that satisfy the query, in this case 5 rows.


It's similar to running a filter rule on MS Excel.

The reason we need to assign the results to a DataRow[] first instead of directly putting the output into DataTable is to avoid running into this exception in case there are 0 rows found. 


You cannot copy 0 rows to a DataTable, that's why we need to check first if the Select query returned at least one result.

Example for querying multiple columns

I want to get Partners between the ages 30 to 40 years old

rulesDT.Select("[Occupation] = 'Partner' AND [Age] >= 30 AND Age <= 40")
There is no BETWEEN operator so we have to use two comparators.

Querying dynamic values

If you want to select multiple dynamic values from a column, you need to build the parameters first then include it as a variable.

•  Using a list of integer

var rows = new DataRow[]
var dynamicIntArr = {20,30,40}
var join_dynamicIntArr = String.Join(",",dynamicIntArr) //Result: 20,30,40
rows = rulesDT.Select("[Age] IN (" + str_dynamicIntArr + ")")
•  Using a list of string
This requires more manipulation as you have to wrap each value inside single quotes. It would be best to prepare the string with single quotes beforehand for easier handling.

var rows = new DataRow[]
var dynamicStrArr = {"'One'","'Two'","'Three'"}
var join_dynamicStrArr = String.Join(",",dynamicStrArr) //Result: 'One','Two','Three'
rulesDT.Select("[Age] IN (" + join_dynamicStrArr + ")")

Very helpful links

Share:

How to make an HTML modal window using Javascript and CSS

This is basically an application of this tutorial from w3schools. I've created a fiddle for it and customized mainly the CSS.

Modals are a neat way to present content in an HTML page without making it look cluttered. You can use it to contain information you don't want to be visible at all times. You increase the usability of your website by not having your user jump to a new page for small information or a form.


This is really more of a note to self haha but hope you find is useful too!
Share:

[UIPath] How to include default Outlook signature dynamically in Send Outlook Mail Message activity

How nice would it be if UIPath would enhance its Send Outlook Mail Message activity to allow users to include their default email signature?

Something like this...

UIPath wishlist: looking forward to this feature enhancement!

Photo is edited of course hehe but in the meantime that's it's not possible directly, here's a pretty neat workaround I've discovered.
But first, here's the situation. I have a robotic workflow that sends email messages on Outlook, and it's being run by multiple users, depending on who's available. Naturally, the email will be sent from their personal accounts, so the signature must be theirs as well.

I need a way to automatically fetch their signatures as HTML and attach it to the email body. The challenge for different users is that the signature details are different as well, so you have to generate the appropriate ones every time you run the robot.

One way would be to prepare a text file containing a signature template and have them edit the details every time they run the workflow. You can then read this text file and append it to the email body.

But another, more straightforward way is to fetch their signature files directly from Outlook's directory.

Somewhere in your user account's roaming folder is your outlook email signatures. These are the email signatures you've created using your mailbox. In my case, they're stored here:

C:\Users\<username>\AppData\Roaming\Microsoft\Signatures


The folder structure may differ per setup but if you're working with users within the same network or have the same MS Office setup, chances are the path is the same, except for the username of course. And you can get that using the Environment.username variable.

So now that you have the direct path to your Outlook's default email signature, you know the rest. Read it, store it in a text file, and finally append it to your message body. Don't forget to tick IsBodyHtml! :)


Caveat? Images don't work, so there's that.

Hope this helps somehow!
Share: