We have a requirement, as below could you please help with your thoughts, to achive it.
We have integration between WORKDAY and IDENTITYIQ, on daily bases will aggregate data from WORKDAY to IDENTITYIQ. We have mapped WORKDAY schema attribute company code to IDENTITY attribute company code. The ask is when the company code is changed from A to B, we need to trigger the attribute change event/workflow, and the workflow needs to be triggerd on specific/particular date, example it should trigger NOV/08/2025, but it should not trigger immediately.
you can configure an identity trigger type rule where you detect those case and lauch the workflow. Also, I think you must to stored on each identity the date that you want execute the wf or decide to execute it after a certain period after the change.
One way I can think of to do this would be to create a Workflow that creates a future-dated Request object that will launch another workflow to do whatever it is you need to do. I’ve seen code to create a request like that, but I don’t know if the steps to do that are well-documented. If they are, then it should be fine, but if not, then this might not be a good idea.
There is no “Workflow Scheduler”. However, you can manually create a Request object that launches a Workflow.
Here’s an UNTESTED function based on what we have. Please remember that this is:
Untested
Using poorly-documented or undocumented SailPoint APIs
Therefore, I would not recommend using it in a production environment without first consulting with SailPoint Expert Services or another source of official guidance.
import java.util.Date;
import java.util.Map;
import org.apache.commons.logging.Log;
import sailpoint.api.RequestManager;
import sailpoint.api.SailPointContext;
import sailpoint.object.Attributes;
import sailpoint.object.Identity;
import sailpoint.object.Request;
import sailpoint.object.RequestDefinition;
import sailpoint.request.WorkflowRequestExecutor;
import sailpoint.tools.ObjectNotFoundException;
import sailpoint.workflow.StandardWorkflowHandler;
/**
* Create and submit request to launch a Workflow in the future.
*
* @param context The SailPointContext to use
* @param log The Log to use
* @param whenToLaunch When to launch the Workflow
* @param requesterIdentity The Identity that will own the Request
* @param workflowName The name of the Workflow to launch
* @param workflowCaseName The name of the WorkflowCase to be created. This name should be unique.
* @param workflowArgs The arguments to pass to the Workflow.
*/
void createScheduledWorkflowRequest(SailPointContext context, Log log, Date whenToLaunch, Identity requesterIdentity, String workflowName, String workflowCaseName, Map workflowArgs) {
log.trace("Entered createScheduledWorkflowRequest");
Attributes requestArgs = new Attributes();
requestArgs.putAll(workflowArgs);
requestArgs.put(StandardWorkflowHandler.ARG_REQUEST_DEFINITION, WorkflowRequestExecutor.DEFINITION_NAME);
requestArgs.put(StandardWorkflowHandler.ARG_WORKFLOW, workflowName);
requestArgs.put(StandardWorkflowHandler.ARG_REQUEST_NAME, workflowCaseName);
RequestDefinition workflowRequestDefn = context.getObjectByName(RequestDefinition.class, "Workflow Request");
if (null == workflowRequestDefn) {
log.trace("RequestDefinition[name=Workflow Request] not found.");
throw new ObjectNotFoundException(RequestDefinition.class, "Workflow Request");
}
Request req = new Request();
req.setDefinition(workflowRequestDefn);
req.setEventDate(whenToLaunch);
req.setOwner(requesterIdentity);
req.setName(workflowCaseName);
req.setAttributes(workflowRequestDefn, requestArgs);
if (log.isTraceEnabled()) {
log.trace("Submitting Request for scheduled workflow:\n" + req.toXml());
}
RequestManager.addRequest(context, req);
}