Как заставить пользовательское действие Alfresco AMP завершиться неудачно?
Я разработал собственное действие AMP для репозитория Alfresco. Я хочу, чтобы Alfresco понял, что действие не выполнено, если какое-либо условие не выполнено, и в результате отобразит сообщение об ошибке во всплывающем окне.
Я написал следующее в executeImpl
метод, но действие не терпит неудачу, если условие не выполняется.
@Override
protected void executeImpl(Action action, NodeRef actionedUponNodeRef) {
if (condition) {
// Do something
} else {
((ActionImpl) action).setExecutionEndDate(new Date());
((ActionImpl) action).setExecutionStatus(ActionStatus.Failed);
((ActionImpl) action).setExecutionFailureMessage("Action is failed");
throw new RuntimeException("Action is failed");
}
}
Alfresco считает, что акция выполнена успешно. Да, я определил сообщения об ошибках и успехах в share-config-custom.xml
, Есть ли способ управлять действием в этом контексте?
2 ответа
Я пробовал бросать RuntimeException
, ActionServiceException
но я не знаю, зачем бросать WebScriptException
работает. Оставив здесь ответ, если его кто-то ищет:
@Override
protected void executeImpl(Action action, NodeRef actionedUponNodeRef) {
if (condition) {
// Do something
} else {
throw new WebScriptException("Action is failed");
}
}
Вы не должны (должны) устанавливать свойства класса ActionImpl самостоятельно - это детали реализации, оставленные на усмотрение ActionService.
Кроме того, вы не должны бросать базовое RuntimeException. Во многих случаях Alfresco никоим образом не обрабатывает базовое RuntimeException и просто распространяет его по цепочке вызовов. Затем это зависит от того, какой API-интерфейс HTTP / веб-сценария вызывается вами, если это фактически вызывает сообщение об ошибке "Поделиться".
Соответствующее исключение для выброса является ActionServiceException (который является подклассом RuntimeException).
Чтобы сообщение об ошибке отображалось в папке "Общий доступ", вам также необходимо настроить действие библиотеки документов (которое, как я полагаю, вы используете) на включение параметра "faultMessage" (для статического сообщения, в котором вы можете использовать ключ сообщения I18n). или параметр "сбой" (для динамической обработки, где вы должны предоставить функцию обратного вызова в конфигурации XML).