自定义或更改工作流对话框发出的有关Alfresco错误的默认消息框

时间:2013-01-22 22:27:55

标签: workflow alfresco alfresco-share

目前,系统会显示一个消息框,其中包含失败的类名:

enter image description here

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

3 个答案:

答案 0 :(得分:5)

除了zladuric答案,

您可以使用 failureCallback 方法向您显示所需内容。 但是很难在新的工作流表单中搜索failureCallback方法,因为工作流表单如“开始工作流”,“任务编辑”,“任务详细信息”都用于引擎。

例如,在“开始工作流程”表单中,您可以通过在 onBeforeFormRuntimeInit 事件处理程序中添加我们自己的successCallBackfailureCallBack strong> start-workflow.js 就像这样。

 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事件。我希望你帮助你。

答案 1 :(得分:4)

我现在不是在查看代码,但这看起来像是一个常规的YUI对话框。所以它被YUI解雇了。所以这个YUI是客户端,可能在My-tasks dashlet或我的任务页面中。

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

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

答案 2 :(得分:0)

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

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

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

所以最好的方法是,自定义这个activiti-transition.ftl和activiti-transition.js文件,进行ajax调用并按我们的意愿处理响应。

我刚刚看了一下这个前端错误的显示方式。

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