@alshahim04 Could you please share the identity trigger xml?
Also check both newly created identites: one you created using form vs one came via aggregation and see if needsCreateProcessing flag is being set to true or not?
Hello Alshahim. The Create event is evaluated during Identity Refresh with Process Events enabled. The identity created through the CreateIdentity form does not appear to receive the same new-identity trigger marker that aggregation creates, so the Create event is not detected.
For this use case, I would copy and customize LCM Create and Update, then add a step after the identity has been successfully created to launch your external-identity workflow. You can add a condition so it runs only for external identities.
I think this is more reliable than manually changing the internal triggerSnapshots map and also runs immediately without waiting for an Identity Refresh.
@punna0001 In case you don’t want to set the flags, you can actually call the joiner workflow from the workflow associated with the create form. this’ll bypass all joiner trigger conditions and will take of your joiner operations.
IdentityTrigger objects (Create/Delete/etc) are only evaluated by sailpoint.api.Identitizer when its checkTriggers flag is set to true. That flag is turned on automatically in two places:
Aggregation tasks and “Refresh Identity Cube” tasks —
i would suggest, Don’t try to make the LCM refresh step “inherit” trigger processing — it’s more reliable to explicitly invoke the Identitizer with triggers forced on, right after the identity is created.
Solution;
1. Create a BeanShell rule (Rule type: Workflow), e.g. Force Trigger Processing On Create:
import sailpoint.api.Identitizer;
import sailpoint.object.Identity;
import sailpoint.object.Source;
Identity newIdentity = context.getObjectByName(Identity.class, identityName);
if (newIdentity != null) {
Identitizer identitizer = new Identitizer(context);
identitizer.setProcessTriggers(true);
identitizer.setRefreshSource(Source.LCM, "Create Identity Form");
identitizer.refresh(newIdentity);
}
return null;
2. Add a Step in the C workflow, right after the identity is committed/provisioned (after the Provision step, before workflow completion):
<Step name="Force Trigger Evaluation" icon="task">
<Arg name="identityName" value="ref:identityName"/>
<Script>
<Source>
import sailpoint.object.Rule;
Rule rule = context.getObjectByName(Rule.class, "Force Trigger Processing On Create");
Map params = new HashMap();
params.put("identityName", identityName);
context.runRule(rule, params);
</Source>
</Script>
<Transition to="End"/>
</Step>
Hi @alshahim04 We have a similar use case that we implemented using the joiner trigger rule. Just add the logic that needs to return true when a new identity is created in the external system. It is working fine in our case, and I hope it will work for you, too. Try to enhance the joiner trigger rule.