我可以在 properties-local.xml 的“发布”对话框中自定义“发布”按钮的流程吗?

Posted

技术标签:

【中文标题】我可以在 properties-local.xml 的“发布”对话框中自定义“发布”按钮的流程吗?【英文标题】:Can I custom the process for 'Publish' button in Publish dialog in properties-local.xml? 【发布时间】:2021-08-06 09:52:42 【问题描述】:

在文档中我看到我们可以在 properties-local.xml 中自定义流程,但它仅适用于外部发布按钮(对话框中不发布按钮)

我打算做的流程:

    在表单构建器中,用户单击发布 显示发布对话框,用户单击对话框中的发布按钮。 然后它会从我的服务器调用api发送信息。

在properties-local.xml中,我修改了这部分:

<property as="xs:string" name="oxf.fr.detail.process.publish.orbeon.builder"> </property>

使用此代码:

<!-- show publish dialog -->
    xf:show(
            dialog = "fb-publish-dialog",
            app    = "xxf:instance('fb-form-instance')/xh:head/xf:model[@id = 'fr-form-model']/xf:instance[@id = 'fr-form-metadata']/*/application-name",
            form   = "xxf:instance('fb-form-instance')/xh:head/xf:model[@id = 'fr-form-model']/xf:instance[@id = 'fr-form-metadata']/*/form-name"
            )

<!-- expect when user click publish button in dialog will execute this code -->    
    then save
    then send(
         uri = "http://localhost:8000/api/getFormBuilderInfo",
         replace = "all"
         method = "POST",
         content = "xml")

我不知道如何挂钩到对话框中的发布按钮的问题。因为我想确保它已存储在 orbeon 数据库中,以便使用 appName 和 formName(我通过 api 获得:http://localhost:8000/api/getFormBuilderInfo)创建新的表单运行器。

【问题讨论】:

我认为你是对的,你可以覆盖打开对话框的过程,之后代码不会通过过程。但可能还有其他方法可以做到这一点。您希望将哪些信息传递给您自己的 API?你的 API 是做什么的? 嗨@avernet,我用代码更新了我的问题。我的目的是当用户单击对话框中的发布按钮时,它将在表单构建器中发送 appName、formName 和表单版本,以便我可以使用它来创建 url,例如:localhost:8080/orbeon/fr/appName/formName/new 感谢您的更新,但我不清楚您所说的“我可以使用它来创建 url,例如:localhost:8080/orbeon/fr/appName/formName/new”是什么意思。当您发布表单时,该表单会自动在您提到的 URL 上可用,您无需为此执行任何其他操作。有什么我想念的吗? 感谢您的回复@avernet,因为用户只能从我的 Web 应用程序在 Form Runner 中打开一个新表单(管理员将在 Form Builder 中创建表单)。因此,有什么方法可以在点击对话框中的提交按钮后挂钩我的代码? 我仍然不清楚您希望在发布时运行的代码什么。但是,目前,您无法挂钩 表单发布后运行的代码。您可以使用publish 流程来完成这项工作,我将在下面的答案中详细介绍这一点,但正如您所看到的,这种技术可能非常复杂。因此,我问您的代码需要做什么,因为可能(或可能没有)另一种方法来实现该结果。 【参考方案1】:

在撰写本文时,无法在表单发布后调用代码。

作为一种解决方法,您可以将代码挂接到publish 进程中,但此进程在表单发布之前运行,特别是在表单生成器用户看到一个对话框要求他们确认发布表单之前.因此,在调用您的代码和实际发布表单的时间之间会有延迟,当然,用户可能会关闭对话框而不继续发布表单。

因此,在实践中,要使用此解决方法,您需要应用某种启发式方法,例如“当您的代码被调用时,注册一些侦听器以运行,比如说在 5 分钟内;当该时间过去后,检查如果表单已实际发布,则执行您需要执行的操作”。

【讨论】:

以上是关于我可以在 properties-local.xml 的“发布”对话框中自定义“发布”按钮的流程吗?的主要内容,如果未能解决你的问题,请参考以下文章

禁用“离开网站?”关闭 Orbeon 窗体窗口时弹出

我可以将 UIImage 作为文本放在 textview 中,以便我可以在 ios 中将它们作为文本删除

我可以创建一个学生,但它不会保存在 mysql 表上。我收到一个控制台错误,我可以弄清楚它是啥[关闭]

一旦我可以使用 XMPP 列出用户,我如何在这些用户之间实现聊天?

我可以在 github 页面上将我的 wordpress 博客作为静态网页托管吗

不适用于 App Store - 有人可以告诉我在哪里可以找到系统音量代码吗?