- NotesAgent:用程式呼叫另一支 Agent(Run vs RunOnServer)
你有一支很重的處理 agent,想讓另一支 agent、或一個按鈕在需要時觸發它 — 不是用排程、是用程式直接叫起來。NotesAgent 就是做這件事的類別:db.GetAgent() 拿到 agent,再用 Run 或 RunOnServer 跑它。本文拆解這兩個方法最關鍵的差異(在 client 跑還是在 server 跑)、怎麼用 noteID 把一份文件傳給被呼叫的 agent、IsEnabled / Trigger / Target 等屬性,以及四個限制:不能遞迴、不能 debug、使用者不能互動、輸出只進 Domino log。
2026.06.12 - NotesRichTextNavigator × NotesRichTextRange:用程式走訪與改寫 Rich Text
你有 500 份文件的 Body 欄位,要找出每一個 doclink、或把某個字串全部換掉 — 光靠 NotesRichTextItem 拿到整個欄位還不夠,你需要更細的工具。NotesRichTextNavigator 讓你依「元素型態」一個一個走訪 rich text,NotesRichTextRange 讓你選定一段、然後套樣式或刪除。本文拆解這兩個 Release 6 起的搭檔、element-type 常數、FindAndReplace 的選項與回傳值,以及一個踩了就 debug 半天的鐵則:FindAndReplace 之後所有 navigation marker 全部失效。
2026.06.11 - NotesUIWorkspace × NotesUIDocument:LotusScript 的前端自動化
站上前面拆過的 NotesDatabase、NotesDocument 都是後端類別 — 但當你要在使用者按下按鈕的當下、讀他「螢幕上還沒存檔」的欄位值、跳一個對話框問他、或把當前文件切到編輯模式,靠的是另一半:NotesUIWorkspace 與 NotesUIDocument。本文拆解這組前端雙人組、最關鍵的「前端值 vs 後端 Document」觀念、FieldGetText/FieldSetText、Prompt 與 PickList 對話框,以及一個最容易忘的鐵則:UI class 不能在背景 / 排程 agent 裡跑。
2026.06.10 - NotesName:別再用字串切 Domino 階層名稱
要從 CN=王小明/OU=Sales/O=Acme/C=TW 取出「王小明」,你還在用 Mid、InStr、@Name 硬切字串嗎?NotesName 是 Domino 內建的名稱解析類別 — session.CreateName() 一句,就能在 canonical、abbreviated、common、Internet(RFC 821/822)各種格式間互轉,並逐段拆出 O / OU / C / G / S 等元件。本文拆解全部唯讀屬性、三種格式互轉、flat name 與 Internet 名稱的行為差異、以及「abbreviation 會有歧義時不縮寫」這個容易忽略的規則。
2026.06.09 - Nomad 定位三件組:NotesGPS / NotesGPSPosition / NotesGPSCoordinates
傳統 LotusScript 沒有定位 API — 但跑在 HCL Nomad 上的 app 其實拿得到使用者的經緯度。NotesGPS 是 Domino 為 Nomad 補上的客戶端定位類別,從 NotesSession.CreateGPS() 起手,經 RequestAccess() 取得授權、GetCurrentPosition() 拿到 NotesGPSPosition、再從 Coordinates 讀出 NotesGPSCoordinates 的 Latitude / Longitude。本文拆解這條三類別鏈、官方範例逐行解說,以及 error 4508、iOS 首呼叫 Speed/Heading 為空、HighAccuracy 室內失準等幾個一定要知道的坑。
2026.06.08 - NotesLog:LotusScript Agent 的 Production Logging
LotusScript 的 Print 語句只在 Designer debug 視窗出現、production agent 跑完沒有任何紀錄。NotesLog 是 Domino 內建的 logging class — 可以把 action 跟 error 記到 agent log、指定 NSF、或寄郵件。本文拆解四種 Open 方式(OpenAgentLog / OpenFileLog / OpenMailLog / OpenNotesLog)、LogAction 跟 LogError 的呼叫格式、NumActions / NumErrors 計數、OverwriteFile 控制是否覆蓋、跟一個可以直接拿來用的 production agent logging 範本。
2026.06.07 - NotesReplication + NotesReplicationEntry:用 LotusScript 管理資料庫複製設定
Domino 的複製(Replication)是讓多台伺服器資料同步的核心機制,每個 NSF 都有一份複製設定。LotusScript 的 NotesReplication class 讓你用程式讀寫這份設定 — 暫停 / 恢復複製、調整優先等級、設定截止日期過濾、清除複製歷史。NotesReplicationEntry 則管理「這個 NSF 跟哪台伺服器之間的複製規則」。本文拆解取得方式(db.ReplicationInfo)、IsDisabled / Priority / Abstract 屬性、ClearHistory 清歷史、GetEntry 取特定伺服器對的規則、以及 Save 呼叫的必要性。
2026.06.06 - NotesDirectory + NotesDirectoryNavigator:LotusScript 查詢 Domino 目錄
Domino 目錄(Domino Directory)是整個 Notes 環境的使用者資料庫 — 人員、群組、伺服器都在裡面。LotusScript 的 NotesDirectory 提供高層次的查詢 API(不需要自己開 names.nsf 走 view)。本文拆解取得方式(session.GetDirectory)、LookupNames 依名稱查詢指定欄位、LookupAllNames 掃全部、GetMailInfo 取郵件伺服器資訊、CreateNavigator 建立 NotesDirectoryNavigator 走訪快取結果、以及 SearchAllDirectories / LimitMatches 兩個影響效能跟結果數量的屬性。
2026.06.05 - NotesMIMEEntity + NotesMIMEHeader:LotusScript 解析郵件 MIME 結構
Domino 收到的郵件是 MIME 多層巢狀結構 — HTML body、純文字備用、附件、inline image 各自是不同的 MIME entity。LotusScript 用 NotesMIMEEntity 代表每一個節點、NotesMIMEHeader 代表節點的 header 欄位。本文拆解取得方式(session.ConvertMIME = False 的必要性)、ContentType / ContentSubType 識別 MIME 類型、GetFirstChildEntity + GetNextSibling 走訪 MIME 樹、GetContentAsText 取出文字內文、GetNthHeader / GetSomeHeaders 讀取 header 值、CreateMIMEEntity 從頭建立 MIME 郵件、以及 body 跟 attachment 的實戰辨別方法。
2026.06.04