2016-09-06 36 views
3

我有一個orbeon表單,其中包含5個字段,其中saveSend按鈕。Orbeon表單中的條件驗證

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> 

仍然是有條件的驗證是行不通的。請幫助

回答

0

您可以使用save-draft按鈕來允許保存而不驗證。看到這個documentation。但save-draft將完全忽略保存前的檢查驗證。

更新

如果您想驗證(與「必需」或約束公式)取決於按下按鈕,我能想到的方式如下。

是否需要字段可以用XPath表達式表示。不知何故,XPath表達式將不得不依賴於當前按鈕的按下,並且驗證將不得不在當時重新應用。所以,你可以做到以下幾點:

  • 添加一個隱藏的表單字段,說validation-mode,其中將包含一個數值,用於識別用戶是否按下一個按鈕或其他,說savesend還是空白。請使用$validation-mode
  • 寫與每個「保存」或「發送」按鈕,其中相關的新process
    • 設置隱藏字段的值,說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> 
+0

'保存-draft'將保存表單數據,即使它是無效的(無審定會在這裏發生)。但在我的情況下,5個字段中的任務是通過點擊'save-draft'驗證2個字段。 – Saha

+0

我在這裏尋找部分驗證。 – Saha

+0

我明白了。我更新了我的答案。 – ebruchez