#JavaScript
標記為 #JavaScript · 3 篇文章
- document1.getDocument(true) 的 true 到底在做什麼
XPages SSJS 裡 document1.getDocument() 和 document1.getDocument(true) 到處都有人用,但那個 true(applyChanges)到底套用了什麼、什麼時候非加不可、什麼時候加了也是多餘?加錯邊的代價很實在:少加,你可能存了一份漏掉程式剛改的值的文件;多加,則是憑直覺亂下。這篇把 getDocument() 與 getDocument(true) 的差別講清楚:true 是把 data source 的待套改動(控制項輸入 + 程式 setValue)flush 進 backend 文件;一般送出事件裡 Update Model Values 早就把畫面值同步進去了、多半不用加;真正需要 true 的是你做了程式改動、或要直接對 backend 文件動作時。附上 save() 與 getComponent().getValue() 的分工。
2026.10.11 - XPages 呼叫 runOnServer 後文件還是舊值?in-memory 文件是快照——解法與用 contextDocument 省掉暫存文件
XPages SSJS 常見模式:建一個暫存文件、填參數、save、呼叫 agent.runOnServer(noteid),agent 在伺服器端把結果回寫進那份文件。然後你讀回來——卻是 agent 處理前的舊值。這不是 bug:你手上那個文件物件是載入當下的 in-memory 快照,agent 在另一條執行把磁碟上的 note 存檔了,你的物件不會自動同步。解法是 recycle 掉舊的、再 getDocumentByID 重抓一份新的。這篇講清楚這個模式、為什麼會拿到舊值、標準解法,用表單的 document data source(contextDocument)取代暫存文件,以及最乾淨的 runWithDocumentContext——傳 in-memory 文件給 agent、連存檔和重抓都免(代價是 agent 要勾「以 Web 使用者身分執行」)。
2026.10.10 - Domino Web View 翻頁的真相:Start 不是流水號,是階層座標
「我以為 Start=31 就是第 31 列,然後我錯了。」一篇 classic view ?OpenView Start 參數的除錯實測報告:純數字跳到第 N 個最上層分類、像 1.1.1.1.6 的點號值是階層座標、末段會 clamp 但中段不會、而你沒辦法用一個 URL 跳到絕對最後一頁。外加三個實用應用 —— 分類內序號、@DocNumber("")(含必須單獨使用的地雷)、以及用 ReadViewEntries 做麵包屑。
2026.07.23