這是透過流程去對表單的值做寫入變更的元件
| 項目 | 說明 |
|---|---|
| 顯示名稱 | 寫入欄位 |
| node_type | OpFieldWrite |
| 一句話用途 | 把一段做完變數替換的文字寫回這次流程自己的表單欄位,讓開單的人直接看得到 |
| 會讓流程等待 | 否,執行完立刻往下推進 |
| 出線 | 沒有選擇邏輯,依通用規則走全部出線;設計上通常只接一條 |
| 可用範圍 | 所有企業 |
寫入欄位(OpFieldWrite)把設計時寫好的一段文字,在流程執行到這個節點的當下做完變數 替換後,寫進「這次流程自己的表單實例」的指定欄位——它動的是表單的 form_data,不是流程 變數。這是變數類節點裡效果最直觀的一個:流程跑完之後,打開表單中心這張單,指定欄位就已經被自動填上 內容,不需要再另外查任何記錄。
適合的情境:想讓簽核者一眼看到一段自動整理過的摘要(例如把好幾個原始欄位、統計數字組成一段可讀的 文字)、或想在表單上留一筆「系統自動處理」的可追溯註記。不適合的情境:如果只是想讓後面的節點取用某個 值,並不需要讓使用者從表單畫面上看到,應該用「設定變數(OpSet)」直接寫進流程變數即可, 不必特地寫回表單欄位,也犯不著多佔用表單一個欄位。
| 面板欄位 | config key | 必填 | 預設值 | 說明 |
|---|---|---|---|---|
| 目標欄位 | target_field | 必填 | — | 從目前配對表單的 schema 挑一個欄位 key(下拉選單來源是已載入的表單欄位快取)。也接受 ${form.欄位key} 或 ${表單代碼_欄位key} 這種變數語法格式, 節點會自動解析出真正的欄位 key 再寫入,兩種寫法效果一樣。 |
| 寫入內容 | content | 必填 | — | 一段字串,寫入前會先做變數替換,${f.} ${fi.} ${v.} ${wi.} ${n.} ${t.} 各種前綴都可以混用在同一段內容裡。 內容中字面上的 \n(反斜線加 n,不是按 Enter 打出來的真正換行)會依「內容格式」轉換。 |
| 內容格式(Text/HTML) | content_type | 選填 | text | text:字面 \n 轉成真正換行。html:字面 \n 轉成 ,適合寫進會被當 HTML 渲染的欄位。 |
可讀取:content 在寫入前會整段做變數替換,支援全部前綴—— ${f.欄位key} 讀這次送單的表單欄位、${fi.xxx} 讀表單資訊、 ${v.變數名} 讀流程變數、${wi.xxx} 讀流程實例資訊、${n.xxx} 讀節點自身資訊、${t.now} 讀節點執行當下的 UTC 時間。
寫出:把變數替換完成的內容寫進 target_field 對應的表單欄位; 同時會同步兩個流程變數——{表單模板 secure_code}_{target_field} 與裸的 target_field 本身,兩者值相同,方便後面的節點直接用 ${v.target_field} 引用剛寫入的值,不需要再重新讀一次表單。
覆蓋語意:一律整段覆蓋既有值,沒有「附加」或「合併」模式;這與 「設定變數(OpSet)」的字串串接(concat)運算是兩回事——那是針對流程變數的 串接,跟表單欄位無關。
OpFieldWrite 沒有出線選擇邏輯,不會像 Branch 或 FormAdapter 那樣產出「挑選出線」用的資料,固定回報執行成功,交給引擎套用通用規則——取它的 全部出線。設計上通常只接一條。
只有寫入過程中真的丟出例外(例如底層資料操作失敗這類基礎設施層級的問題)才會回報失敗,節點被標記 FAILED 並依平台的重試機制處理。target_field 或 content 任一留空不是失敗,見下方「6. 注意事項」。


目標欄位或內容留空,卻顯示執行成功
症狀:節點在畫布上執行完成顯示正常(綠色),表單完全沒有被改動,也沒有任何錯誤訊息。
原因:只要 target_field 或 content 任一為空,節點會直接回報 「已跳過」,這不是失敗;連節點的設定驗證也一律允許空設定通過。
正確做法:兩個欄位都要填。如果懷疑某次流程沒有寫入,先查該節點執行紀錄裡是不是標了 「已跳過」,不要只看節點顏色是不是綠的。
手動輸入了表單 schema 裡沒有的欄位 key
症狀:節點顯示執行成功,值也真的寫進了表單資料,但打開表單中心這張單完全看不到剛才寫的 內容。
原因:表單畫面依 schema 渲染,資料裡多出的鍵不會對應到任何畫面元件;這個節點本身不會檢查 target_field 是否真的存在於表單 schema。
正確做法:一律用面板下拉選單挑選欄位(選單內容來自已配對表單的 schema),不要手動輸入陌生的 key;如果表單改過 schema,先按重新載入按鈕更新欄位清單再選。
想讓內容「附加」在舊值後面
症狀:每次流程跑完,該欄位的值都是這次寫入的新內容,先前的值(不管是使用者原本填的,還是 上一次流程寫的)完全消失。
原因:這個節點一律整段覆蓋,沒有「附加」或「合併」模式。
正確做法:如果需要保留舊值再接新內容,要在 content 裡自己用 ${f.同一個欄位} 把舊值讀出來,寫進新內容的一部分,再整段一起寫入。
目標欄位用了巢狀路徑格式
症狀:target_field 用了類似 a.b[0].c 這種巢狀格式,執行仍顯示 成功,但欄位值沒有變。
原因:寫入巢狀路徑時,若路徑中間層的資料型別不符、或陣列索引超出範圍,底層寫入邏輯會判定失敗, 但這個節點沒有檢查這個結果,照樣提交並回報「已寫入欄位」。
正確做法:盡量只對 schema 裡本來就存在的一般欄位 key 使用這個節點;牽涉到容器或表格類元件 (欄位值本身就是巢狀結構)時,先實際跑一次確認值真的落在你以為的位置。
對應「NT-21 OpFieldWrite 示範」:Start → 設定變數(OpSet,準備 reviewer_note)→ 寫回處理結果(OpFieldWrite,混合固定文字、表單欄位、流程 變數與時間戳寫進「系統處理結果」欄位)→ 簽核(發起人自己)→ End。到表單中心找到「NT-21 OpFieldWrite 示範表單」,填「申請原因」後送出(「系統處理結果」欄位留空即可,會由節點自動填入), 在待辦裡簽核完成後回頭打開這張單,「系統處理結果」欄位應該已經被自動填上一段文字;也可以直接查 fw_form_instances.form_data 確認 JSON 裡對應鍵的值真的改了,同時 fw_workflow_variables 會多出同名的流程變數,這是節點寫入後順便同步的。