HCL Domino 日報 — 每日技術精選
HCL Domino 中英雙語日報,每日精選生態系最新動態與技術深度文章。
最新文章
- XPages 多欄位分類、下一欄還是分類時文件不顯示——12.0.2 的 regression 與 DISABLE_REFIND_IN_READENTRIES
一個 XPages 視圖分類在多個欄位上,你套上篩選、而下一欄還是分類時,畫面只出現分類、底下的文件卻不見了——12.0.2 才這樣,12.0.1 是正常的。這是 HCL 官方認的 regression(KB0102504 / SPR# MNIACMGKUV),是 12.0.2 修另一個 bug(SPR# PJONB7GRUL)時引入的。暫解是在伺服端 notes.ini 加 DISABLE_REFIND_IN_READENTRIES=1,正解是升到 12.0.2 FP3 或 14.0。這篇講症狀、為什麼會這樣、暫解與正解,以及 12.0.2 一整組同家族的分類視圖 regression(像官方 KB0102042 的 @PickList 變體,參數與修復版本都不同)該怎麼對症下參數。
2026.10.06 - 從 SSJS 跑 @Formula:session.evaluate 的回傳、限制,與「不能改文件」這件事
你已經有一段 Formula 邏輯——一個 @DbLookup、一段 @Name 格式化——不想在 SSJS 裡重寫一遍。session.evaluate() 讓你直接從 SSJS 跑一段 Formula 字串、把結果拿回來。但它有幾個利角:回傳的是 java.util.Vector(不是純量),公式引用到欄位時要用兩參數版把 document 傳進去,UI 類的 @functions(@Command/@Prompt/@PickList…)在裡面不能用,而且它不能改文件、只能算出結果。這篇整理 session.evaluate 的兩種寫法、回傳與限制,以及要改文件時該怎麼把結果寫回去。
2026.10.05 - Java 端的 DXL:DxlExporter/DxlImporter 怎麼把 Domino 資料進出 XML
要把設計元素在資料庫之間搬、或把文件快照成 XML 做 diff/備份,DXL 就是 Domino 的 XML 表示法。在 Java 裡兩個主力是 DxlExporter(Domino→DXL,exportDxl 回一個 String)與 DxlImporter(DXL→Domino,importDxl 寫進目標 DB)。重點是:import 不是「把 XML 灌進去」這麼單純——你要用 setDesignImportOption/setDocumentImportOption/setAclImportOption 告訴它 design、文件、ACL 各自要 create/replace/update 還是 ignore,還有 replica 要不要相符。這篇整理兩個類別的建立與方法、import 的策略選項,以及跟 LotusScript 版的關係。
2026.10.04 - XPages managed bean:給 SSJS 一個真正的 Java 物件,像 database 一樣直接用
SSJS 寫在 script library 裡當膠水很方便,但邏輯一多就難維護——沒有真正的型別、難測試、塞進 scope 還有序列化問題。managed bean 讓你在 faces-config.xml 宣告一個 Java class,它就變成 SSJS 與 EL 裡的一個頂層變數,用起來跟 database、session 一樣——bean.method()、#{bean.prop}。這篇講 managed bean 怎麼宣告(name/class/scope 三元素)、class 的三個要件(no-arg 建構子、get/set、Serializable)、scope 的生命週期,以及邏輯什麼時候該從 SSJS 搬進 bean。
2026.10.03 - @Prompt 與 @PickList:用 Formula 跳對話框問使用者(只在 client、上不了 web)
想讓按鈕跳一句「確定要刪嗎?」,或讓使用者從一個 view 裡挑客戶——在 Formula 裡就是 @Prompt 與 @PickList。@Prompt 有一整排樣式(Ok/YesNo/OkCancelList/Password/LocalBrowse…),@PickList 則彈一個 modal 讓你從指定 view 選文件、回傳某欄的值,或從名錄挑人。但同一段公式放到 web、或放進排程 agent,就會默默無效——官方明講「You cannot use this function in Web applications」。這篇整理兩者的樣式與回傳、client-only 的邊界,以及該用哪個。
2026.10.02 - partial refresh vs partial execution:XPages 的 JSF 六階段,為什麼只刷一塊卻整頁重算
你在 XPages 按一個按鈕,結果一個八竿子打不著的欄位驗證器跳出來擋你——因為預設情況下,整頁都跑了一輪 JSF 生命週期,不只你按的那塊。XPages 有兩個各自獨立的「partial」旋鈕:partial refresh(refreshMode/refreshId)管的是 client 端回傳哪塊 HTML,partial execution(execMode/execId)管的才是 server 端跑哪些元件的生命週期。這篇用 JSF 六階段講清楚兩者差別、為什麼只做 partial refresh 整頁還是在 server 重算,以及 partial execution 怎麼把 server 工作縮到一塊。
2026.10.01 - NotesThread:在 Domino 開背景執行緒的規矩——每條 thread 要 init、要自己的 session
在 Java 裡想開一條背景執行緒去跑 Domino 的 local 呼叫,直接 new Thread 是不行的——會拿不到 Notes 執行環境。要嘛繼承 NotesThread 覆寫 runNotes()、要嘛實作 Runnable 交給 NotesThread、要嘛自己在頭尾呼叫 sinitThread()/stermThread()。而且每條 thread 要有自己的 Session、自己 recycle,不能跨執行緒共用。這篇整理 NotesThread 的三種寫法、sinitThread/stermThread 的配對規則、每執行緒一個 session 的鐵律,以及背景執行緒裡拿不到 sessionAsSigner 的現實。
2026.09.30 - @Command vs @PostedCommand:為什麼你的公式沒照順序跑
你在按鈕公式裡先算欄位、再叫一個 @Command 執行 UI 動作,結果動作先跑、算式後跑,順序全亂。原因是:@Command 大致照你寫的順序跑,但 @PostedCommand 一律排到「所有 @function 都跑完」之後才執行——寫在最前面的 @PostedCommand 反而最後動。更坑的是,有些 @Command 本身就被延後(行為像 @PostedCommand)。這篇用官方的執行順序規則講清楚兩者差別、哪些 @Command 天生 deferred,以及什麼時候該用哪個。
2026.09.29 - sessionAsSigner:XPages 用簽章者身分提權,簽章算誰、會踩什麼雷
XPages 給你三個全域 session:session 是當前使用者、sessionAsSigner 是 XPage 的簽章者、sessionAsSignerWithFullAccess 是簽章者再加 full access。用它讓使用者做他 ACL 上做不到的事(寫受限 DB、繞 Readers)很方便,但「簽章者到底算誰」是逐個 design element 算的——script library 用它自己的簽章者,不是 XPage 的,混簽就提權不一致。這篇講三個 session 的身分差別、簽章者怎麼認定,以及 setConvertMime、full access 那幾個會咬人的雷。
2026.09.28