Как получить диалоговое окно для заполнения во всех формах в orbeon

#orbeon

Вопрос:

У меня есть следующий диалог, который я могу заполнить и использовать, если помещу его непосредственно в форму. Тем не менее, я хочу поместить это во все формы без необходимости вводить код в каждую форму. Я сохранил диалог в его отдельном email-dialog.xml файл, и я могу вызвать его, используя 2-й фрагмент, установленный внутри properties-local.xml. Диалоговое окно отображается в виде очень крошечного окошка, внутри которого нет ничего, кроме надписи «АДРЕС ЭЛЕКТРОННОЙ ПОЧТЫ» вверху, куда вы перетаскиваете поле. Я не могу понять, как заселить содержимое внутри. Я недавно обновил до последней версии Orbeon 2020.1.2.2021. Любая помощь или указания будут оценены по достоинству.

 <xxf:dialog     

xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xh="http://www.w3.org/1999/xhtml"
xmlns:xxf="http://orbeon.org/oxf/xml/xforms"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:fr="http://orbeon.org/oxf/xml/form-runner"

id="my-dialog-id" 
appearance="full" 
level="modal" 
close="true" 
draggable="true"
visible="false">
<xf:label>EMAIL ADDRESS</xf:label>
    <xf:input id="textBoxDialog-control" bind="textBoxDialog-bind">
    <xf:label ref="$form-resources/textBoxDialog/label"/>
    <xf:hint ref="$form-resources/textBoxDialog/hint"/>
    <xf:alert ref="$fr-resources/detail/labels/alert"/>
</xf:input>
<xf:trigger id="btnDialogBox-control" bind="btnDialogBox-bind">
    <xf:label ref="$form-resources/btnDialogBox/label"/>
    <xf:hint ref="$form-resources/btnDialogBox/hint"/>
    <xf:alert ref="$fr-resources/detail/labels/alert"/>
    <!-- send email function-->
    <xf:action event="DOMActivate" type="xpath">
        fr:run-process('oxf.fr.detail.process', 'email')
    </xf:action>
</xf:trigger>
</xxf:dialog>
 
 <property
   as="xs:string"  
   name="oxf.fr.detail.dialogs.custom.*.*"
   value="oxf:/forms/resources/email-dialog.xml"/>
   

<property as="xs:string"  name="oxf.fr.detail.process.send.*.*">
xf:show(dialog="my-dialog-id")
</property>
 

Ответ №1:

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

  1. В вашем xf:input , удалите id , или вы можете получить ошибку с дубликатом идентификатора, так как у вас также есть элемент управления с идентификатором textBoxDialog-control в каждой форме.
  2. Для кнопки внутри диалогового окна не ссылайтесь на метку элемента управления btnDialogBox внутри формы, а вместо этого помещайте метку в код диалогового окна.

С учетом этих изменений диалоговое окно выглядит следующим образом:

И это измененная версия вашего кода:

 <xxf:dialog
        xmlns:ev="http://www.w3.org/2001/xml-events"
        xmlns:xh="http://www.w3.org/1999/xhtml"
        xmlns:xxf="http://orbeon.org/oxf/xml/xforms"
        xmlns:xf="http://www.w3.org/2002/xforms"
        xmlns:fr="http://orbeon.org/oxf/xml/form-runner"

        id="my-dialog-id"
        appearance="full"
        level="modal"
        close="true"
        draggable="true"
        visible="false">
    <xf:label>EMAIL ADDRESS</xf:label>
    <xf:input bind="textBoxDialog-bind">
        <xf:label ref="$form-resources/textBoxDialog/label"/>
        <xf:hint ref="$form-resources/textBoxDialog/hint"/>
        <xf:alert ref="$fr-resources/detail/labels/alert"/>
    </xf:input>
    <xf:trigger>
        <xf:label>Send</xf:label>
        <!-- send email function-->
        <xf:action event="DOMActivate" type="xpath">
            fr:run-process('oxf.fr.detail.process', 'email')
        </xf:action>
    </xf:trigger>
</xxf:dialog>
 

Комментарии:

1. Это полезно. Я все еще учусь ориентироваться в Орбоне. Одна вещь, на которой я застрял, — это как я могу получить ввод из textBoxDialog и поместить его в свойство, которое отправляет электронное письмо? В настоящее время у меня есть это свойство: <property as="xs:string" name="oxf.fr.email.to.TEST.TESTING" value="need to link the email here from dialog" />

2. Это поле ввода, которое у вас есть в диалоговом окне, «привязано» к тому же элементу, что и соответствующее поле ввода, которое у вас есть в форме. Именно в диалоговом окне Параметры управления для этого текстового поля вы сообщаете Построителю форм, что значение этого поля ввода должно использоваться в качестве получателя ваших электронных писем, установив следующий флажок: i.stack.imgur.com/y1UrY.png . Вы дадите мне знать, если это сработает для вас!

3. О! Я подумал, что по какой-то причине мне нужно связать его в свойствах. Я удалил эту строку и добавил class="fr-email-recipient ее в поле textBoxDialog в диалоговом окне, и она работает! Спасибо вам за вашу помощь!

4. Идеальное @Jolly9642, я рад, что это сделал свое дело; и вы должны использовать собственность в properties-local.xml случае, если вы хотели получателя(ов), адрес(а), чтобы быть всегда таким же (который может, например, быть в случае с формой, где сообщение отправляется на лицо, ответственное за обработку данных, что представляется).