ReFramework - Best practice for TransactionItem

Hello Friends,

Currently I have an automation project with few nested for each loop pattern as per following steps:

  1. Users will send request email to unattended robot with unknown number of excel files.
  2. Robot need to read all emails and excel attachments
  3. Robot process each row of the excel file.
  4. Each row of the excel will have another data table (search the first column of the data row in a portal, it generates a data table)
  5. Process each row of the newly generated data table)
  6. Consolidate everything and email back to user.

The nested for each loop:

For each email
For each attachment
For each row of attachment
For each row of newly generated data table

There are few ways to set the TransactionItem (mailMessage, Datatable, Datarow etc.), but at the expense of some ReFramework features for areas.

May I know if there is any suggestion on UiPath best practice to set the TransactionItem?

Thanks and Regards

Hi @GeorgeX ,
Are you using Orchestrator Queue?

Hi @GeorgeX,

My advise is to have a Dispatcher bot put your transaction item, in this case, the email and put it in a queue.

Your Performer bot can sieve through the email and then process the attachment accordingly.

This is just one approach. Another way is to have the Dispatcher bot go through each email save it in a folder and put the location of the file in a queue.

Let me know if that helps.

Kind regards,

@archit_gupta Yes

Hi @GeorgeX

  1. First Create a Dispature process that will create your queue item after getting your required data from excel.

  2. Then create another processPerformer which process all the action items from queue

Queue is the best practices than data table because its scalable also

You can run more than one performer for that single Queue by using parallel activity.

Hi @kennbalobalo and @Tapan_Behera1 , thank you for your inputs.

May I know if there is any difference between following two approaches?

  1. Using Dispatcher to put the email into orchestrator as a queue item and Performer get the queue item and process one by one in ReFramework. Finally, queueitem(MailMessage) as TransactionItem.

  2. Without using Orchestrator, get email in GetTransactionData and save in a list and process one by one in ReFramework. Finally, MailMessage as TransactionItem.

Look like they are same. both approach treat the MailMessage as TransactionItem. Does this not utilize the Retry Feature by ReFramework?

For example, the email contains 10 excel files, each excel contains 100 rows and each rows contains “another 100 rows data table”. When robot process till 10th excel file, 100th row of this excel, and 99th row of “another 100 rows data table”. There is a system exception occurring, robot will Retry from first row of first excel file.

The Retry feature will work on the TransactionItem. So if you need to retry on the rows/Excel files, then we need to make the excel rows/files be the TransactionItem instead.

The Dispatchere process only create the queue items from data table or any other sources where as the Performer Process only processes that queue items. The following are advantages

The main advantages is: You can run multiple perfomer parallely

Is it possible to get the excel rows(innermost of the nested for each loop) of the abovementioned scenario?