Calling a process from code

From ADempiere
Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.

Sometimes it might be convenient to call an Adempiere process from your code. This is how you do it:


// Create instance parameters. I e the parameters you want to send to the process.
ProcessInfoParameter pi1 = new ProcessInfoParameter("AD_Client_ID", clientId,"","","");
ProcessInfoParameter pi2 = new ProcessInfoParameter("AD_Org_ID", orgId, "","","");

// Create a process info instance. This is a composite class containing the parameters.
ProcessInfo pi = new ProcessInfo("", 0,0,0);
pi.setParameter(new ProcessInfoParameter[] {pi1, pi2, pi3});

// Lookup process in the AD, in this case by value
MProcess pr = new Query(Env.getCtx(), MProcess.Table_Name, "value=?", null)
                        .setParameters(new Object[]{"MyProcess"})
                        .first();
if (pr==null) {
      log.warn("Process " + pr.getName() + " does not exist. ");
      return false;
}

// Create an instance of the actual process class.
MyProcess process = new MyProcess();

// Create process instance (mainly for logging/sync purpose)
MPInstance mpi = new MPInstance(Env.getCtx(), 0, null);
mpi.setAD_Process_ID(pr.get_ID()); 
mpi.setRecord_ID(0);
mpi.save();

// Connect the process to the process instance.
pi.setAD_PInstance_ID(mpi.get_ID());

log.info("Starting process " + pr.getName());
boolean result = process.startProcess(ctx, pi, null);