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

How to make custom Alfresco AMP action fail?

我已经为 Alfresco 存储库开发了自定义 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");                        
           }
    }

A​​lfresco认为动作执行成功。是的,我在 share-config-custom.xml 中定义了失败和成功消息。有什么方法可以管理这种情况下的操作吗?

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

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

要抛出的适当异常是 ActionServiceException(它是 RuntimeException 的 sub-class)。

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

我试过投掷 RuntimeExceptionActionServiceException 但我不知道为什么投掷 WebScriptException 有效。如果有人正在寻找答案,请在这里留下答案:

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