- 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 - NotesCalendar:LotusScript 讀寫 Domino 行事曆的三個 Class
Domino 行事曆資料不是放在一般文件裡、而是用結構化的 iCalendar 格式存在 mail.nsf。LotusScript 提供三個 class 處理這層結構:NotesCalendar(行事曆物件本身)、NotesCalendarEntry(單一行事曆項目)、NotesCalendarNotice(會議邀請通知)。本文拆解取得方式(session.GetCalendar 傳入 mail.nsf)、CreateEntry 寫入 iCalendar 格式的字串、ReadRange 批次讀取時間段內的項目、GetNewInvitations 取得未處理邀請、NoticeAction 接受/拒絕邀請、跟幾個一定會踩的坑(ConvertMIME 必須設 False、行事曆文件不能當一般 NotesDocument 操作)。
2026.06.03 - NotesDocumentCollection:LotusScript 文件集合的完整操作指南
幾乎每個 Domino agent 最後都會回傳一個 NotesDocumentCollection — 但多數程式碼只用到 GetFirstDocument / GetNextDocument 就停了。本文完整拆解這個 class:七種取得 collection 的方式、走訪四個方向(First / Next / Prev / Last / Nth)、集合運算三劍客(Intersect / Merge / Subtract 都是直接改原物件)、StampAll 批次寫值跟走訪中修改的陷阱、RemoveAll force 參數的並發語意、以及 FTSearch 縮減 + 集合運算的接力模式。
2026.06.02