问题描述
我使用 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>
成功消息将显示如下: