public static int procesProduction( MProduction production, Timestamp movementDate, boolean mustBeStocked) { ProcessInfo pi = MWorkflow.runDocumentActionWorkflow(production, "CO"); if (pi.isError()) { throw new RuntimeException(pi.getSummary()); } else { if (production.isUseProductionPlan()) { Query planQuery = new Query( Env.getCtx(), I_M_ProductionPlan.Table_Name, "M_ProductionPlan.M_Production_ID=?", production.get_TrxName()); List<MProductionPlan> plans = planQuery.setParameters(production.getM_Production_ID()).list(); int linesCount = 0; for (MProductionPlan plan : plans) { MProductionLine[] lines = plan.getLines(); linesCount += lines.length; } return linesCount; } else { return production.getLines().length; } } }
/** * ************************************************************************ Start Java Process * Class. instanciate the class implementing the interface ProcessCall. The class can be a * Server/Client class (when in Package org compiere.process or org.compiere.model) or a client * only class (e.g. in org.compiere.report) * * @return true if success */ private boolean startProcess() { log.fine(m_pi.toString()); boolean started = false; if (DB.isRemoteProcess()) { Server server = CConnection.get().getServer(); try { if (server != null) { // See ServerBean m_pi = server.process(m_wscctx, m_pi); log.finest("server => " + m_pi); started = true; } } catch (UndeclaredThrowableException ex) { Throwable cause = ex.getCause(); if (cause != null) { if (cause instanceof InvalidClassException) log.log( Level.SEVERE, "Version Server <> Client: " + cause.toString() + " - " + m_pi, ex); else log.log(Level.SEVERE, "AppsServer error(1b): " + cause.toString() + " - " + m_pi, ex); } else log.log(Level.SEVERE, " AppsServer error(1) - " + m_pi, ex); started = false; } catch (Exception ex) { Throwable cause = ex.getCause(); if (cause == null) cause = ex; log.log(Level.SEVERE, "AppsServer error - " + m_pi, cause); started = false; } } // Run locally if (!started && !m_IsServerProcess) { ProcessCall myObject = null; try { Class myClass = Class.forName(m_pi.getClassName()); myObject = (ProcessCall) myClass.newInstance(); if (myObject == null) m_pi.setSummary("No Instance for " + m_pi.getClassName(), true); else myObject.startProcess(m_wscctx, m_pi, m_trx); if (m_trx != null) { m_trx.commit(); m_trx.close(); } } catch (Exception e) { if (m_trx != null) { m_trx.rollback(); m_trx.close(); } m_pi.setSummary("Error starting Class " + m_pi.getClassName(), true); log.log(Level.SEVERE, m_pi.getClassName(), e); } } return !m_pi.isError(); } // startProcess
// add main method, preparing for nightly build public static void main(String[] args) { Adempiere.startupEnvironment(false); CLogMgt.setLevel(Level.FINE); s_log.info("Synchronize Terminology"); s_log.info("-----------------------"); ProcessInfo pi = new ProcessInfo("Synchronize Terminology", 172); pi.setAD_Client_ID(0); pi.setAD_User_ID(100); SynchronizeTerminology sc = new SynchronizeTerminology(); sc.startProcess(Env.getCtx(), pi, null); System.out.println( "Process=" + pi.getTitle() + " Error=" + pi.isError() + " Summary=" + pi.getSummary()); }
/** * Main test * * @param args * @throws Exception */ public static void main(String[] args) { Adempiere.startupEnvironment(true); CLogMgt.setLevel(Level.INFO); Properties ctx = Env.getCtx(); int AD_Process_ID = 53156; // HARDCODED MPInstance pinstance = new MPInstance(ctx, AD_Process_ID, -1); pinstance.saveEx(); ProcessInfo pi = new ProcessInfo("", AD_Process_ID, 0, 0); pi.setAD_Client_ID(Env.getAD_Client_ID(ctx)); pi.setAD_User_ID(Env.getAD_User_ID(ctx)); pi.setAD_PInstance_ID(pinstance.getAD_PInstance_ID()); // EnableNativeSequence proc = new EnableNativeSequence(); proc.startProcess(ctx, pi, null); if (pi.isError()) { throw new AdempiereException(pi.getSummary()); } }