驗證字段中的值
回答
你需要在在由您正在使用該領域的第一列排序數據庫中的視圖。我將假定它是一個隱藏的視圖,稱爲「(lookupUnique)」。構建它並對其進行測試,以確保它顯示了第一列所需的字段,並對值進行排序。
現在您需要一種方法來查看此視圖。理想情況下,您希望查找失敗 - 因爲沒有具有相同值的文檔,在這種情況下,您允許保存繼續。但還有另一種情況,您可能希望允許保存繼續。在這種情況下,查找成功是因爲查找找到了您正在處理的文檔,該文檔之前已保存,因此可在視圖中找到,而用戶現在正在編輯它。
帶有[RETURNDOCUMENTUNIQUEID]和[FAILSILENT]參數的@DbLookup函數是IBM推薦的解決方案。即,
foundId := @DbLookup("Notes":"NoCache";"":"";"(lookupUniqe)";theUniqueFieldNameGoesHereWithoutQuotes;1;[RETURNDOCUMENTUNIQUEID]);
如果這個公式返回「」,那麼找不到匹配,因此你的代碼應該返回@Success來讓保存繼續。如果它返回其他內容,則將結果與@DocumentUniqueId進行比較。如果它們匹配,那麼你的代碼應該返回@Success來讓保存繼續。如果它們不匹配,那麼您在該字段中找到了具有相同值的另一個文檔,因此您的代碼應該返回帶有相應錯誤消息的@Failure。
現在需要注意的是,在某些版本的Domino中出現了[RETURNDOCUMENTUNIQUEID]問題,包括導致Domino 6服務器崩潰的問題,如果代理在基於使用此功能的表單的文檔上調用ComputeWithForm 。還有一個錯誤導致它只返回許多匹配中的第一個匹配的單數,所以如果你有重複的話,你的代碼中的這個策略將允許用戶重新保存已經是非唯一的舊文檔,而不是強制他們改變他們使他們獨一無二,而這可能會或可能不是你想要的。
如果這些已知問題中的任何一個可能會給您造成問題,那麼您最好不要使用[RETURNDOCUMENTUNIQUEID],而應該在IBM在第一次添加[RETURNDOCUMENTUNIQUEID]選項之前執行Notes和Domino程序員的操作位置:向您的(lookupUnique)視圖添加另一列,並將列值設置爲@Text(@DocumentUniqueId)。將上面的@DbLookup公式中的1更改爲您添加的列的編號,然後編寫驗證代碼,以預測可能會返回空字符串,單個值或值列表。
這個問題被標記爲XPages,所以Richard的答案需要一些修改來處理XPages和SSJS –
如果一個45678類型我返回一個值,因爲已經有一個具有該值的文檔。我不會了解我將如何驗證它。
var dbname = session.getServerName() + "!!" + "proj\\webno.nsf";
getFieldValue = getComponent("oNo").getValue();
tmp = @DbLookup(dbname, "(webNo)", getFieldValue, 」obNo」);
if (tmp == getFieldValue)
{
Here i will do a validate. If value i return are the same as in the getFieldValue
and tmp or just getFieldValue is empty.
}
else
{
Here is it OK
}
我建議您不要使用「getFieldValue」作爲變量名稱。它看起來像一個函數名稱,並且必然會讓任何讀取代碼的人感到困惑。最好使用oNoValue或更具描述性的內容。我有一個關於字段名稱的寵物 - 我希望它們是描述性的,不要使用縮寫,因爲如果它們很短,以至於有人必須猜測這個字段用於什麼,那麼它們很容易拼錯或混淆它們。 –
拿走你的代碼並修改它。假設我們在數據庫中創建文檔,只需使用@DbName(),而不是試圖從會話和一些硬編碼中構建名稱。使用驗證時,應該可以通過值簡單地訪問該控件的值。然後,只需獲取列中的所有值,看看您的值是否在那裏。
我認爲以下應該工作。
<xp:inputText id="projectNumber" value="#{doc.ProjectNumber}">
<xp:this.validators>
<xp:validateExpression message="Value already in use">
<xp:this.expression><!CDATA[#{javascript:var usedValues = @DbColumn(@DbName(), "(webNo)", 1);
if (@IsMember (value, usedValues)) { return false };
return true;
</xp:this.expression>
</xp:validateExpression>
</xp:this.validators>
</xp:inputText>
爲什麼不爲他們生成一個值?最簡單的方法是使用@Unique,但除了創建一個以外,還有很多其他方法。
- 1. 驗證字段值格式
- 2. jQuerymobile驗證字段值
- 3. sugarcrm中的字段驗證
- 4. Winforms中的字段驗證
- 5. EditorGrid中的字段驗證
- 6. WebForms中的字段驗證
- 7. 根據Symfony中的另一個字段值驗證字段
- 8. 基於值的交叉字段驗證
- 9. 默認字段值的Javascript驗證
- 10. 驗證wx.textCtrl字段的明智值
- 11. 驗證TextBox值所需的字段驗證器問題
- 12. JQuery的驗證放驗證錯誤內輸入字段值
- 13. 驗證基於複選框值的文本字段 - jQuery驗證
- 14. 驗證字段的值大於另一個字段在php和javascript中的值
- 15. 在jQueryMobile中驗證字段
- 16. Java字段驗證
- 17. 從字段驗證
- 18. 驗證類字段
- 19. 驗證BigDecimal字段
- 20. 驗證字段數
- 21. Javascript字段驗證
- 22. 如何驗證實例字段值?
- 23. 字段值來驗證()函數爲NULL
- 24. 使用int值驗證文本字段
- 25. 驗證錯誤時重置字段值
- 26. C#驗證所有字段都有值
- 27. 使用5值驗證文本字段
- 28. 根據字段值的百分比驗證字段輸入
- 29. Formvalidation.io - 根據其他字段的值驗證字段
- 30. 基於另一個字段的值驗證Django模型字段?
當您鍵入現有名稱時,是否收到任何錯誤消息或其他反饋? – dethtron5000
請提供您到目前爲止嘗試過的代碼。你有兩個部分:何時驗證和如何。何時可能在每個字符之後,離開字段時,按下按鈕等等取決於您的應用程序流程。如何最有可能使用@DbLookup – stwissel