2012-03-01 33 views
1

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

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

  1. 项目开始日期不得小于今天的日期
  2. 项目结束日期必须等于或刨丝器,然后项目开始日期

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

在我的共享配置,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> 

自定义表单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文件夹中,但是根本没有字段验证?对此有何建议?

问候, Aleksadnar

回答

2

在共享字段验证被实现为客户端JavaScript。因此,您的JavaScript文件进入您的Web应用程序的根目录(最好是低于该目录结构的目录结构),而不是在WEB-INF下。例如,您可能希望将其置于$ TOMCAT_HOME/webapps/share/extension/js下。您可能必须相应地调整您的依赖关系参考。

接下来,不要在Alfresco的命名空间中放置自定义代码。创建你自己的。你可以通过把这样的事情在你的JavaScript文件开始创建自己的命名空间:

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

您可能还需要压缩JavaScript。然后,打开共享调试。你这样做,通过放置在共享配置,custom.xml以下(这在$ TOMCAT_HOME/webapps中/股/ WEB-INF /类/户外/网络的扩展住):

<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并找出您的验证器无法正常工作的原因。

+1

正如杰夫说,现场验证被实现为客户端 - 方javascript。如果您想要一个更安全的解决方案,您可以为您的工作流任务实施onUpdateNode策略并在那里验证您的数据。 – 2012-03-02 07:09:51

0

您可以使用另一种方式来实现表单字段验证处理程序,直接使用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