How to launch concurrent workflows on same identity with gap of 10 mins between each

Which IIQ version are you inquiring about? 8.4p3

Share all details about your problem, including any error messages you may have received.

In our environment, ServiceNow calls IIQ SCIM API to launch concurrent workflows on the same Identity. We’re using Request object to schedule these workflows, but when Provisioning step is executed some instances of the workflow are throwing Timeout waiting for lock on the Identity.

We’re looking for a solution to launch concurrent workflows on the same Identity with a gap of 10 minutes between them. I tried to find the pending Request object based on the name but the below filter is throws error An unexpected error occurred: sailpoint.tools.GeneralException: The application script threw an exception: sailpoint.tools.GeneralException: Cannot invoke \“org.hibernate.hql.internal.ast.tree.FromElement.setAllPropertyFetch(boolean)\” because \“fromElement\” is null BSF info: script at line: 0 column: columnNo"

QueryOptions qoReqs = new QueryOptions();
qoReqs.addFilter(Filter.le(“created”,today));
qoReqs.addFilter(Filter.like(“name”,“TASK”,Filter.MatchMode.START));
qoReqs.addFilter(Filter.contains(“name”,identityName));
int requestsCnt = context.countObjects(Request.class,qoReqs);

How to query Request object like below using filters?

<?xml version='1.0' encoding='UTF-8'?>

 - Filter.contains() is not supported for Hibernate-backed objects like Request. Use Filter.like() instead of “Filter.conatins()



QueryOptions qoReqs = new QueryOptions();

qoReqs.addFilter(Filter.le(“created”, today));
qoReqs.addFilter(Filter.like(“name”, “TASK%”, Filter.MatchMode.START));
qoReqs.addFilter(Filter.like(“name”, “%” + identityName + “%”));

int requestsCnt = context.countObjects(Request.class, qoReqs);

@gmmattamg Instead of relying only on ServiceNow timing:

:small_blue_diamond: Pattern that works well in IIQ

  • Before provisioning:

    • Check for running WorkflowCase for same identity

    • If found → Thread.sleep(600000) OR requeue

  • Or use:

    • Sequential requests per identity

    • Queue + scheduler task

    • RequestDefinition with maxConcurrency = 1 (identity-based logic)

Hi @gmmattamg ,

Please refer below link.

@gmmattamg I would refer to this approach

use the wait=“” attribute

@gmmattamg has the above solution worked?

Hi Manoj, are you explicitly locking the identity in your workflow? If so, then you could just specify a longer wait timeout than the default.