如何使自定义Alfresco AMP操作失败?

时间:2016-01-04 09:47:06

标签: java action alfresco alfresco-module-package

我为Alfresco repo开发了自定义AMP动作。我希望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 个答案:

答案 0 :(得分:4)

您不应该(需要)自己设置ActionImpl类的属性 - 这些是ActionService要处理的实现细节。

此外,您不应该抛出基本的RuntimeException。在许多情况下,Alfresco不会以任何方式处理基本的RuntimeException,只是将其传播到调用链中。然后,它依赖于您调用的HTTP / Web脚本API,如果它实际上触发了"失败"消息分享。

throw的相应异常是ActionServiceException(它是RuntimeException的子类)。

要在Share中显示错误消息,您还需要配置文档库操作(我假设您正在使用)以包含" failureMessage"参数(对于可以使用I18n消息密钥的静态消息)或"失败"参数(用于动态处理,您必须在XML配置中提供回调函数)。

答案 1 :(得分:1)

我曾尝试投掷RuntimeExceptionActionServiceException,但我不知道投掷WebScriptException的原因。如果有人正在寻找答案,请留下答案:

@Override
protected void executeImpl(Action action, NodeRef actionedUponNodeRef) {
    if (condition) {
    // Do something
    } else {
           throw new WebScriptException("Action is failed");                        
           }
    }