sure we can, however that will extra effort to put just to check if the item is already worked on. rather I would prefer to check it from my workitem for “Pending, Completed, Exception” before even putting them in workitem.
Normally in other RPA tools we have option to make a particular column of queue item as key and then check each queue item using that key if they are already in queue while adding them into the queue.
This is hard problem and I think there is no easy general solution there, but it is case by case. Why? Consider these observations:
system is distributed (multiple sources for work-items, multiple possibly parallel robots doing work)
there would be “millions” of work-items to check, if same kind of work-item is already “in the system, on some state” (brute force checks would become slower and slower)
of course, if you can come up with “primary unique key”, finding by that key would be kind of fast (and this would be case-by-case primary unique key; your unique key will differ my requirements unique key)
this should be “transactional”, so once someone has created “unique primary key” into somewhere, nobody else should be able to do that, and then also guaranteed that that original party has completeley created that key and surrounding work-item
Now some ideas for you to try to resolve it for your use-case:
use (local) transactional database and transactions there to manage what your insert into work-items
if you are using producer-consumer way of working, let your producer do that filtering (so don’t worry about putting multiple items in, but make your producer detect those “that are same” and drop all those duplicates)
to get “unique identity” for your work-items that do not have “visible” unique identity, you could use content based hashing to produce unique key (just remember to unify your work-item, so that same logical content would produce same concrete hash)
As @raivo and @jippo mentioned, we don’t currently have any built-in ways to check whether an item has been processed or not, leaving this responsibility to the developer.
However, this is something that can be achieved quite easily using our API.
More specifically, the “List process run work items” that allows you to search for a specific value in the payload of your work item.
So it could be something like:
{ "your_specific_value": "ABCD123" }
And via the API, this would look as follows:
curl --request GET "https://api.eu1.robocorp.dev/process-v1/workspaces/WORKSPACE_ID/processes/PROCESS_ID/work-items?includeData=true&size=100&search=ABCD123&sortBy=stateTs&sortOrder=desc" --header "Authorization: RC-WSKEY YOUR_API_KEY"
You can then look at the state of the work item (if it exists) and act accordingly.
If I got your request wrong, feel free to correct me and maybe provide additional details so that we can assist you in devising the best way to achieve what you’re after!