Lotus notes Notes无读取功能的客户端搜索:我可以显示“吗?”;存在,但你';“我没有权利读”;
我需要检查(在notes客户机中,最好是在LotusScript中)文档是否存在,但我不在readers字段中Lotus notes Notes无读取功能的客户端搜索:我可以显示“吗?”;存在,但你';“我没有权利读”;,lotus-notes,lotusscript,Lotus Notes,Lotusscript,我需要检查(在notes客户机中,最好是在LotusScript中)文档是否存在,但我不在readers字段中 Set Doc = view.getdocumentbykey(index) 'returned Doc is nothing 我记得在旧版本的Notes中,我得到了一个文档,文档的items属性为nothing(因此,如果我无权查看此文档,则无法查看符合逻辑的项值)。有没有办法获得此功能 如果不是,最好的是什么 在分类视图上评估DBLookUp(如果在“不显示空类别”为未选中时
Set Doc = view.getdocumentbykey(index) 'returned Doc is nothing
我记得在旧版本的Notes中,我得到了一个文档,文档的items属性为nothing(因此,如果我无权查看此文档,则无法查看符合逻辑的项值)。有没有办法获得此功能
如果不是,最好的是什么
Dim key As String
key = Inputbox("index to search", "" , "123456")
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim nav As NotesViewNavigator
Dim entry As NotesViewEntry
Set db = session.CurrentDatabase
Set view = db.GetView("ForSearch")
Set nav = view.CreateViewNavFromCategory(key )
If nav Is Nothing Then
MsgBox " nothing for "+ key
Else
MsgBox " nav for " + key +": " & nav.Count
Set entry = nav.Getfirst()
If entry Is Nothing Then
MsgBox "unable to get entry"
Dim vc As NotesViewEntryCollection
Set vc = view.GetAllEntriesByKey(key, False)
If vc Is Nothing Then
MsgBox "unable to getallentries for " + key
Else
MsgBox " vc exists for " + key + " count = " & vc.Count
Set entry = vc.Getfirstentry()
If entry Is Nothing Then
MsgBox "unable to get entry"
Else
MsgBox "entry: " & entry.Columnvalues(1)
End if
End If
Else
MessageBox "Universal ID: " & entry.UniversalID
End If
End If
问题:在所有情况下都无法获取条目!因此我无法确定索引是否存在…注意,我在notes客户端中看到了该类别
返回@dblookup:
t:=@DbLookup("":"";"":""; "forSearch" ; "123455" ; 2);
@Prompt([ok] ; "123456" ; @If(@IsError(t) ; "ERR:" ; "") + @Text(t) );
这将始终返回一个错误,因此无法用于测试索引是否存在
t:= @DbColumn("":"" ; "":""; "forSearch" ; 1);
@Prompt([ok] ; "dbcolumn" ; @If(@IsError(t) ; "ERR:" + @Text(t) ; @Contains(t; "123456") ; " @contains is true yep!" ; " inexting index"));
是的,现在我记得这个黑客只对@dbcolumn和他的64K限制有效:-(
解释了在Notes中代表客户机运行可能很棘手(非常好的文章),因此…解决方案是使用@formula cascading 3@Command([ToolsRunMacro];“”)或runonserver
在我的特定情况下,这段代码是由JS计时器触发的,我不确定调用级联3@命令是否是一个好主意(这意味着在条件未验证时将公式中的一部分代码重新写入@return(false)…)我将不得不转到这个服务器端…自8.5.2版以来,有可能使用内存中的文档运行代理。该方法称为
NotesAgent.RunWithDocumentContext(doc作为NotesDocument,noteID作为String)作为整数
您可以在中阅读更多关于它的信息 这一点——再加上一半——将是我做这件事的首选方式 一些澄清:对于这种方法,您始终需要两个代理/脚本部分: 第一个“代码”在用户上下文中运行,可以用LotusScript/XPage JavaScript或Java编写。它创建“内存中”文档,然后调用另一个代理。该代理具有属性集:“代表运行”。该代理的签名者需要有权代表运行。通常,我将该代理设置为“计划-从不” 示例代码如下所示:
Dim ses as New NotesSession
Dim db as NotesDatabase
Dim docCache as NotesDocument
Dim ag as NotesAgent
Set db = ses.CurrentDatabase
Set docCache = New NotesDocument ( db )
'- set whatever parameters you want to transmit to the agent
Call docCache.ReplaceItemValue( "MyFirstParameter" , "something" )
Set ag = db.GetAgent( "AgentWithRonOnBehalf" )
Call ag.RunWithDocumentContext( docCache, "" )
'- read return parameter
docExists = docCache.GetItemValue( "docExists" )(0)
以非官方的名义
Dim ses as New NotesSession
Dim docCache as NotesDocument
Set docCache = ses.DocumentContext
'- read parameters
myParameterValue = docCache.GetItemValue( "MyFirstParameter" )(0)
'- do your search / whatever
....
'- return the result to the calling code
Call docCache.ReplaceItemValue( "docExists", True )
一种方法是,您可以使用问题中的代码片段创建schedule'代理。使用管理员ID(或可以访问数据库中所有文档的任何ID)对代理进行签名。如果找到该文档,它可以向您发送电子邮件通知,也可以创建文档(您可以访问该文档)使用找到的文档的详细信息。我更新了问题,困难在于使用签名者/代表权限从notes客户端启动代理。我的意思是使用将在服务器上运行的“计划”代理。我已更新了我的答案以反映同样的情况。此外,如果您的姓名不在“读者”字段中,则您无法看到d文档。如果你看不到文档,那么你就无法查找它,即使是通过代码。如果你可以,那么这将是一个严重的安全问题。“严重的安全问题”:你是对的,在以前版本的domino中,我记得可以查到该类别。我重新发现这个“黑客/严重的安全问题”“仅对类别列上的dbColumn有效。感谢分享您的结果。请检查我编辑的答案…我从未使用RunOnBehalf在本地客户端上成功运行。使用runOnServer它可以工作(我是说代理在RunOnBehalf的右侧运行,我也使用Effectiveusername检查)。因此,我无法使用内存中的文档。”(不可能在客户端和服务器之间共享内存)。在这种情况下,这一酷炫的8.5.2改进超出了范围。如果您使用签名者权限成功运行代理RunWithDocumentContext(这是本地的),我很高兴了解您是如何做到这一点的。