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