Workflow 自定义或更改工作流对话框在Alfresco出错时发出的默认消息框

Workflow 自定义或更改工作流对话框在Alfresco出错时发出的默认消息框,workflow,alfresco,alfresco-share,Workflow,Alfresco,Alfresco Share,目前,出现一个messagebox,其中包含失败的类名: 是否可以覆盖Alfresco中的默认行为?我们可以使用表单服务来显示不同的消息吗?我现在不看代码,但这看起来像一个常规的YUI对话框。所以它是由YUI发射的。所以这个YUI是客户端,可能在我的任务dashlet或我的任务页面中 此外,错误消息看起来像是来自失败后端消息/服务的status.message 您可能会找到该客户端javascript文件,找到启动任务的方法,并查看其“failureCallback”处理程序是什么。然后编辑f

目前,出现一个messagebox,其中包含失败的类名:


是否可以覆盖Alfresco中的默认行为?我们可以使用表单服务来显示不同的消息吗?

我现在不看代码,但这看起来像一个常规的YUI对话框。所以它是由YUI发射的。所以这个YUI是客户端,可能在我的任务dashlet或我的任务页面中

此外,错误消息看起来像是来自失败后端消息/服务的status.message


您可能会找到该客户端javascript文件,找到启动任务的方法,并查看其“failureCallback”处理程序是什么。然后编辑failureCallback方法,使其显示与response.status.message或其他内容不同的内容。可能类似于this.msg(“message.my自定义错误消息”)然后您可以自己定制。

除了zladuric答案之外

您可以使用failureCallback方法显示所需的消息。 但由于表单引擎使用了“启动工作流”、“任务编辑”、“任务详细信息”等工作流表单,因此很难在工作流表单的failureCallback方法中搜索新的工作流表单

例如,在“启动工作流”表单中,您可以通过在启动工作流.js中编写onBeforeFormRuntimeInit事件处理程序来添加我们自己的
成功回调
失败回调

 onBeforeFormRuntimeInit: function StartWorkflow_onBeforeFormRuntimeInit(layer, args)
          {
            var startWorkflowForm = Dom.get(this.generateId + "-form");
            Event.addListener(startWorkflowForm, "submit", this._submitInvoked, this);

            args[1].runtime.setAJAXSubmit(true,
             {
                successCallback:
                {
                   fn: this.onFormSubmitSuccess,
                   scope: this
                },
                failureCallback:
                {
                   fn: this.onFormSubmitFailure,
                   scope: this
                }
             });
          }

 onFormSubmitSuccess: function StartWorkflow_onFormSubmitSuccess(response)
      {
        this.navigateForward(true);
    // Show your success message or do something.
      }
onFormSubmitFailure: function StartWorkflow_onFormSubmitFailure(response)
      {
        var msgTitle = this.msg(this.options.failureMessageKey);
        var msgBody = this.msg(this.options.failureMessageKey);

        // example of showing processing response message
        // you can write your own logic
        if (response.json && response.json.message) 
        {
            if(response.json.message.indexOf("ConcurrencyFailureException") != -1) 
            {
                msgTitle = this.msg("message.concurrencyFailure");
                msgBody = this.msg("message.startedAgain");
            }
            else
                msgBody = response.json.message;
        }
        Alfresco.util.PopupManager.displayPrompt(
                {
                    title: msgTitle,
                    text: msgBody
                });
      }

因为
Alfresco.component.StartWorkflow
(在start workflow.js中)扩展了
Alfresco.component.ShareFormManager
(在Alfresco.js中)。您可以在start-workflow.js中重写onBeforeFormRuntimeInit事件。我希望这对您有所帮助。

修改YUI对话框脚本也可能会影响其他功能。 如果我们自定义启动工作流。js,它只会在启动工作流表单中实现

因此,作为通用解决方案,以下是建议

当alfresco呈现工作流表单时,它使用activiti-transition.js文件呈现转换按钮。基本上,这些按钮除了提交工作流表单之外,什么也不做

因此,最好的方法是定制这个activiti-transition.ftl和activiti-transition.js文件,以进行ajax调用并根据需要处理响应

我刚刚了解了如何显示前端错误的完整流程

  • activiti transition正在提交工作流表单
  • 它使用一个名为submitForm的函数(位于alfresco.js中),调用表单的提交事件
  • 在forms-runtime.js文件中有一个名为_submitInvoked(处理表单的提交事件)的函数,负责进行ajax调用并提交工作流表单。如果提交时出错,它将显示来自后端的错误

  • 谢谢你提供的有用的见解:-)谢谢,你给了我提示。再给我一个建议。您可能会发现哪个后端脚本发出此错误消息。(可能是工作流Web脚本之一)。然后编辑脚本以捕获错误并返回一些有意义的状态消息。你不必那样触摸前端。你可以选择自己的方式,这取决于你对什么更满意。