有一个inputText - 字符串(代表公司名称):txt_NumeCompanie
我们假设已有2个文档。保存了上述字段值:ABC
和Xpages
。
我想做什么:
ABC
或Xpages
完成公司名称字段,显示一条消息,让我知道已存在该名称的文档。Xpages
作为公司名称的文档,并且我将其再次更改为ABC
上述消息。我尝试过的内容:该字段的onChange
事件会刷新包含<xp:div styleClass="lotusMessage"
的面板。此div具有以下呈现属性:
if ( currentDocument.isNewNote())
{
if ( @IsMember(Cdoc.getItemValueString("txt_NumeCompanie"),@Unique(@DbColumn(@DbName(),"vwComp",0))) )
{ return true;}
else { return false; }
}
else
{
var newe = Cdoc.getItemValueString("txt_NumeCompanie");
if ( @IsMember(newe,@Unique(@DbLookup(@DbName(),"vwCompanii",Cdoc.getDocument().getUniversalID(),2))) )
{ return false;}
else { return true; }
}
vwCompanii
有一列列出了所有txt_NumeCompanie
值,而vwCompanii
有两列:@Text(@DocumentUNiqueID))
和txt_NumeCompanie
&#39;。上面的代码适用于.isNewNote()文档。但是,如果我打开一个现有的doc。 (具有txt_NumeCompanie = ABC)消息再次出现,而不更改任何内容。我想从上面的项目清单中了解2.案例。
此外,通过打开现有的文档。来自viewPanel,当doc。打开并显示,即使txt_NumeCompanie
的值未更改,脚本消息也会立即显示。如何仅在发生onChange事件时才触发脚本消息,而不是在文档打开时触发?
我怎样才能做到这一点?
答案 0 :(得分:3)
@DbColumn check在这里为你工作。要采用的方法是访问NotesView,然后查找与密钥匹配的文档,然后检查该文档是否与当前文档具有不同的UNID。
这是一个常见的要求,这就是为什么最新版本的OpenNTF Domino API我添加了View.checkUnique(key,srcDoc),请参阅https://github.com/OpenNTF/org.openntf.domino/blob/master/org.openntf.domino/src/org/openntf/domino/impl/View.java#L2645-2663。 (行号将在以后的版本中更改)。请记住,此代码依赖于OpenNTF Domino API核心中的构造,如易于迭代,自动回收等。
答案 1 :(得分:0)
算法很简单:按键值查找文档,并且仅当以下情况允许保存:
段:
try {
var unid = @DbLookup("", "view", "key", 1, '[RETURNDOCUMENTUNIQUEID]');
if (unid && unid instanceof String) {
if (doc.isNewNote()) {
// key was found, that's bad
return false; //(do not continue)
} else {
return unid == doc.getUniversalID();
}
} else if (!unid) {
return true; // key not found, it's unique, go
} else {
return false; // duplicates found
}
}