# 工作流程狀態

Source: https://openflow.run/zh-tw/docs/concepts/flow-state/
Language: zh-TW
Product version: 0.1.0-beta.77

跨執行儲存程式碼明確寫入的業務值，無需修改工作流程定義。

工作流程狀態（Flow State）儲存程式碼主動寫入的業務值。每個值屬於某個工作流程，並按執行來源 `draft` 或 `live` 分開儲存。因此，草稿測試與正式環境執行使用各自獨立的狀態空間。

## 讀寫值

```javascript
export default async function (inputs, context) {
  const previous = await context.state.get("lastProcessedId");
  await context.state.set("lastProcessedId", inputs.id);
  return { previous };
}
```

`get` 回傳 JSON 值的獨立副本，或 null。`set(key, null)` 會刪除該值。`insert` 僅在鍵不存在時寫入，`delete` 刪除鍵，`list` 按順序回傳鍵名。

鍵名長度為 1–256 個 UTF-8 位元組，值必須是 JSON。配額由部署端決定，應讀取服務回傳的限制，不能假定儲存空間無限。

## 寫入時機

寫入會立即持久化。後續任務失敗或執行取消，都不會撤銷這些寫入。發布、回復舊版和編輯修訂版本，也不會複製或重置狀態。

狀態與節點結果、變數和執行日誌分開儲存。它適合儲存明確的業務狀態，不應作為秘密儲存，也不應被用來隱式讀取任意歷史呼叫的資料。

## 檢視與清理

透過部署端的工作流程狀態管理介面操作，並明確選擇 `draft` 或 `live`。清理 Live 狀態會立即影響後續正式環境執行，操作前應確認範圍及業務影響。

執行階段能力見[程式碼節點](https://openflow.run/zh-tw/docs/nodes/code/index.md)；具體限制和管理方法見[技術契約](https://openflow.run/zh-tw/docs/reference/contracts/index.md)。

## 資料來源

*   [docs/architecture.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/architecture.md#flow-state)
*   [docs/control/contracts/nodejs-runtime.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/control/contracts/nodejs-runtime.md#flow-state-engine-v10)
*   [docs/control/contracts/control-api.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/control/contracts/control-api.md#flow-state)
