I try to create a simple Job Chain in BPA but it falis when I try to set the step parameters
{
String pPartition = "GLOBAL";
String jdName = "MyJobChainWithPreconditionABAP";
String stepName = "Step1"; try
{
//Get or create a partition (here we create one if it does not already exist)
Partition partition = jcsSession.getPartitionByName(pPartition);
if (partition == null)
{
partition = jcsSession.createPartition();
partition.setName(pPartition);
}
jcsOut.println("- Use partition " + pPartition); //Check if Job Definition of type JOB_CHAIN (chain definition) already exists
jcsOut.println("- Check if Job Definition " + jdName + " exists!");
JobDefinition jDefinition = jcsSession.getJobDefinitionByName(partition, jdName);
if (jDefinition == null)
{
//Create JobDefinition of type JOB_CHAIN (chain definition)
jcsOut.println("- JobDefinition " + jdName + " does not exists and will be created!");
jDefinition = jcsSession.createJobDefinition();
jDefinition.setName(jdName);
jDefinition.setJobDefinitionType(jcsSession.getJobDefinitionTypeByName(JobDefinitionType.JOB_CHAIN));
jDefinition.setPartition(partition); //Create JobChain object with one step and one job chain call
jcsOut.println("- Create JobChain object with one step and one job chain call");
JobChain jchain = jcsSession.createJobChain();
jchain.setJobDefinition(jDefinition); //Create Step
jcsOut.println("- Create Step");
JobChainStep jcstep = jchain.createJobChainStep();
jcstep.setSequenceNumber(Long.valueOf(0));
jcstep.setName(stepName); //Job chain call
jcsOut.println("- Create job chain");
JobChainCall jccall = jcstep.createJobChainCall(); // Set Step parameter
jcsOut.println("- Set Step parameter for SAP_AbapRun");
JobDefinition jDefinitionStep = jcsSession.getJobDefinitionByName("SAP_AbapRun");
Job process = jDefinitionStep.prepare();
process.getJobParameterByName("SAP_SYSTEMS").setInValueString("XXX");
process.getJobParameterByName("CLIENT").setInValueString("010");
process.getJobParameterByName("ABAP_PROGRAM_NAME").setInValueString("Z_TST_IDLE");
process.getJobParameterByName("JOBNAME").setInValueString("Step1");
process.getJobParameterByName("LANGUAGE").setInValueString("EN");
Queue queue = jcsSession.getQueueByName(partition, "XXX_Queue");
jcsOut.println("- Queue: " + queue);
process.setQueue(queue);
// Assign Parameters
jcsOut.println("- Assign Parameters");
jccall.setJobDefinition(jDefinitionStep);
jccall.setSequenceNumber(Long.valueOf(0)); }
else
{
jcsOut.println("JobDefinition " + jdName + " exists!");
jcsOut.println("You can change the JobDefinition name on the line:\n String jdName = \"MyJobChainWithPrecondition\";");
}
// Commit Changes
jcsOut.println("- Commit Changes");
jcsSession.persist(); // Script successfully finished
jcsOut.println("- Script successfully finished");
}
catch (Exception e)
{
jcsErr.println(e.getMessage());
throw e;
}
}
Hello,
Somewhere at the place of adding the definition to the call, you take the wrong path. Something more like this:
{ String pPartition = "GLOBAL"; String jdName = "MyJobChainWithPreconditionABAP"; String stepName = "Step1"; try { //Get or create a partition (here we create one if it does not already exist) Partition partition = jcsSession.getPartitionByName(pPartition); if (partition == null) { partition = jcsSession.createPartition(); partition.setName(pPartition); } jcsOut.println("- Use partition " + pPartition); //Check if Job Definition of type JOB_CHAIN (chain definition) already exists jcsOut.println("- Check if Job Definition " + jdName + " exists!"); JobDefinition jDefinition = jcsSession.getJobDefinitionByName(partition, jdName); if (jDefinition == null) { //Create JobDefinition of type JOB_CHAIN (chain definition) jcsOut.println("- JobDefinition " + jdName + " does not exists and will be created!"); jDefinition = jcsSession.createJobDefinition(); jDefinition.setName(jdName); jDefinition.setJobDefinitionType(jcsSession.getJobDefinitionTypeByName(JobDefinitionType.JOB_CHAIN)); jDefinition.setPartition(partition); //Create JobChain object with one step and one job chain call jcsOut.println("- Create JobChain object with one step and one job chain call"); JobChain jchain = jcsSession.createJobChain(); jchain.setJobDefinition(jDefinition); //Create Step jcsOut.println("- Create Step"); JobChainStep jcstep = jchain.createJobChainStep(); jcstep.setSequenceNumber(Long.valueOf(0)); jcstep.setName(stepName); //Job chain call jcsOut.println("- Create job chain"); JobChainCall jccall = jcstep.createJobChainCall(); // Set Step parameter jcsOut.println("- Set Step parameter for SAP_AbapRun"); JobDefinition jDefinitionStep = jcsSession.getJobDefinitionByName("SAP_AbapRun"); jccall.setJobDefinition(jDefinitionStep); jccall.setSequenceNumber(Long.valueOf(0)); JobChainCallInExpressionParameter jcciep = jccall.createJobChainCallInExpressionParameter(); jcciep.setLocalJobDefinitionParameter(jDefinitionStep.getJobDefinitionParameterByName("SAP_SYSTEMS"); jcciep.setExpression("XXX"); jcciep = jccall.createJobChainCallInExpressionParameter(); jcciep.setLocalJobDefinitionParameter(jDefinitionStep.getJobDefinitionParameterByName("CLIENT"); jcciep.setExpression("010"); jcciep = jccall.createJobChainCallInExpressionParameter(); jcciep.setLocalJobDefinitionParameter(jDefinitionStep.getJobDefinitionParameterByName("ABAP_PROGRAM_NAME"); jcciep.setExpression("Z_TST_IDLE"); jcciep = jccall.createJobChainCallInExpressionParameter(); jcciep.setLocalJobDefinitionParameter(jDefinitionStep.getJobDefinitionParameterByName("JOBNAME"); jcciep.setExpression("Step1"); jcciep = jccall.createJobChainCallInExpressionParameter(); jcciep.setLocalJobDefinitionParameter(jDefinitionStep.getJobDefinitionParameterByName("LANGUAGE"); jcciep.setExpression("EN"); Queue queue = jcsSession.getQueueByName(partition, "XXX_Queue"); jcsOut.println("- Queue: " + queue); JobChainCallSchedulingParameter jccsp = jccall.createJobChainCallSchedulingParameter(); jccsp.setName(SchedulingParameterName.Queue); jccsp.setExpression(queue.getBusinessKey().getPath().toString()); } else { jcsOut.println("JobDefinition " + jdName + " exists!"); jcsOut.println("You can change the JobDefinition name on the line:\n String jdName = \"MyJobChainWithPrecondition\";"); } // Commit Changes jcsOut.println("- Commit Changes"); jcsSession.persist(); // Script successfully finished jcsOut.println("- Script successfully finished"); } catch (Exception e) { jcsErr.println(e.getMessage()); throw e; } }
Regards Gerben
Hello Gerben
Many thanks for your really fast response and help. I was able to create the Job Chain sucessfully with your code example.
I fixed just a few syntax errors and jcciep.createJobChainCallSchedulingParameter to jccall.createJobChainCallSchedulingParameter().
This is the corrected and working code:
{
String pPartition = "GLOBAL";
String jdName = "MyJobChainWithPreconditionABAP";
String stepName = "Step1";
try
{
//Get or create a partition (here we create one if it does not already exist)
Partition partition = jcsSession.getPartitionByName(pPartition);
if (partition == null)
{
partition = jcsSession.createPartition();
partition.setName(pPartition);
}
jcsOut.println("- Use partition " + pPartition); //Check if Job Definition of type JOB_CHAIN (chain definition) already exists
jcsOut.println("- Check if Job Definition " + jdName + " exists!");
JobDefinition jDefinition = jcsSession.getJobDefinitionByName(partition, jdName);
if (jDefinition == null)
{
//Create JobDefinition of type JOB_CHAIN (chain definition)
jcsOut.println("- JobDefinition " + jdName + " does not exists and will be created!");
jDefinition = jcsSession.createJobDefinition();
jDefinition.setName(jdName);
jDefinition.setJobDefinitionType(jcsSession.getJobDefinitionTypeByName(JobDefinitionType.JOB_CHAIN));
jDefinition.setPartition(partition); //Create JobChain object with one step and one job chain call
jcsOut.println("- Create JobChain object with one step and one job chain call");
JobChain jchain = jcsSession.createJobChain();
jchain.setJobDefinition(jDefinition); //Create Step
jcsOut.println("- Create Step");
JobChainStep jcstep = jchain.createJobChainStep();
jcstep.setSequenceNumber(Long.valueOf(0));
jcstep.setName(stepName); //Job chain call
jcsOut.println("- Create job chain");
JobChainCall jccall = jcstep.createJobChainCall(); // Set Step parameter
jcsOut.println("- Set Step parameter for SAP_AbapRun");
JobDefinition jDefinitionStep = jcsSession.getJobDefinitionByName("SAP_AbapRun");
jccall.setJobDefinition(jDefinitionStep);
jccall.setSequenceNumber(Long.valueOf(0));
JobChainCallInExpressionParameter jcciep = jccall.createJobChainCallInExpressionParameter();
jcciep.setLocalJobDefinitionParameter(jDefinitionStep.getJobDefinitionParameterByName("SAP_SYSTEMS"));
jcciep.setExpression("XXX");
jcciep = jccall.createJobChainCallInExpressionParameter();
jcciep.setLocalJobDefinitionParameter(jDefinitionStep.getJobDefinitionParameterByName("CLIENT"));
jcciep.setExpression("010");
jcciep = jccall.createJobChainCallInExpressionParameter();
jcciep.setLocalJobDefinitionParameter(jDefinitionStep.getJobDefinitionParameterByName("ABAP_PROGRAM_NAME"));
jcciep.setExpression("Z_TST_IDLE");
jcciep = jccall.createJobChainCallInExpressionParameter();
jcciep.setLocalJobDefinitionParameter(jDefinitionStep.getJobDefinitionParameterByName("JOBNAME"));
jcciep.setExpression("Step1");
jcciep = jccall.createJobChainCallInExpressionParameter();
jcciep.setLocalJobDefinitionParameter(jDefinitionStep.getJobDefinitionParameterByName("LANGUAGE"));
jcciep.setExpression("EN");
Queue queue = jcsSession.getQueueByName(partition, "XXX_Queue");
jcsOut.println("- Queue: " + queue);
JobChainCallSchedulingParameter jccsp = jccall.createJobChainCallSchedulingParameter();
//JobChainCallSchedulingParameter jccsp = jcciep.createJobChainCallSchedulingParameter();
jccsp.setName(SchedulingParameterName.Queue);
jccsp.setExpression(queue.getBusinessKey().getPath().toString());
}
else
{
jcsOut.println("JobDefinition " + jdName + " exists!");
jcsOut.println("You can change the JobDefinition name on the line:\n String jdName = \"MyJobChainWithPrecondition\";");
}
// Commit Changes
jcsOut.println("- Commit Changes");
jcsSession.persist(); // Script successfully finished
jcsOut.println("- Script successfully finished");
}
catch (Exception e)
{
jcsErr.println(e.getMessage());
throw e;
}
}
Add a comment