Starting a job chain from within a running job chain and handing over parameters programmatically can be effected with the following steps.
Version: This feature is only available in JobScheduler version 1.7.4 onwards.
Create a job CallJobChain
<job order="yes"> <params/> <script language="javax.script:ecmascript"><![CDATA[ function spooler_process() { var thisOrder = spooler_task.order(); var order = spooler.create_order(); var execute_jobchain = thisOrder.params().value("execute_jobchain"); order.id = thisOrder.id + "_next" ; order.params().merge(thisOrder.params); spooler.job_chain( execute_jobchain ).add_order( order ); return true; } ]]></script> <run_time/> </job>
Create a synchronization job with the name sync using the job wizard in JOE
<job title="Synchronize Job Chains" order="yes"> <description> <include file="jobs/JobSchedulerSynchronizeJobChains.xml"/> </description> <params/> <script language="java" java_class="sos.scheduler.job.JobSchedulerSynchronizeJobChains" java_class_path=""/> <run_time/> </job>
Create a job chain JobchainSampleChainNext with some nodes and add a node with a synchronization job
<job_chain> <job_chain_node state="100" job="job_sample_4" next_state="sync" error_state="error"/> <job_chain_node state="sync" job="Sync" next_state="success" error_state="error"/> <job_chain_node state="success"/> <job_chain_node state="error"/> </job_chain>
Create a job chain sampleNestedJobChain
One node is assigned to CallJobChain. This node sets the parameter execute_jobchain to the value JobchainSampleChainNext
. The synchronization job is the succesor of this node.
<job_chain> <job_chain_node state="100" job="job_sample_1" next_state="200" error_state="error"/> <job_chain_node state="200" job="job_sample_2" next_state="callNext" error_state="error"/> <job_chain_node state="callNext" job="CallJobChain" next_state="sync" error_state="error"/> <job_chain_node state="sync" job="Sync" next_state="300" error_state="error"/> <job_chain_node state="300" job="job_sample_3" next_state="success" error_state="error"/> <job_chain_node state="success"/> <job_chain_node state="error"/> </job_chain>