Orbeon Forms - 处理服务响应
Posted
技术标签:
【中文标题】Orbeon Forms - 处理服务响应【英文标题】:Orbeon Forms - Handling service response 【发布时间】:2021-09-17 15:13:48 【问题描述】:我使用 Orbeon Forms 作为我的表单构建器。我已将表单生成器的“提交”按钮修改为具有自定义行为,请看下面我的 sn-p:
<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 版中的动作设置将动作的响应存储到数据集中。可悲的是,我使用的是 CE 版本。
我的问题是:有没有一种方法/解决方法可以在 Orbeon CE 中存储和操作 Action 的响应?任何建议都非常感谢????。
提前致谢。
【问题讨论】:
更新:我正在尝试在我的 send() 操作中使用 'replace=all'。 如果服务返回 html 并且您希望向用户显示该 HTML,您可以使用replace = "all"
。但如果它返回 XML,您将根据它决定去哪里,请使用 replace = "instance"
,因此结果存储在 fr-send-submission-response
实例中(请参阅下面的答案)。
【参考方案1】:
目前,进程中的操作无法返回数据,这正是您想要的(参见#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>
成功消息将显示如下:
【讨论】:
嗨,Alex,出于某种原因,replace = "instance"
不适合我。当我尝试使用它时,在执行send()
时收到错误消息。我正在使用 Orbeon CE 版本号:orbeon-2020.1.2.202103050030-CE。你有什么想法吗?
@PhucNguyen 我已经扩展了上面的答案以包含一个示例,您应该能够按原样运行该示例,以查看 replace = "instance"
是否适合您。你会告诉我进展如何! -亚历克斯
嗨,亚历克斯,感谢您提供的示例。让我试一试,然后回复你。
@PhucNguyen ?,如果它适合你,你会告诉我的! -亚历克斯
@PhucNguyen 只是好奇:您是否检查过使用replace="instance"
,然后使用xxf:instance('fr-send-submission-response')
从send()
访问结果是否适合您?以上是关于Orbeon Forms - 处理服务响应的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xamarin.Forms 应用程序中组织服务中的 HTTP 响应
Orbeon Forms - 防止表单生成器覆盖表单中的模板
Xamarin.Forms Tap Gesturer 没有响应