Orbeon Forms中的条件验证

时间:2016-09-06 12:43:12

标签: orbeon

我有一个orbeon表单,其中包含5个带saveSend按钮的字段。

save上,只有两个字段是必填字段,在send上,所有5个字段都是必填字段。

如何为此方案编写验证。

更新

我添加了隐藏字段,其中包含控制名称:ValidationMode,我的流程如下:

<property as="xs:string" name="oxf.fr.detail.process.save.*.*">
     xf:setvalue(
        ref   = "bind(ValidationMode-bind)",
        value = "'save'"
    )
    then xf:dispatch(
        name     = "xforms-recalculate",
        targetid = "fr-form-model"
    )
    then validate-all
    then save-final
</property>

条件验证仍无效。请帮忙

1 个答案:

答案 0 :(得分:0)

您可以使用save-draft按钮进行保存而无需验证。见documentation。但是save-draft将在保存之前完全跳过检查验证。

<强>更新

如果要根据按下的按钮验证(使用&#34;必需&#34;或约束公式),我可以考虑以下方式。

是否需要字段可以用XPath表达式表示。不知何故,XPath表达式必须依赖于当前按下的按钮,并且必须在那时重新应用验证。所以你可以做到以下几点:

  • 添加一个隐藏的表单字段,例如validation-mode,其中包含一个值,用于标识用户是按下了一个按钮还是另一个按钮,例如savesend或空白。
  • 使您的验证取决于该字段(使用$validation-mode)。
  • 撰写一个新的process与每个&#34; Save&#34;相关联。或&#34;发送&#34;按钮:
    • 设置隐藏字段的值,例如savesend
    • 强制重新计算/重新验证。目前还没有内置操作,但您可以使用xf:dispatch(name = "xforms-recalculate", targetid = "fr-form-model")
    • 执行此操作
    • 然后像往常一样继续这个过程。

所以这些过程看起来像是:

<property as="xs:string" name="oxf.fr.detail.process.save.*.*">
    xf:setvalue(
        ref   = "bind('validation-mode-bind')",
        value = "'save'"
    )
    then xf:dispatch(
        name     = "xforms-recalculate",
        targetid = "fr-form-model"
    )
    then validate-all
    then expand-all
    then save-final
</property>

<property as="xs:string" name="oxf.fr.detail.process.send.*.*">
    xf:setvalue(
        ref   = "bind('validation-mode-bind')",
        value = "'send'"
    )
    then xf:dispatch(
        name     = "xforms-recalculate",
        targetid = "fr-form-model"
    )
    then validate-all
    then expand-all
    then send(
        uri     = "http://posttestserver.com/post.php",
        method  = "post",
        content = "xml",
        replace = "all"
    )
</property>