- Java 讀寫 Notes item:getItemValue 回的是 Vector,不是你熟的那種陣列
LotusScript 裡 doc.GetItemValue 回一個 Variant 陣列,你 For 一圈就完事。搬到 Java,同一個呼叫回的是 java.util.Vector,元素型別要自己認、缺欄位不丟例外只回空的、裡面若是 DateTime 還會漏記憶體。這篇把 Java 版 Document 的讀寫 item 講清楚:getItemValue 與那幾個型別化 getter 的回傳與缺欄位行為、replaceItemValue 接受哪些 Java 型別又會自動建 item、appendItemValue 為什麼會默默建出重複 item,以及三個 LotusScript 帶不過來的雷。
2026.08.14 - Domino 14.5.1 FP1 有什麼:RAG 能接遠端模型、49 個修正、JVM 更新
Domino 14.5.1 的第一個 Fix Pack 在 2026-07-16 悄悄上線,官方一句「建議所有客戶安裝」帶過。這篇把它對開發者與管理者最有感的幾點整理出來:RAG 多了 Remote 模式(LLM 可接遠端、向量庫仍在本機)、約 49 個修正裡不少是修回 14.5.1 自己的 regression、JVM 更新到 Semeru 21.0.11+10、兩個 OIDC 安全修正,以及幾個藏在 notes.ini 的小開關。
2026.08.13 - XPages/SSJS:直接用 java.util.Vector 操作多值欄位
LotusScript 沒有 removeElementAt、刪一個多值元素得重建陣列;SSJS 剛好相反——它跑在 Java 上,多值欄位讀進來就是一個 java.util.Vector,addElement/removeElementAt/insertElementAt 整套 API 現成可用,改完用 replaceItemValue 寫回。這篇拆解怎麼用 Vector 操作多值、倒著刪的原理、以及兩個一定會踩的雷(空欄位的 [""]、getValue 的型別)。
2026.08.12 - LotusScript 沒有 removeElementAt:從陣列、List、多值欄位刪一個元素
在 SSJS/XPages 裡刪一個多值元素很順——java.util.Vector 有 removeElementAt,倒著跑迴圈依 index 刪就好。搬到 LotusScript 卻卡住:沒有 Vector、沒有 removeElementAt,而 Erase 對陣列是「整個清空」不是「刪一個」。這篇拆解 LS 的實際選項——先分清你的集合是什麼,再用 Split/Join、陣列重建、List 的 Erase(tag)、或 Evaluate + @Replace。
2026.08.11 - 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