Skip to content

引擎 API ​

jeeflow-node 引擎对外接口(src/engine.ts 的 EngineImpl)。语义与 Java 参考实现一一对应,TypeScript 类型。

构造引擎 ​

ts
import { EngineImpl } from '@mldong/jeeflow/engine'
import { MemoryRepository } from '@mldong/jeeflow/memory'

const repo = new MemoryRepository()          // 内存仓储(演示/测试用)
const engine = new EngineImpl(repo, userProv?, idGen?, exprEval?, opts?)
//                                  ├── UserProvider(可选)
//                                  ├── IDGenerator(可选)
//                                  ├── ExpressionEvaluator(可选,决策/会签表达式)
//                                  └── EngineOptions(可选){ surrogateRepository?, surrogateEnabled? }

委托代理自动生效(默认开启) ​

引擎在建单那一刻(参与者解析完成后、落库前)对每个参与者查一次生效委托,命中则把代理人并入 该任务的参与者集合(授权人保留,任一可办)。new JeeflowFacade(engine, repo, extRepo) 会自动把 扩展仓储注入委托查询面,集成方零配置即生效;未注入时静默跳过,不打断建单。

ts
engine.setSurrogateRepository(extRepo)      // 注入查询源(ProcessExtRepository 或仅实现 getSurrogate 的对象)
engine.setSurrogateEnabled(false)           // 显式关闭 → 回到"仅台账"
engine.setSurrogateRepository(null)         // 或摘掉查询源
engine.setSurrogateRepository({ getSurrogate: async () => null })  // 或注册空实现
engine.isSurrogateEnabled()                 // 只读自检

核心方法 ​

ts
interface Engine {
  startProcessInstanceById(defineId: number, operator: string, args?: Record<string, any>): Promise<ProcessInstance>
  executeProcessTask(taskId: number, operator: string, args?: Record<string, any>): Promise<ProcessInstance>
  executeAndJumpToEnd(taskId: number, operator: string, args?: Record<string, any>): Promise<ProcessInstance>          // 拒绝(REJECT=2)→ 实例 45
  executeAndJumpTask(taskId: number, operator: string, args: Record<string, any>, targetTaskName?: string): Promise<ProcessInstance>  // 跳转(JUMP=4)/退回上一步(ROLLBACK=3,血缘版:复活血缘前驱行,见规范 04)
  executeAndJumpToFirstTaskNode(taskId: number, operator: string, args?: Record<string, any>): Promise<ProcessInstance> // 退回发起人(ROLLBACK_TO_OPERATOR=6)
}
ts
// 启动并自动完成申请节点(startAndExecute 契约,调用方实现)
const inst = await engine.startProcessInstanceById(1, 'user1', { amount: 500 })
for (const task of await repo.findDoingTasks(inst.id)) {
  await repo.addTaskActor(task.id, [operator])
  await engine.executeProcessTask(task.id, 'user1', { submitType: 0 })  // APPLY
}

变量注入 ​

引擎每次操作自动注入用户信息到流程变量:u_userId / u_realName / u_deptId / u_deptName / u_postId / u_postName(来自 UserProvider),key 与 mldong 框架一致。

状态码 ​

  • 实例:10 进行中 / 20 已完成 / 45 已拒绝(InstanceState 枚举)
  • 任务:10 待办 / 20 已完成 / 99 已废弃(TaskState 枚举)

submitType 全枚举行为见设计原理 06。

jeeflow · 轻量级多语言工作流引擎