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())