我已經閱讀了Alfresco文檔以及wiki,但仍然沒有清楚:在Alfresco Share表單中爲特定字段定義自定義驗證處理程序的正確方法是什麼?Alfresco共享表單:如何爲非必填字段定義自定義驗證處理程序?
問題是我在論壇中發現的方法總是覆蓋了MANDATORY類型,所以如果字段設置爲mandatory =「true」,則驗證處理程序只會被調用。
<config evaluator="aspect" condition="my:aspect">
<forms>
<form>
<field-visibility>
<show id="my:property" />
</field-visibility>
<appearance>
<field id="my:property" mandatory="true">
<constraint-handlers>
<constraint type="MANDATORY" validation-handler="Alfresco.forms.validation.myValidator" event="keyup" />
</constraint-handlers>
</field>
</appearance>
</form>
</forms>
</config>
但如何定義自定義驗證處理程序爲一個字段是不是強制性的?否則,這是選擇/重寫的正確類型?我嘗試使用type="LENGTH",但是當用戶在表單域和域中輸入內容時,這也不會被調用。
更新:
我也試着從下面的評論Andreas的建議,但是,驗證處理程序不會被調用。這是我的XML和功能:
<field id="my:field" mandatory="false">
<constraint-handlers>
<constraint message-id="mandatory.field.empty.suffix" event="keyup,propertychange" validation-handler="Alfresco.forms.validation.metahead"/>
</constraint-handlers>
</field>
驗證處理函數:
Alfresco.forms.validation.metahead = function FormEditMetadataWebWorkflowExt_metahead(field, args, event, form, silent, message)
{
console.log('metahead!');
return false;
}
上述驗證功能不被調用在任何時候,無論是當我改變我的字段的值或任何其他形式的領域。
接下來,我試圖手動註冊驗證處理程序,因爲我在露天地方論壇閱讀:
YAHOO.Bubbling.fire("registerValidationHandler",{fieldId: 'fieldIdOfMyField',handler: Alfresco.forms.validation.metahead, when: "onkeyup"});
但這隻能部分。它確實調用我的驗證處理函數只有當任何其他(強制性)表單字段更改(這是正常的,因爲整個表單驗證發生時,一個字段更改),但而不是當我更改我自己的字段「my:field」)。
(還有,爲什麼需要驗證處理程序來手動註冊,我會覺得這是在XML中的約束配置是。)
在4.2.e上,它適用於我的w/o類型屬性和w/o「驗證處理程序」的附加註冊(激發事件)。您正在使用哪個版本的Alfresco Share? –
我目前在4.0.2.9 Enterprise上,這是該項目中的生產系統。我會試用更新的版本。 –