我为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
中定义了失败和成功消息。有没有办法在这种情况下管理行动?
答案 0 :(得分:4)
您不应该(需要)自己设置ActionImpl类的属性 - 这些是ActionService要处理的实现细节。
此外,您不应该抛出基本的RuntimeException。在许多情况下,Alfresco不会以任何方式处理基本的RuntimeException,只是将其传播到调用链中。然后,它依赖于您调用的HTTP / Web脚本API,如果它实际上触发了"失败"消息分享。
throw的相应异常是ActionServiceException(它是RuntimeException的子类)。
要在Share中显示错误消息,您还需要配置文档库操作(我假设您正在使用)以包含" failureMessage"参数(对于可以使用I18n消息密钥的静态消息)或"失败"参数(用于动态处理,您必须在XML配置中提供回调函数)。
答案 1 :(得分:1)
我曾尝试投掷RuntimeException
,ActionServiceException
,但我不知道投掷WebScriptException
的原因。如果有人正在寻找答案,请留下答案:
@Override
protected void executeImpl(Action action, NodeRef actionedUponNodeRef) {
if (condition) {
// Do something
} else {
throw new WebScriptException("Action is failed");
}
}