Как я могу создать свое собственное правило проверки в orbeon xforms? - PullRequest
3 голосов
/ 27 марта 2012

Вот проблема, мне нужно проверить форму перед отправкой следующим способом, прежде чем пользователь сможет что-либо отправить, он должен нажать кнопку «Сохранить», если он попытается нажать «Отправить», он получит сообщение, похожее на «Вы должны сохранить».перед отправкой формы ".

Сначала я подумал, что могу добавить системное поле в форму, например, сохранить-индикатор, добавить ограничение к этому

<xforms:bind id="isSaved-bind" nodeset="isSaved" 
  name="isSaved" type="xforms:string" constraint="number(.)=1" required="true()"/>

И добавить

<xforms:setvalue ref="xxforms:instance('fr-form-instance')/person/isSaved">1</xforms:setvalue>  

к действиям при нажатии кнопки «Сохранить».

Но проблема в том, что мне нужно переписать все существующие формы, чтобы вставить туда новый код.

Есть ли возможность сделатьглобальную переменную, такую ​​как "isSaved" и проверять ее для каждой формы перед отправкой, и показывать сообщение об ошибке, если пользователь не сохранил форму?

Или, может быть, есть другой способ, которым я могу 'не вижу?


Будем благодарны за любые ответы.

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Form Runner отслеживает, является ли форма чистая или грязная , и вы можете получить доступ к этой информации в xxforms:instance('fr-persistence-instance')/data-status. Код, обрабатывающий отправку, находится в apps/fr/includes/persistence/persistence-model.xml. Там вы можете изменить слушателя на DOMActivate на fr-submit-button, чтобы он читался как:

<xforms:action ev:event="DOMActivate" ev:observer="fr-submit-button">
    <xforms:action if="instance('fr-persistence-instance')/data-status = 'clean'">
        <xforms:setvalue ref="instance('fr-persistence-instance')/submit-or-save-or-send">submit</xforms:setvalue>
        <xforms:dispatch name="fr-save-action" target="fr-persistence-model">
            <xxforms:context name="fr:check-data-valid" select="true()"/>
        </xforms:dispatch>
    </xforms:action>
    <xforms:action if="instance('fr-persistence-instance')/data-status = 'dirty'">
        <xforms:message>You must save form before submitting it.</xforms:message>
    </xforms:action>
</xforms:action>

Обратите внимание, что persistence-model.xml в orbeon-form-runner.jar. Чтобы изменить этот файл, извлеките его оттуда и поместите в WEB-INF/resources/apps/fr/includes/persistence/persistence-model.xml. Эта версия на WEB-INF/resources будет иметь приоритет над версией в файле jar. Также обратите внимание, что изменения такого типа, которые зависят от внутренних компонентов Form Runner или Form Builder, могут прерваться при обновлении до новой версии Orbeon Forms. Поэтому вам может потребоваться тщательно отслеживать их, чтобы вам было легче повторно применить изменения при обновлении.

0 голосов
/ 29 марта 2012

Я использую индикатор глобального флага, чтобы проверить, сохранена ли форма перед закрытием окна или отправки, и она работает довольно хорошо.

Эта информация понятна в этой вики .

Всего наилучшего!

...