/** * Descripción de Método * * @param AD_Workflow_ID * @return */ private boolean startWorkflow(int AD_Workflow_ID) { log.fine(AD_Workflow_ID + " - " + m_pi); boolean started = false; if (DB.isRemoteProcess() && !m_pi.isAlwaysInClient()) { Server server = CConnection.get().getServer(); try { if (server != null) { // See ServerBean m_pi = server.workflow(Env.getCtx(), m_pi, AD_Workflow_ID); log.finest("server => " + m_pi); started = true; } } catch (RemoteException ex) { log.log(Level.SEVERE, "AppsServer error", ex); started = false; } } // Run locally if (!started) { MWorkflow wf = MWorkflow.get(Env.getCtx(), AD_Workflow_ID); MWFProcess wfProcess = wf.startWait(m_pi); // may return null started = wfProcess != null; } return started; } // startWorkflow
/** * Descripción de Método * * @return */ private boolean startProcess() { log.fine(m_pi.toString()); // Inicializar datos del proceso para documentos e impresiones jasper en // el process info initilizeProcessInfoAditionals(); boolean started = false; if (DB.isRemoteProcess() && !m_pi.isAlwaysInClient()) { Server server = CConnection.get().getServer(); try { if (server != null) { // See ServerBean m_pi = server.process(Env.getCtx(), 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 (RemoteException 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) { ProcessCall myObject = null; boolean error = false; // Manejo de transacciones. // Si se invocó el proceso con una transacción creada, entonces no se administra // esta transacción internamente derivando la ejecución de commit o rollback al // cliente que invoca este proceso. // Si no se asignó una transacción externa, se crea una transacción interna y se // administra en este método a fin de que la ejecución de un proceso sea transaccional // (en caso de que las subclases de SvrProcess utilicen el get_TrxName() ) Trx trx = null; boolean ownedTrx = (m_trx == null); if (m_trx == null) { trx = Trx.get(Trx.createTrxName("ProcessCtl.startProcess"), true); trx.start(); } else trx = m_trx; 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 { error = !myObject.startProcess(Env.getCtx(), m_pi, trx); } // Solo se hace commit o rollback de la transacción si es una trx // controlada localmente. if (ownedTrx && trx != null) { if (error) trx.rollback(); else trx.commit(); trx.close(); } } catch (Exception e) { if (trx != null) { trx.rollback(); 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