Invoking a Task via XPRESS in Sun’s Identity Manager 7.1

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