电子邮件地址验证的唯一性(xpages)
案例:创建一个数据库(系统),供用户在names.nsf中请求电子邮件和更新 发现问题,假设我们无法编辑names.nsf视图或创建新视图来检查Internet地址的唯一性 示例:用户的InternetAddress(电子邮件地址)字段为:TestUser1@brooke.com.my 我不能使用picker validator来验证电子邮件地址的唯一性,因为没有视图,也不允许在names中创建视图。nsf只是对其进行排序并使用其进行验证,我可以知道还有其他方法进行验证吗~ arr内的样本值 2017年7月19日新增编码电子邮件地址验证的唯一性(xpages),xpages,xpages-ssjs,Xpages,Xpages Ssjs,案例:创建一个数据库(系统),供用户在names.nsf中请求电子邮件和更新 发现问题,假设我们无法编辑names.nsf视图或创建新视图来检查Internet地址的唯一性 示例:用户的InternetAddress(电子邮件地址)字段为:TestUser1@brooke.com.my 我不能使用picker validator来验证电子邮件地址的唯一性,因为没有视图,也不允许在names中创建视图。nsf只是对其进行排序并使用其进行验证,我可以知道还有其他方法进行验证吗~ arr内的样本值
var setdoc:NotesDocument = database.getProfileDocument("System Setting", "");
var server = setdoc.getItemValueString("DBSvr");
var DName = setdoc.getItemValueString("DbPath");
var db:NotesDatabase = session.getDatabase(server, DName, false);
var vw:NotesView = db.getView("($VIMPeopleByLastName)")
var doc:NotesDocument = vw.getFirstDocument();
var arr = [];
while (doc != null) {
var tmpdoc = vw.getNextDocument(doc);
arr.push(doc.getItemValueString("InternetAddress"));
doc.recycle(); // to prevent IBM Notes Crash use recycle // The recycle method unconditionally destroys an object // and returns its memory to the system.
doc = tmpdoc;
}
value=getComponent("mail11").getValue() +"@devsvr1.pcs.com.my"
return @IsMember(value, arr);
更新的测试结果:
-场的性质
-验证属性字段
-编码部分
<xp:this.expression><![CDATA[#{javascript:
var setdoc:NotesDocument = database.getProfileDocument("System Setting", "");
var server = setdoc.getItemValueString("DBSvr");
var DName = setdoc.getItemValueString("DbPath");
var db:NotesDatabase = session.getDatabase(server, DName, false);
var vw:NotesView = db.getView("($VIMPeopleByLastName)")
var doc:NotesDocument = vw.getFirstDocument();
var arr = [];
while (doc != null) {
var tmpdoc = vw.getNextDocument(doc);
arr.push(doc.getItemValueString("InternetAddress"));
doc.recycle();
doc = tmpdoc;
}
value=getComponent("mail11").getValue() +"@devsvr1.pcs.com.my"
return @IsMember(value, arr);
}]]></xp:this.expression>
我发现在不更改名称的情况下查找internet地址有三种可能性。nsf:
InternetAddress
搜索的示例
:
var公式='InternetAddress='TestUser1@brooke.com.my":"TestUser2@brooke.com.my";
var dc:NotesDocumentCollection=database.search(公式);
如果(dc.getCount()>0){
//阅读文档的Internet地址,并告诉用户哪些已被使用
}
FTsearch
示例:
var search='[InternetAddress]='TestUser1@brooke.com.my";
var dc:NotesDocumentCollection=database.FTsearch(搜索);
如果(dc.getCount()>0){
//告诉用户internet地址已被使用
}
将您的代码放入例如表达式验证程序:
值
包含要验证的字段值。不要忘记使用message控件向用户显示错误消息。我发现有三种方法可以在不更改名称的情况下查找internet地址。nsf:
InternetAddress
搜索的示例
:
var公式='InternetAddress='TestUser1@brooke.com.my":"TestUser2@brooke.com.my";
var dc:NotesDocumentCollection=database.search(公式);
如果(dc.getCount()>0){
//阅读文档的Internet地址,并告诉用户哪些已被使用
}
FTsearch
示例:
var search='[InternetAddress]='TestUser1@brooke.com.my";
var dc:NotesDocumentCollection=database.FTsearch(搜索);
如果(dc.getCount()>0){
//告诉用户internet地址已被使用
}
将您的代码放入例如表达式验证程序:
值
包含要验证的字段值。不要忘记使用消息控件向用户显示错误消息。这里有一个SSJS函数,用于检查任何可用通讯簿中是否存在具有特定ID的用户:
function isDominoUser(id) {
try {
var db,vw,doc,itr;
itr=sessionAsSigner.getAddressBooks().iterator();
while (itr.hasNext()) {
db=itr.next();
try {
if (!db.open()) continue;
vw=db.getView("($Users)");
doc=vw.getDocumentByKey(id,true);
if (doc) {
doc.recycle();
vw.recycle();
return true;
}
vw.recycle();
} catch(err1) {}
}
} catch(err) {
java.lang.System.out.println("ERROR: "+err.toString()+" [isDominoUser]");
}
return false;
}
由于($Users)视图还包含邮件地址,因此您可以使用该功能查找用户是否已使用特定地址注册
根据您发布的代码示例,验证表达式将如下所示:
return isDominoUser(getComponent("mail11").getValue()+"@devsvr1.pcs.com.my");
PS:您必须确保签名者至少具有对通讯簿的读取权限。这里有一个SSJS功能,用于检查任何可用通讯簿中是否存在具有特定ID的用户:
function isDominoUser(id) {
try {
var db,vw,doc,itr;
itr=sessionAsSigner.getAddressBooks().iterator();
while (itr.hasNext()) {
db=itr.next();
try {
if (!db.open()) continue;
vw=db.getView("($Users)");
doc=vw.getDocumentByKey(id,true);
if (doc) {
doc.recycle();
vw.recycle();
return true;
}
vw.recycle();
} catch(err1) {}
}
} catch(err) {
java.lang.System.out.println("ERROR: "+err.toString()+" [isDominoUser]");
}
return false;
}
由于($Users)视图还包含邮件地址,因此您可以使用该功能查找用户是否已使用特定地址注册
根据您发布的代码示例,验证表达式将如下所示:
return isDominoUser(getComponent("mail11").getValue()+"@devsvr1.pcs.com.my");
PS:您必须确保签名者至少具有地址簿的读取权限。我想在验证中检查是否存在……使用哪种验证程序类型更好。由于我尝试一点也不成功~您可以在($NamesFieldLookup)或($Users)视图中使用地址作为查找键执行GetDocumentByKey。如果给定表达式无效~我将更新错误照片和新代码我尝试计算字段我的编码看起来正常。它给“真”,意味着存在。但在validator-expression中,它会给出一个错误消息表达式无效将代码放入“表达式”(=服务器端JavaScript SSJS),而不是“clientScript”(=客户端JavaScript CSJS),我想放入验证中以检查是否存在…哪个验证器类型更适合使用。由于我尝试一点也不成功~您可以在($NamesFieldLookup)或($Users)视图中使用地址作为查找键执行GetDocumentByKey。如果给定表达式无效~我将更新错误照片和新代码我尝试计算字段我的编码看起来正常。它给“真”,意味着存在。但是在validator-expression中,它给出了一个错误消息表达式是无效的将代码放入“表达式”(=服务器端JavaScript SSJS),而不是“客户端脚本”(=客户端JavaScript CSJS)。很遗憾,他们不允许在names.nsf中添加视图,因为视图会使这更简单,不会破坏任何其他内容。遗憾的是,他们不允许在names.nsf中添加视图,因为(通过电子邮件联系的人)视图会使这更简单,不会破坏任何其他内容。问题:我需要将其发布在“表达式”或“客户端脚本”上吗顺便说一句:我的答案是基于你最初发布的代码想要实现什么。但是,如果您打算在用户已经存在的情况下显示错误消息,那么您当然必须使用否定版本,即
return!isDominoUser(…)
。问题:我需要将其发布在“表达式”或“客户端脚本”区域吗?顺便说一句:我的答案基于您最初使用代码想要实现的目标