如何在 orbeon 中的所有表单上填充对话框

Posted

技术标签:

【中文标题】如何在 orbeon 中的所有表单上填充对话框【英文标题】:How to get a dialog to populate on all forms in orbeon 【发布时间】:2021-08-15 21:02:42 【问题描述】:

如果我将其直接放入表单中,我可以填充和使用以下对话框。但是,我想将它放在所有表单上,而不必将代码放入每个表单中。我已将对话框保存到它自己单独的 email-dialog.xml 文件中,我可以使用在 properties-local.xml 中设置的第二个 sn-p 来调用它。该对话框显示为一个非常小的框,除了在您拖动框的顶部的标签“EMAIL ADDRESS”之外,里面什么都没有。我不知道如何让里面的东西填充。我最近更新到了 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 的字段,当用户单击 发送按钮。我建议您对对话框的代码进行两处更改:

    在您的xf:input 中,删除id,否则您可能会收到重复ID 错误,因为您在每个表单中都有一个ID 为textBoxDialog-control 的控件。 对于对话框内的按钮,不要在窗体内引用控件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>

【讨论】:

这很有帮助。我仍在学习围绕 Orbeon 的方法。我坚持的一件事是如何从 textBoxDialog 获取输入并将其放入发送电子邮件的属性中?我目前有这个属性:&lt;property as="xs:string" name="oxf.fr.email.to.TEST.TESTING" value="need to link the email here from dialog" /&gt; 对话框中的这个输入字段与表单中的相应输入字段“绑定”到相同的元素。通过选中以下复选框,您可以在该文本字段的“控制设置”对话框中告诉表单生成器此输入字段的值将用作电子邮件的收件人:i.stack.imgur.com/y1UrY.png。你会告诉我这是否适合你! 哦!我认为出于某种原因我需要将其链接到属性中。我删除了该行并将class="fr-email-recipient 添加到对话框中的 textBoxDialog 字段中,它正在工作!感谢您的帮助! 完美@Jolly9642,我很高兴这成功了;如果您希望收件人的电子邮件地址始终相同(例如,将电子邮件发送给负责人的表单可能就是这种情况),您将使用 properties-local.xml 中的属性处理提交的数据)。

以上是关于如何在 orbeon 中的所有表单上填充对话框的主要内容,如果未能解决你的问题,请参考以下文章

Orbeon Forms - 引用模板部分之外的控件值

如何让所有 django allauth 表单和对话框显示在弹出窗口中

如何在模态对话框中设置输入值?

Orbeon 表单 - 清除下拉标签

在 AJAX 请求后填充 Django 表单

vbscript 通过KTM验证表单按钮触发对话框。通过SQLDBQuery填充对话框