#Formula
標記為 #Formula · 13 篇文章
- NoteID、UNID、@DocumentUniqueID:Domino 文件的三個 ID 到底差在哪
要指涉一份 Domino 文件,你可能會抓 NoteID、UniversalID(UNID),或在 Formula 用 @DocumentUniqueID——三個長得像、行為卻天差地遠。NoteID 只在單一資料庫檔內有意義、換個 replica 就變了;UNID 是 32 字元、跨所有 replica 都一樣的真身分;@DocumentUniqueID 回的就是 UNID(但不加 @Text 會變成 doclink)。這篇把三者的範圍、穩定性、該用哪個講清楚,含「改 UNID 會變新文件」「存重複 UNID 噴 4000」等雷,以及 web URL 那個 /0/UNID 的由來。
2026.09.14 - 傳統 Domino web 附件 UI 的眉角:用 $V2AttachmentOptions 藏掉陽春預設,自己畫下載清單與刪除
在 Domino web form 放個 File Upload Control、加個儲存鈕,功能是通了——但畫面很陽春:附件被 Domino 倒在頁尾、編輯時還多出一排沒法美化的「標記要刪除」勾選框。這篇講傳統 Domino web 開發者的老手法:用 $V2AttachmentOptions="0" 把預設附件區藏掉、用 passthru HTML 配 @AttachmentNames 自己畫下載清單、以及那個很少人講清楚的刪除機制 %%Detach(自訂勾選框、或走 WebQuerySave)。含 $V2AttachmentOptions 只有 0/1、文字不是數字等踩雷點。
2026.09.11 - Formula 的 @For 迴圈:什麼時候該用它,以及一個「反轉組織階層」的實例
上一批清單函式(@Transform、@Explode…)能一行處理整串,但有些事還是得用真正的迴圈——累積狀態、依順序組字串、反轉一個 list。這篇深入 @For:四個部位(初始化/條件/遞增/主體)、一個很多人會愣的重點(@For 回傳的是 1 而不是你累積的值,所以要另起一行回傳變數),並用一個真實需求走一遍——把 A\B\C 的組織階層反過來顯示成 C\B\A。順帶講 @While/@DoWhile 的差別,以及無限迴圈保護。
2026.09.01 - Formula 的錯誤處理與求值:@IfError、@Eval,以及公式在哪裡跑很重要
系列收尾。前六篇講 formula 能做什麼;這篇講兩件不管你寫什麼都會遇到的事:公式出錯時怎麼辦,以及公式到底在哪裡、什麼時候跑。錯誤用 @IfError 接住、給備援值,@IsError 判斷是不是錯誤——但別忘了 @IfError 會把真正的錯誤訊息藏起來、debug 時要先拿掉。@Eval 能在執行期把字串當公式跑。而「公式跑在哪個情境」正是整個系列一堆坑(@DbLookup 不能用在欄公式…)的根源。Formula @function 系列第七篇(完結)。
2026.08.31 - Formula 控制流與變數:暫存變數 :=、@If、@Do、@For/@While
一條真正的公式會分支、會存中間值、偶爾要迴圈。這篇講怎麼把公式結構化:暫存變數 x := ... 是現代寫法的骨幹(分號分隔、最後一句是回傳值);@If 可以串到 99 組條件/動作、就是 formula 的 switch;@Do 依序求值回最後一個;真正的迴圈 @For/@While/@DoWhile 存在,但因為 formula 是清單導向的,多數時候根本用不到。Formula @function 系列第六篇。
2026.08.30 - Formula 的日期運算:@Adjust 加減、@Now/@Today 取現在、@Modified 的兩個版本要分清
在 formula 裡算日期沒有什麼日期函式庫,就是幾個 @function。加減用 @Adjust(年月日時分秒七個位置、正負皆可);取現在用 @Now(完整時戳)或 @Today(只到日);文件時間用 @Created/@Modified。這篇也點兩個坑:@Now 每次都重算、放進 column/selection 公式會拖效能;還有 @Modified(初次修改)和 @ModifiedInThisFile(本檔最後修改)在有 replica 時是兩回事。Formula @function 系列第五篇。
2026.08.29 - @Name 是處理 Notes 名稱的瑞士刀:三種格式互轉、抽出任一段
在 formula 裡常要處理 Notes 名稱——比對、顯示、抽出 OU。@Name 是那把瑞士刀:[ABBREVIATE]/[CANONICALIZE]/[CN] 在 canonical/abbreviated/common 三種格式間互轉,[O]/[OU1]/[S] 抽出任一段。取當前使用者用 @UserName(canonical)或 @V3UserName(abbreviated),但有個坑:在 server agent 裡「當前使用者」其實是簽署者,也不能拿來當安全機制。Formula @function 系列第四篇。
2026.08.28 - Formula 字串處理:@Left/@Right/@Middle、@Word、@ReplaceSubstring
在 formula 裡切字串,很多人只知道 @Left(s; 3) 這種數字元版本——但 @Left/@Right/@Middle 同時也吃「分隔字串」:@Left(email; "@") 就是取 @ 之前的全部。@Middle 更是有四種簽章,「取 X 和 Y 之間」一行就成。這篇把 formula 的字串工具講清楚:@Middle 的四形態、@Left/@Right 的雙形態、@Word 按分隔取第 n 個(-1 取最後、抓姓氏)、@ReplaceSubstring 平行清單多重取代。Formula @function 系列第三篇。
2026.08.27 - 在 formula 裡處理一串值,為什麼幾乎不用寫迴圈?
從 LotusScript/Java 過來,你會想用迴圈處理一串值。但 formula 幾乎沒有迴圈——因為一條公式本來就是對「整串 list」一次作用的。這篇把 formula 當成函數式清單語言來看:套在多值欄位上的運算自動逐元素跑(隱式 map)、@Transform 是明確的 map(還能用 @Nothing 當 filter、回傳 list 當 flatMap)、@Explode/@Implode 切字串接清單、@Sort 排序(含 [CUSTOMSORT] 用 $A/$B 自訂)。原本十行迴圈,常常一行公式就完。Formula @function 系列第二篇。
2026.08.26 - Formula 跨 View/跨資料庫取值:@DbColumn 與 @DbLookup 一次搞懂
在 formula 裡要讀另一個 view 或另一個資料庫的資料,九成的情況就靠兩個函式:@DbColumn 抓一整欄(做關鍵字清單、下拉選單),@DbLookup 按 key 找一個值(把代碼換成標籤、拉一個關聯欄位)。這篇講兩者的語法、cache 關鍵字(空字串/NoCache/ReCache)、以及那幾個一定要知道的規矩——第一欄要排序、只能相等比對、64KB 上限、還有它們在哪些地方不能用。Formula @function 系列第一篇。
2026.08.25 - @DbLookup 與 @DbColumn:你沒在傳的那個 cache 關鍵字,與 64K 那道牆
有人改了一份 keyword 文件、重載表單,下拉還是顯示舊值。或者一份 keyword 清單長到幾千筆就悄悄不再長,直到某筆查不到才有人發現。這兩個都不是 Domino 隨機出包,而是 @DbLookup / @DbColumn 兩個有文件記載的行為,藏在多數公式忽略的地方:cache 關鍵字,與 64KB 上限。一篇關於這兩者的實測報告 —— 三種 cache 選項(預設/NoCache/ReCache)、以及這些函式回傳量的硬上限 64KB,配上 classic web 各自踩雷的情境。
2026.08.04 - Domino Web View 翻頁的真相:Start 不是流水號,是階層座標
「我以為 Start=31 就是第 31 列,然後我錯了。」一篇 classic view ?OpenView Start 參數的除錯實測報告:純數字跳到第 N 個最上層分類、像 1.1.1.1.6 的點號值是階層座標、末段會 clamp 但中段不會、而你沒辦法用一個 URL 跳到絕對最後一頁。外加三個實用應用 —— 分類內序號、@DocNumber("")(含必須單獨使用的地雷)、以及用 ReadViewEntries 做麵包屑。
2026.07.23 - 你的 Domino view 表頭為什麼永遠歪一格:passthrough HTML 黑魔法考古
接手一個老 classic-web Domino view,你常會發現直欄標題整體往右偏一格 —— 而且沒人知道為什麼。一篇實測報告,挖出藏在二十年前 view 設計裡的 passthrough HTML 把戲:直欄值與標題裡的方括號 HTML、間隔欄、每列 checkbox,以及真正的元兇 —— 一個故意不閉合的 <input 標籤吞掉 </td><td> 欄界線、把兩個直欄合併成一格,讓它之後的每個表頭都往右偏。
2026.07.22