2012-03-01 3 views
1

Я пытаюсь создать свой собственный обработчик проверки для некоторых настраиваемых полей в форме рабочего процесса. A имеют два поля: дату начала проекта и дату окончания проекта.Пользовательское поле формы (поле даты) validation-handler

Для этих двух мест мне нужно два типа проверки:

  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-valid-validation.js в папку opt \ tomcat \ shared \ classes \ alfresco \ web-extension, но проверки поля вообще нет? Любое предложение по этому поводу?

С уважением, Aleksadnar

ответ

2

поле проверки Поделитесь реализован как на стороне клиента JavaScript. Таким образом, ваш файл JavaScript находится в корне вашего веб-приложения (желательно ниже структуры каталогов), а не в WEB-INF. Например, вы можете поставить его под $ TOMCAT_HOME/webapps/share/extension/js. Возможно, вам придется соответствующим образом скорректировать ссылку на ваши зависимости.

Далее, не помещайте собственный код в пространство имен Alfresco. Создайте свой собственный. Вы можете создать собственное пространство имен, поставив что-то подобное в начале вашего JavaScript файла:

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

Вы также можете Минимизировать ваш JavaScript. Затем включите Share debug. Вы делаете это, помещая следующее в акционерном-конфиг-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 для своей задачи рабочего процесса и проверить свои данные там. –

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

Смежные вопросы