Как заставить пользовательское действие 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).

Другие вопросы по тегам