Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpages-如何确保提交的值是唯一的_Xpages - Fatal编程技术网

Xpages-如何确保提交的值是唯一的

Xpages-如何确保提交的值是唯一的,xpages,Xpages,这简直快把我逼疯了! 我有一个可供匿名用户使用的xPage表单。我想确保其中一个值在整个数据库中是唯一的,因此需要在字段上对进行验证-但这是一个棘手的问题-因为用户无法访问数据库中的数据,所以此验证不起作用 @IsMembervalue,@DbColumn,名称,1 我曾尝试编写一个具有代理签名者权限的代理来执行验证,但无法使其正常工作,我认为agent.runWithDocumentContextdoc;要求代理以WebUser身份运行 有什么提示吗? 干杯 Tim您不能作为其他用户运行SSJ

这简直快把我逼疯了! 我有一个可供匿名用户使用的xPage表单。我想确保其中一个值在整个数据库中是唯一的,因此需要在字段上对进行验证-但这是一个棘手的问题-因为用户无法访问数据库中的数据,所以此验证不起作用

@IsMembervalue,@DbColumn,名称,1

我曾尝试编写一个具有代理签名者权限的代理来执行验证,但无法使其正常工作,我认为agent.runWithDocumentContextdoc;要求代理以WebUser身份运行

有什么提示吗? 干杯
Tim

您不能作为其他用户运行SSJS@Formulas

您需要使用sessionAsSigner。需要注意的是,您不能使用sessionAsSigner.getCurrentDatabase-该函数返回当前用户的当前数据库,或者在以前的版本中返回,我不知道该功能有任何修改。相反,您需要使用sessionAsSigner.getDatabase,传入服务器和文件路径。从那里您可以访问视图,尝试getEntryByKeymyKey,true并检查结果是否为null。如果不是,则它已存在于视图中。但是,如果代码在每次保存时都运行,请确保检查返回的文档不是您当前正在编辑的文档,因此需要使用getAllEntriesByKey,循环检查UNID与当前文档不匹配的文档


这有点复杂,这就是为什么最新版本的OpenNTF Domino API包含View.checkUniqueString,它是与SSJS NotesView类对应的扩展Domino视图类的文档,该类自动执行所有检查。但这需要将OpenNTF Domino API作为插件安装在服务器上。

是否尝试将会话保存为签名者?它应该是这样的:sessionAsSigner.getCurrentDatabase。这样,它将查找签名者ID,而不是当前用户。@IsMembervalue、@DbColumn、Names,1将在该值已存在时返回true。如果它们不存在,您应该验证为true,使其唯一/新,因此更改为使用@IsNotMember。。。对我来说更有意义。好吧,很抱歉我的逻辑不好Eric-我是以我的身份登录的-但是当我以公共用户身份登录时,没有访问数据库中其他文档的权限,dbcolumn不返回任何值,因此验证不工作SessionAssigner似乎在正确的轨道上…..var curDB:NotesDatabase=sessionAsSigner.getDatabasesession.getServerName,session.getCurrentDatabase.getFilePath;var compInput=getComponentShortName;变量输入:string=profileDoc.getItemValueShortName;var curDBview:NotesView=curDB.getViewShortnames;var vc:NotesViewEntryCollection=curDBview.getAllEntriesByKeyStringinput,true;getComponentCompanyName.setValuevc.GetCount只是一个想法-这个值敏感吗?因为通过尝试/错误,即使是匿名用户也可以知道存在哪些值…SessionAsSigner似乎走在了正确的轨道上…尝试通过将输出放入CompanyName vc来调试它。getCount在我硬编码输入getAllEntriesByKey时给了我正确的数字,但当我尝试使用ShortName字段中的值时,它会出现使用zerovar curDB:NotesDatabase=sessionAsSigner.getDatabasesession.getServerName,session.getCurrentDatabase‌​.getFilePath;var compInput=getComponentShortName;变量输入:string=profileDoc.getItemValueShortName;var curDBview:NotesView=curDB.getViewShortnames;var vc:NotesViewEntryCollection=curDBview.getAllEntriesByKeyStringinput,true;getComponentCompanyName.setValuevc.getCount