Orbeon 表单 - 处理服务响应

问题描述

我使用 Orbeon Forms 作为我的表单构建器。我已经修改了表单生成器的“提交”按钮以具有自定义行为,请查看下面的代码片段:

<property as="xs:string" name="oxf.fr.detail.process.send.*.*">
save()
then send(
    uri             = "{xxf:property('ORBEON_API')}/api/submitForm",replace         = "none",method          = "POST",content         = "xml",content-type    = "application/xml",nonrelevant     = "keep",serialization   = "application/xml"
)
then set-workflow-stage(name = "submitted")
then success-message("save-success")

现在,我正在尝试获得 send() 操作的响应,但无法真正找到描述如何在 Orbeon CE 中执行此操作的文档。我计划从此“{xxf:property('ORBEON_API')}/api/submitForm”接收一个 URI,以便我可以使用它导航到另一个页面

我发现可以使用 PE 版中的 Action Settings 将 Action 的响应存储到数据集中。遗憾的是,我使用的是 CE 版。

我的问题是:有没有一种方法/解决方法可以在 Orbeon CE 中存储和操作 Action 的响应?任何建议都非常感谢?。

提前致谢。

解决方法

目前,进程中的操作无法返回数据,而这正是您在这里想要的(请参阅#1688)。但是,send() 将您的服务返回的 XML 存储在名为 fr-send-submission-response 的实例中。因此,您可以访问该实例并提取服务返回的信息。在 XPath 中,您将使用以下内容访问该实例:

xxf:instance('fr-send-submission-response')

例如,以下代码将对返回早餐菜单的 URL 发出 GET 请求,并将菜单上的第一项显示为成功消息。 (是的,我知道,这不是一个非常现实的例子!但至少它是一个任何人都应该能够在本地运行的例子。)

<property as="xs:string"  name="oxf.fr.detail.process.submit.*.*">
    send(
        method  = "GET",uri     = "https://www.w3schools.com/XML/simple.xml",replace = "instance"
    )
    then success-message(
        message = "First item on the menu: {xxf:instance('fr-send-submission-response')/food[1]/name}"
    )
</property>

成功消息将显示如下:

enter image description here