Tworzenie obiektu obsługi błędu

Obiekt błędu odpowiedzialny jest za obsługę błędów jakie mogą wystąpić podczas wykonywania procesu. 
Domyślnym kodem obiektu błędu jest <prefix>.error. Jeżeli chcemy użyć niestandardowego kodu obiektu błędu należy podać kod obiektu w definicji procesu (atrybut errorView).

Obiekt błędu wywoływany jest z następującymi argumentami:

Przykładowa treść obiektu obsługi błędu (hetman.error):

$#params(Long instanceId, java.lang.Throwable ex)
 
<html>
<head>
$html.contentMeta()
</head>
<body>
 
informacje o zgłoszeniu (nagłówek)<br>
 
$if($palio.instanceOf($@ex, "palio.modules.hetman.exceptions.ProcessException"), {
 
	Błąd procesu: $@ex.getMessage()<br>
 
	$if($palio.instanceOf($@ex, "palio.modules.hetman.exceptions.NoSuchTransitionException"), {
 
		$=(@noSuchTransEx, (palio.modules.hetman.exceptions.NoSuchTransitionException) $@ex)
		$=(@srcState, $@noSuchTransEx.getSource())
		$=(@destState, $@noSuchTransEx.getDestination())
 
		Stan źródłowy: $@srcState.getId()<br>
		Stan docelowy: $@destState.getId()<br>
	})
 
	$if($palio.instanceOf($@ex, "palio.modules.hetman.exceptions.InsufficientPrivilegesException"), {
		Niewystarczające uprawnienia
	})
 
}, {
	$@ex.getMessage()
})
 
</body>
</html>


Do obsługi wyjątków zalecane jest stosowanie języka Groovy. Przykład poniżej:

import palio.*
import palio.modules.hetman.*
 
StringBuilder buff = new StringBuilder()
 
Long instanceId = args[0]
Throwable ex  =  args[1]
 
switch (ex) {
case palio.modules.hetman.exceptions.ProcessException:
	buff.append("Wystąpił błąd procesu<br>")
 
	switch (ex) {
	case palio.modules.hetman.exceptions.NoSuchTransitionException:
		buff.append("Brak zdefiniowanego przejścia ze stanu ${ex.getSource().getId()} ")
		buff.append("do stanu ${ex.getDestination().getId()}")	
		break
	case palio.modules.hetman.exceptions.InsufficientPrivilegesException:
		buff.append("Niewystarczające uprawnienia<br>")
		Transition transition = ex.getTransition()
		if (ex.getUserId()) {
			String username = Groovy.module("user").userName(ex.getUserId())
			buff.append("Użytkownik: ${username}\n")	
		}
		if (transition != null) {
			buff.append("Przejście ze stanu ${transition.getSource().getId()} ")
			buff.append("do stanu ${transition.getDestination().getId()}")
		}
		break
	}
 
	break	
default:
	buff.append(ex.getMessage())	
}
 
Groovy.object("hetman.displayError", [instanceId, buff.toString()].toArray())