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 中的响应式网格

Xamarin.Forms Tap Gesturer 没有响应

ng2响应式表单-翻译与概括官网REACTIVE FORMS页面

Xamarin Forms 渲染器未响应事件更改