cancel
Showing results for 
Search instead for 
Did you mean: 

Creating a Job Chain in BPA via scripting fails

0 Kudos

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;
}
}

Accepted Solutions (1)

Accepted Solutions (1)

gmblom
Active Contributor
0 Kudos

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

Answers (1)

Answers (1)

0 Kudos

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;
}
}