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

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

我打算做的流程:

  1. 在表单构建器中,用户单击发布
  2. 显示发布对话框,用户单击对话框中的发布按钮。
  3. 然后它会从我的服务器调用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 流程来完成这项工作,我将在下面的答案中详细介绍这一点,但正如您所看到的,这种技术可能非常复杂。因此,我问您的代码需要做什么,因为可能(或可能没有)另一种方法来实现该结果。

标签: orbeon


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 2018-08-09
    • 2017-10-09
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多