# 工作流状态

Source: https://openflow.run/zh-cn/docs/concepts/flow-state/
Language: zh-CN
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-cn/docs/nodes/code/index.md)；具体限制和管理方法见[技术契约](https://openflow.run/zh-cn/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)
