- Java agent 的骨架:觸發、權限、輸出、除錯
前三篇都假設「agent 已經在跑」——會 recycle、拿到 Session、跑 DQL。但一個 Java agent 到底怎麼被觸發、用誰的權限執行、System.out 跑去哪、怎麼 debug?這篇補上最前面那一步:AgentBase/NotesMain 骨架、Trigger 與 unprocessedDocuments、agent signer 決定的權限、restricted/unrestricted,以及 System.out 進 log.nsf 的除錯路徑。
2026.08.10 - 在 Java 裡跑 DQL:DominoQuery 與 QueryResultsProcessor
站上的 DQL 三部曲教你寫查詢,但那是從 LotusScript 或 console 跑的。搬到 Java,DQL 走兩個類別:DominoQuery 負責編譯、調校、執行,QueryResultsProcessor 負責排序、彙總、跨庫 join、輸出 JSON。還有一個容易錯的地方——這兩個都從 Database 取得,不是 Session。這篇拆解 Java 端怎麼把 DQL 跑起來。
2026.08.09 - 在 Java 裡拿到 Session:NotesFactory、local 與遠端
LotusScript 的 session 是個你從來不必建立的全域變數;Java 沒有它。碰任何一份文件之前,你得自己先取得一個 Session——而怎麼拿,取決於你的 code 跑在 agent、獨立程式,還是遠端。這篇拆解 NotesFactory 的三條取得路徑、local(JNI) 與遠端(DIIOP) 的差別、誰建誰收的 recycle 規則,以及位元數與每執行緒一個 session 這兩個常見地雷。
2026.08.08 - LotusScript 改寫 Java 後記憶體爆掉?你可能忘了 recycle()
同一段邏輯,LotusScript 跑一輩子都沒事,搬到 Java 版的 lotus.domino 卻會在幾萬份文件的迴圈裡把 agent 記憶體吃垮。原因是每個 Java 物件背後都連著一個垃圾回收看不到的後端 handle。這篇拆解機制、四條官方規則、迴圈洩漏樣式與安全寫法、NotesThread 的角色,以及 local 與遠端 session 的差異。
2026.08.07 - 為什麼同一個 Notes 使用者卻比對失敗?搞懂 NotesName 的三種名稱格式
你拿一個名字去比 session.EffectiveUserName,永遠不相等——明明是同一個人。或者你把某個使用者寫進 Readers 欄位,他還是看不到文件。這兩個都是同一個根因:一個 Notes 名字有三種寫法(canonical、abbreviated、common),而你不小心比到、或存到了不同的兩種。這篇筆記講三種格式各是什麼、Notes 內部存的是哪一種,以及為什麼每次比名字前都該先用 NotesName 正規化。
2026.08.06 - 別再用平行陣列硬刻:LotusScript List 就是內建 HashMap,幾行搞定計數、去重、查表
你要依分類統計文件、把一串名字去重、或建一張「代碼→標籤」對照表,好不用每次都開 view。Domino 開發者的直覺是兩條平行陣列加線性掃描,或臨時開個 view——但 LotusScript 老早就內建一個鍵值集合、卻幾乎沒人用:List。這篇實測筆記講它的鍵值存取、ForAll + ListTag 走訪、Erase,以及兩個雷:讀取要用 IsElement 守著、tag 大小寫跟著 Option Compare 跑。
2026.08.05 - OpenNTF Domino IQ RAG webinar 筆記:30 字元的坑、向量化三步驟,與 FP1 修好的 Readers 安全
OpenNTF 請到 HCL 的 Brian Arnold 做了一場 Domino IQ RAG 深入 webinar。站上已寫過這條管線的技術原理,這篇補上「實戰層」——把短欄位資料 RAG 化的 30 字元限制與 concat 欄位解法、向量化的三個步驟、三個要調的旋鈕、Readers/Authors 欄位安全在 Domino 2026 FP1 才真正修好,以及開發中的 citations、側邊面板與 MCP。
2026.08.04 - @DbLookup 與 @DbColumn:你沒在傳的那個 cache 關鍵字,與 64K 那道牆
有人改了一份 keyword 文件、重載表單,下拉還是顯示舊值。或者一份 keyword 清單長到幾千筆就悄悄不再長,直到某筆查不到才有人發現。這兩個都不是 Domino 隨機出包,而是 @DbLookup / @DbColumn 兩個有文件記載的行為,藏在多數公式忽略的地方:cache 關鍵字,與 64KB 上限。一篇關於這兩者的實測報告 —— 三種 cache 選項(預設/NoCache/ReCache)、以及這些函式回傳量的硬上限 64KB,配上 classic web 各自踩雷的情境。
2026.08.04 - 你的 agent 是用誰的身分在跑?signer、effective user,與 Error 201/Readers 欄位的雷
你的 agent 跑得好好的 —— 因為是你這個 admin 簽的。把它部署成 web agent、或用服務帳號 ID 簽了排程,它就壞了:Error 201,或者更糟 —— 一份文件都沒處理卻不報錯。原因是身分:Domino agent 是用某個人的身分在跑,而那個人不一定是你。一篇關於 signer 對上 effective user 的實測報告:session.EffectiveUserName 怎麼隨「run as web user」翻轉、Error 201 背後的 runtime security level、以及那個讓文件憑空消失的 Readers 欄位雷。
2026.08.03