Implementacja menadżera procesu

W celu utworzenia menadżera procesu, należy stworzyć klasę Groovy lub JAVA dziedziczącą po abstrakcyjnej klasie palio.modules.hetman.ProcessManager. Menadżer musi zapewnić własną implementację dwóch metod:

/**
 * Pobiera aktualny stan zgłoszenia/dokumentu
 * @param instanceId identyfikator zgłoszenia/dokumentu
 * @throws PalioException
 */
public abstract State getInstanceState(Object instanceId) throws PalioException;
 
/**
 * Zmienia stan zgłoszenia/dokumentu. Metoda ta jest wywoływana po pomyślnym wykonaniu obiektu przejścia/akcji.
 * @param instanceId identyfikator zgłoszenia/dokumentu
 * @param state nowy stan
 * @throws PalioException
 */
public abstract void changeInstanceState(Object instanceId, State state) throws PalioException;

 

Przykładowa implementacja może wyglądać w sposób następujący:

package hetman;
 
import palio.*;
import palio.modules.*;
import palio.modules.hetman.*;
 
public class SampleManager extends ProcessManager {
 
	private static final String GET_INSTANCE_STATE_SQL = "select NAME from H_STATES where ID=(select STATE_ID from H_ORDERS where ID=?)"
	private static final String CHANGE_INSTANCE_STATE_SQL = "update H_ORDERS set STATE_ID=(select ID from H_STATES where NAME=?) where ID=?"
 
	private static Sql sql = Groovy.module("sql")
 
	public SampleManager(Process process) {
		super(process)
	}
 
	public State getInstanceState(Object instanceId) throws PalioException {
		Groovy.module("log").debug(process.getId(), "getInstanceState: ${instanceId}")
		Object[] rslt = sql.readLine(GET_INSTANCE_STATE_SQL, [instanceId].toArray())
		return process.getState(rslt[0])
	}
 
	public void changeInstanceState(Object instanceId, State state) throws PalioException {
		Groovy.module("log").debug(process.getName(), "changeInstanceState: ${instanceId} -> ${state.getName()}")
		sql.write(CHANGE_INSTANCE_STATE_SQL, [state.getName(), instanceId].toArray())
	}
 
}

 

W ramach implementacji menadżera procesu istnieje możliwość zaimplementowania wspólnego warunku dla wszystkich przejść w procesie. Aby zaimplementować wspólny warunek należy w menadżerze procesu nadpisać poniższą metodę. Metoda ta jest wywoływana zawsze przed wykonaniem obiektu warunku.

/**
 * Metoda wykonywana jest zawsze przed sprawdzeniem warunków zaimplementowanych w obiekcie warunku.
 * Nadpisując tą metodę, we własnej implementacji menadżera procesu, możemy zaimplementować wspólne warunki dla wszystkich przejść. 
 * @param instanceId identyfikator zgłoszenia/dokumentu
 * @throws PalioException
 */
public Result checkCommonCondition(Object instanceId) throws PalioException