4

目前,出现一个带有失败类名称的消息框:

在此处输入图像描述

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

4

3 回答 3

5

除了 zladuric 的回答,

您可以使用failureCallback方法来显示您想要的消息。但是由于使用了“开始工作流”、“任务编辑”、“任务详情”等工作流表单,所以很难在工作流表单的failureCallback 方法中搜索新的方法。

例如,在“ Start Workflow ”表单中,您可以添加我们自己的successCallBack,并像这样在start-workflow.jsfailureCallBack中编写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 事件。我希望这对你有所帮助。

于 2013-01-25T03:49:17.727 回答
4

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

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

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

于 2013-01-23T22:31:56.533 回答
0

修改 YUI 对话框脚本也可能会影响其他功能。如果我们自定义 start-workflow。js,它只会以启动工作流的形式实现。

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

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

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

我刚刚查看了如何显示此前端错误的完整流程。

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