Событие xforms-model-construct-done
В моей форме я хотел бы вызвать веб-сервис после загрузки формы после публикации. Я создал собственный элемент управления XBL для него, где у меня есть:
<xf:group id="component-group">
<xf:action ev:event="xforms-enabled" ev:target="component-group">
<xf:send ev:event="xforms-enabled" submission="my-submission"/>
</xf:action>
</xf:group>
Но это не работает должным образом: моя отправка отправляется каждый раз, когда я добавляю новый элемент в FormBuilder или меняю имя некоторых других элементов управления. Вообще говоря, отправка отправляется, когда моя форма каким-то образом меняется.
Теперь я хочу, чтобы отправка отправлялась ТОЛЬКО тогда, когда я публикую свою форму, и кто-то откроет ее для заполнения (и, конечно, когда я нажимаю "Тест" в FormBuilder, но я предполагаю, что это аналогично заполнению формы после публикации).
Я пытался что-то вроде этого:
<xf:group id="component-group">
<xf:action ev:event="xforms-model-construct-done" ev:target="component-group">
<xf:send ev:event="xforms-model-construct-done" submission="my-submission"/>
</xf:action>
</xf:group>
К сожалению, это не работает, таким образом, отправка не отправляется вообще. Какие-нибудь мысли?
1 ответ
Это связано с тем, что компоненты XBL также работают во время разработки. Поэтому вам нужен способ проверить, работает ли компонент в Form Builder или нет.
Действительно, для этого должна быть функция, но ее нет (я добавил это в список функций, которые мы должны добавить в API здесь). Ты можешь сделать:
<xf:group id="component-group">
<xf:var name="fr-params" value="xxf:instance('fr-parameters-instance')"/>
<xf:action
event="xforms-enabled"
target="component-group"
if="not($fr-params/app = 'orbeon' and $fr-params/form = 'builder')">
<xf:send submission="my-submission"/>
</xf:action>
</xf:group>
Несколько незначительных комментариев:
- вам не нужно (на самом деле не должно) место
event
атрибуты вложенных действий - вам даже не нужно
ev
префикс