Lotus notes Notes无读取功能的客户端搜索:我可以显示“吗?”;存在,但你';“我没有权利读”;

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(如果在“不显示空类别”为未选中时

我需要检查(在notes客户机中,最好是在LotusScript中)文档是否存在,但我不在readers字段中

Set Doc = view.getdocumentbykey(index)   'returned Doc is nothing
我记得在旧版本的Notes中,我得到了一个文档,文档的items属性为nothing(因此,如果我无权查看此文档,则无法查看符合逻辑的项值)。有没有办法获得此功能

如果不是,最好的是什么

  • 在分类视图上评估DBLookUp(如果在“不显示空类别”为未选中时仍然可以执行此操作…)
  • 执行代表运行的代理(签名者将有权读取所有文档),并且仅当索引的文档存在或不存在时才会返回(通过environment notes.ini)
  • 在服务器上运行代理(在临时文档中进行大量数据交换)
  • 来自Notes客户端的json
  • 还有别的想法吗

    在问题中添加了一些尝试

    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(这是本地的),我很高兴了解您是如何做到这一点的。