2014-07-24 13 views
1

如果文檔存在,我需要檢查(在筆記客戶端,最好在lotuscript),但我不在讀者領域。注意客戶端搜索沒有讀取能力:我可以顯示「存在但你沒有權利閱讀」

Set Doc = view.getdocumentbykey(index) 'returned Doc is nothing 

我記得,在舊版本的註釋,我正在與DOC是什麼(所以沒辦法的物品財產文檔,看看項目值是邏輯,如果我看到這個文檔不正確)。有沒有辦法獲得這個功能?

如果不是,什麼是最好的?

  1. 評估DBLookUp在分類視圖(如果仍然有可能做到這一點的時候「不顯示空的,一類是不檢查 ...)
  2. 執行對代表的運行(A劑簽名者將有權閱讀所有文檔),並且只會在文檔存在或沒有索引時返回(通過環境notes.ini)
  3. 在代理服務器上運行(與臨時文檔中的繁重數據交換)
  4. json來自Notes客戶端

任何其他的想法?

加入到問題的某些嘗試...

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 

問題:無法獲得在所有的情況下進入!因此我無法確定索引是否存在或不是... NB我在Notes客戶端看到類別。

回@DBLookup:

t:[email protected]("":"";"":""; "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限制有效:-(

http://www-10.lotus.com/ldd/nd85forum.nsf/DateAllFlatWeb/4af0288d37df3ade85257c3700779a0e?OpenDocument解釋說,在Notes客戶端運行代表可能會很棘手(http://www.ns-tech.com/blog/geldred.nsf/plinks/geld-7wmjev非常漂亮的文章),所以... ...解決方案是@formula級聯3 @Command([ToolsRunMacro];「」)或runonserver ...

在我的具體情況下,這個代碼是由JS定時器觸發的,我不確定調用級聯3 @命令將是一個好主意(意味着當條件未驗證時,將公式中的代碼的一部分寫入@return(false)...)我將必須到服務器端...

+0

感謝您分享您的結果。檢查我編輯的答案... –

回答

1

從版本8.5.2有可能使用內存文檔運行代理。該方法被稱爲NotesAgent.RunWithDocumentContext(doc As NotesDocument, noteID As String) As Integer
您可以在Daniel Nashed's Blog

中看到更多關於它的信息 - 與RunOnBehalf-結合使用是我首選的方法。

一些澄清:對於這種方法,你總是需要二級代理商/腳本 - 零件:

第一個「代碼」運行在用戶上下文,可以用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) 

而在AgentWithRunOnBehalf

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) 
+0

我從來沒有成功運行本地客戶** ** RunOnBehalf。使用runOnServer它可以工作(我的意思是代理運行runOnBehalf的權限,我也用Effectiveusername來檢查它)。因此,我無法使用內存文檔(內存中的內存不會在客戶端和服務器之間共享)。在這種情況下,這個很酷的8.5.2的改進超出了範圍。如果您成功運行了具有SIGNER特權的代理程序RunWithDocumentContext(這是本地的),我很樂意瞭解您是如何做到這一點的。 –

1

一種方法可能是在那裏你可以創建一個日程安排'代理與你的問題中的代碼片段。使用管理員ID(或可訪問數據庫中所有文檔的任何ID)爲代理簽名。如果找到文檔,它可以向您發送電子郵件通知,或者它可以創建文檔(您可以在其上找到讀者訪問權限)以及它找到的文檔的詳細信息。

+0

我更新了問題,困難在於從notes客戶端以簽名者/代表權限啓動代理。 –

+0

我的意思是使用可以在服務器上運行的'預定'代理。我已經更新了我的答案以反映相同的情況。此外,如果您的姓名不在「讀者」字段中,則您無法看到文檔。如果你看不到文檔,那麼即使通過代碼,你也無法查看它。如果可以的話,這將是一個嚴重的安全問題。 – Naveen

+0

「嚴重的安全問題」:你說的對,在以前的domino版本中,我記得有可能讓DB查找這個類別。我重新發現這個「HACK /嚴重安全問題」僅對類別列上的dbColumn有效。 –

相關問題