【问题标题】:Custom form field (date field) validation-handler自定义表单字段(日期字段)验证处理程序
【发布时间】:2012-03-01 13:36:58
【问题描述】:

我正在尝试为工作流表单上的一些自定义字段创建自定义验证处理程序。 A 有两个字段:项目开始日期和项目结束日期。

对于这两个字段,我需要两种类型的验证:

  1. 项目开始日期不能早于今天的日期
  2. 项目结束日期必须等于或大于项目开始日期

但是,我仍在开始创建自定义验证处理程序。首先,我只是为仅包含数字的文本字段尝试了一些简单的验证处理程序,但这不起作用。我做了以下事情:

在我的 share-config-custom.xml 我添加

<config>
  <forms>
    <dependencies>
     <js src="/custom-form-validation.js" />
    </dependencies>
  </forms>

并连接到我的领域

<field id="mcwm:shortProjectNumber" set="general" mandatory="true">
              <constraint-handlers>
                 <constraint type="MANDATORY" validation-handler="Alfresco.forms.validation.checkNumber" event="keyup" />
              </constraint-handlers>
           </field>

custom-form-validation.js 文件是

Alfresco.forms.validation.checkNumber = function checkNumber(field, args, event, form, silent, message) {
  var ok = (field.value=="") || field.value.match("^\\d{4}\\/\\d{4}$");

  var valid = ok != null && ok;

  if (!valid) {
     YAHOO.util.Dom.setStyle(field.id, "border", "2px solid red");     
  }
  else {
     YAHOO.util.Dom.setStyle(field.id, "border", "");
  }

  // Inform the user if invalid
  if (!valid && !silent && form)
  {
     var msg = "The number must match the pattern 1234/5678.";
     form.addError(form.getFieldLabel(field.id) + " " + msg, field);
  }  

  return valid; 
};

我将 custom-form-validation.js 文件放在我的 opt\tomcat\shared\classes\alfresco\web-extension 文件夹中,但根本没有字段验证?对此有何建议?

问候, 亚历山大

【问题讨论】:

    标签: workflow validation share alfresco


    【解决方案1】:

    Share 中的字段验证是作为客户端 JavaScript 实现的。因此,您的 JavaScript 文件位于 Web 应用程序的根目录中(最好是位于其下方的目录结构),而不是 WEB-INF 目录下。例如,您可能希望将其放在 $TOMCAT_HOME/webapps/share/extension/js 下。您可能需要相应地调整您的依赖项引用。

    接下来,不要将自定义代码放在 Alfresco 的命名空间中。创建你自己的。您可以通过在 JavaScript 文件的开头放置如下内容来创建自己的命名空间:

    if (typeof SomeCo == "undefined" || !SomeCo)
    {
       var SomeCo = {};
    }
    

    您可能还想缩小 JavaScript。然后,打开共享调试。您可以通过将以下内容放入 share-config-custom.xml(位于 $TOMCAT_HOME/webapps/share/WEB-INF/classes/alfresco/web-extension 下)中来做到这一点:

    <alfresco-config>
        <!-- Put Share Client in debug mode -->
        <config replace="true">
            <flags>
                <client-debug>false</client-debug>
                <client-debug-autologging>false</client-debug-autologging>
            </flags>
        </config>
    </alfresco-config>
    

    有了这些,您就可以使用浏览器的开发者控制台单步执行客户端 JavaScript 并找出验证器无法正常工作的原因。

    【讨论】:

    • 正如 Jeff 所说,字段验证是作为客户端 javascript 实现的。如果您想要一个更安全的解决方案,您可以为您的工作流任务实施 onUpdateNode 策略并在那里验证您的数据。
    【解决方案2】:

    您可以使用另一种方法来实现表单字段验证处理程序,直接使用 javascript。我的意思是,您可以添加一个监听器来控制何时提交表单,并添加一个条件来取消提交。因此,您可以在加载表单时使用这样的代码:

    //Add a listener to control when the form is submitted
    document.body.addEventListener("submit", function (event) {
    
         //If there are wrong values
         if(wrongValues()){
              //Cancel the event
              event.stopPropagation();
              event.preventDefault();
         }
    }, true);
    

    如果您想了解有关此解决方案的更多详细信息,可以访问此post

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 2015-01-15
      • 1970-01-01
      相关资源
      最近更新 更多