Occasionally, I’ve wanted to invoke an Identity Manager Task from within a rule in XPRESS. Here is a rule that will do that:
<Rule name=”runTask”>
<RuleArgument name=’taskName’/>
<RuleArgument name=’taskVariables’/>
<RuleArgument name=’execMode’/>
<block>
<defvar name=’processView’>
<new class=’com.waveset.object.GenericObject’>
<ref>taskVariables</ref>
</new>
</defvar>
<invoke name=’setId’>
<ref>processView</ref>
<s>Process</s>
</invoke>
<invoke name=’put’>
<ref>processView</ref>
<s>task.process</s>
<ref>taskName</ref>
</invoke>
<invoke name=’put’>
<ref>processView</ref>
<s>task.taskName</s>
<ref>taskName</ref>
</invoke>
<cond>
<ref>execMode</ref>
<invoke name=’put’>
<ref>processView</ref>
<s>task.execMode</s>
<ref>execMode</ref>
</invoke>
</cond>
<invoke name=’checkinView’>
<rule name=’getCallerSession’/>
<ref>processView</ref>
<null/>
</invoke>
</block>
</Rule>
And here is a sample invocation:
<rule name=’runTask’>
<argument name=’taskName’ value=’myTask’/>
<argument name=’taskVariables’>
<map>
<s>taskArgument1</s>
<ref>myVariable</ref>
<s>taskArgument2</s>
<s>String Data</s>
</map>
</argument>
<argument name=’execMode’ value=’async’/>
</rule>
The value of execMode should be one of the following:
sync
Specifies synchronous or foreground execution
async
Specifies asynchronous or background execution
asyncImmediate
Specifies asynchronous with immediate thread launch