Update Transaction Item while In Progress

Hi Everyone,

I think it would be a useful feature for UiPath to have the ability for the robotic solutions to update transaction items while they’re in progress.

Specifically, I thought of updating the SpecificContent section, as during processing, we would be able to store the data back into the queue. So if the data-gathering process fails, it could pick up the process from where it failed and go from there. There’d be no need for double processing. Updating the Progress is just a semi-solution for that.

I tried to build an HTTP request for Orchestrator to do the same (PUT /odata/QueueItems({key})), but the response was: Only New, Failed and Abandoned queue items are editable.

Thank you for the consideration in advance.

Hi @Balint_Laszlo_Papp

Could you maybe share with us sample use cases that would become possible for you with such feature?

Hi @Balint_Laszlo_Papp,

We use the concept you are looking for in our REFramework performer. We achieve this by creating a state machine in the Process.xaml file and have used in production robots with great results.

This is possible with “Set Transaction Progress” activity, it will create a new key and value for each item in your queue when the item is processed by the performer.

@loginerror - Use case requested here is :
If a robot has finished 2 out of 3 steps in the Process but failed at the 3rd step, then we can update that particular item as for example, “Finished upto step 2”. Later when the item is retried, it will skip Step 1 and Step 2 as they were already performed in the previous run.

How to achieve this?


At transition from Stage 1 to Stage 2:
Here we do not provide any condition as it does take some time for the queue item to update the transaction progress. Simply, put robot on execution will poll orchestrator quite rapidly and if the transaction progress has not updated. You do not need to worry if you keep it empty.

At transition from Initialize to Stage 1 we know that the transaction progress will be a null string "" so we use that to check where *(which Stage/State) the intialize stage should transit to

At Transition from Initialize to either Stage 2 … Stage n

Finally the last stage transition to end the state machine

Here is a sample Process.xaml which you can use in the REFramewokr:
Process.xaml (22.3 KB)

You can deck it out as you like depending on your process.
Hope this helps you and others looking for a solution!

Hi @loginerror,

The use case @jeevith mentioned is similar what I would come up with. Although we have the option to update the Progress, we are not able to write back to the transaction item’s specific content the data what has been collected during previous processing.

I’ll give you an example: you’d like to collect data on specific loans’ counterparties (all debtors and all guarantors). You don’t know how many of them are in a specific deal, but you want to report them together, even though the underlying system is quite unstable. To save time upon system exception retries (it’s a lengthy process), you’d want to store the collected data to avoid dataloss and double-processing. This way, the process would recover to the stage where it has been disrupted and continue from there.

I’ve used queue items as temporary data stores many times with another tool, where this functionality is available, and I think it’d be really useful if UiPath would have it as well.

Hi @Balint_Laszlo_Papp,

I understand what you mean now. Thank you for clarifying the requirement.

In Blue Prism there is a possibility to attach new data to the item data after processing a certain stage.

I agree and will also vote for such a feature in UiPath

Current workaround:

Currently we save the data after performing a stage to a csv file and call it RuntimeData, but a way to directly update / create specific content key pairs would be a great feature.

May be there is already a way to do this but it’s not clear.

In the GUI (Orchestrator) an queue item data can be exported as json string and a new key value pair can be added in the exported json file. Further this file can be uploaded back to the queue item in question and the queue time will now have the new specific content key value pairs. So there must be a way to achieve the same programmatically during runtime.

How? Is the question and if not, please vote for this feature.

Fair point. I will invite @badita and @Remus_Rusanu who should know more about the logic behind the current design choices.

But right away, one thing about the

I think the way to approach it currently is to use the Data Service as an intermediary / complementary to the queues. This way you could have a unique point of reference combined with extra storage which you could then easily utilize to kick-start your process based on the completeness of each record.

indeed, it would be awesome to be able to communicate with the Orchestrator as you advance in the process.
You create an empty queue item before starting to process, and then update it as the process gathers information.

If the process fails, upon retry, you can continue exactly from the process failed. This way you do not lose time reprocessing what was initially processed.

Awesome idea, guys!

The below ability to set custom transaction progress could help in determining the transactions last status. Then using the Orchestrator API to get the transaction status would get you what you need. Have a similar need here and working on using these two solutions together.

Set Custom Transaction Process

API - get transaction history