资讯动态

NocoBase 界面搭建:将操作按钮绑定工作流,实现数据操作自动化

发布时间:2026/9/16 18:16:15 来源:尧图企业网站定制
NocoBase 界面搭建将操作按钮绑定工作流实现数据操作自动化【免费下载链接】nocobaseNocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase本文介绍 NocoBase 界面搭建中「操作按钮绑定工作流」的完整机制哪些操作按钮可以绑定、支持哪几类工作流触发事件、同时绑定多个工作流时的执行顺序规则并结合plugin-workflow-action-trigger与plugin-workflow-custom-action-trigger两个插件的源码剖析「触发参数如何传递、同步/异步工作流如何分组执行、请求如何被拦截」的底层实现。读完本文你既能按官方文档正确配置按钮级工作流绑定也能从源码层面理解触发链路与排障要点。什么是“绑定工作流”在 NocoBase 的界面搭建中部分操作按钮表单的“提交”、“保存”按钮数据行中的“更新数据”、“删除”按钮以及独立的“触发工作流”按钮可以在操作设置中配置绑定工作流将该提交操作与工作流关联起来实现数据的自动化处理参见 绑定工作流 原始文档。典型应用场景订单表单点击“提交”后自动触发审批流程表格行点击“删除”前先经过一道预校验或者通过一个自定义“触发工作流”按钮对当前选中记录发起一条完全自定义的自动化流程。从源码结构看界面按钮与后端触发器之间有明确的分工plugin-workflow-action-trigger负责常规的“操作触发”action 类型在 Plugin.ts 中通过workflowPlugin.triggers.register(action, new ActionTrigger(workflowPlugin))向工作流引擎注册action触发器plugin-workflow-custom-action-trigger负责“触发工作流”按钮使用的“自定义操作事件”其 CustomActionTrigger.ts 在触发器配置 Schema 中额外要求声明上下文类型单条记录 / 多条记录 / 全局这对应文档中“触发工作流”按钮一行的独立能力。前端侧按钮上的工作流绑定配置由客户端组件完成例如 ActionTriggerConfig.tsx 与 TriggerWorkflowActionModels.tsx。支持的操作按钮和工作流类型这是该功能的核心约束矩阵配置前务必确认组合是否受支持完整表格继承自官方文档操作按钮 \ 工作流类型操作前事件操作后事件审批事件自定义操作事件表单的“提交”、“保存”按钮✅✅✅❌数据行表格、列表等中的“更新数据”按钮✅✅✅❌数据行表格、列表等中的“删除”按钮✅❌❌❌“触发工作流”按钮❌❌❌✅四类触发事件各有对应插件与文档官方文档中“更多”章节指向的链接在仓库中实际对应以下路径操作后事件数据操作成功之后触发常用于联动通知、写日志、发起下游流程操作前事件数据操作执行之前拦截可用于校验、阻断本次操作这也是“删除”按钮唯一支持的绑定类型——删除不可回滚只能做前置校验不能做事后处理审批事件提交后进入审批流程由工作流中的节点如人工节点决定放行与否自定义操作事件由“触发工作流”按钮显式发起支持单条记录、多条记录或全局三种上下文。值得注意的是“触发工作流”按钮只能绑定自定义操作事件且服务端会显式校验CustomActionTrigger的 recordTriggerAction 逻辑 中若请求未携带triggerWorkflows参数直接抛出 400 错误parameter triggerWorkflows is required说明该按钮的触发完全由前端按钮配置驱动而非挂靠在数据动作上。触发原理从按钮点击到工作流执行以最常见的“提交/更新后触发操作后事件”为例核心实现在 ActionTrigger.ts。挂载点数据动作中间件ActionTrigger的构造函数中向数据源管理器注册了一个中间件ActionTrigger.ts#L63-L73workflow.app.dataSourceManager.use(async function triggerWorkflowActionMiddleware(context, next) { await next(); const { actionName } context.action; if (![create, update].includes(actionName)) { return; } return self.collectionTriggerAction(context); });要点await next()表明该中间件先放行动作本身执行数据已经落库再检查是否为create/update动作——这正是“操作后事件”的语义只有 create/update 会进入工作流匹配逻辑查询、删除等动作直接跳过触发器配置中的collection字段必须指向一个真实存在的集合配置保存时会通过validateCollectionField校验ActionTrigger.ts#L46-L56。触发参数triggerWorkflows 的格式按钮与工作流的关联通过请求参数triggerWorkflows传递。从源码解析逻辑看其格式为逗号分隔的工作流key每个 key 后可选带!数据路径后缀即形如key1!fields.a, key2ActionTrigger.ts#L126triggerWorkflows.split(,).map((trigger) trigger.split(!))。!后的数据路径用于从响应数据中定位子记录如果表单包含子表嵌套关联可以指定工作流监听的是主记录还是某个子集合中的记录匹配时会沿着路径逐级取关联必要时通过关联 accessor 加载见 ActionTrigger.ts#L170-L204。此外触发时还会把脱敏后的当前用户desensitize()处理与角色名一并注入事件上下文工作流下游节点可以引用“操作人”信息。若工作流配置了appends需要额外关联数据会按主键重新findOne并加载关联再触发。执行分组同步先、异步后一个动作命中多个工作流时代码会先按workflow.sync字段把事件分成syncGroup与asyncGroupActionTrigger.ts#L155-L160这正对应官方文档中的执行顺序规则同一触发类型的工作流中同步的工作流先执行异步的工作流后执行同一触发类型的工作流按配置顺序执行——源码中同步组按syncGroup.entries()的顺序逐个await this.workflow.trigger(...)串行触发不同触发类型之间操作前事件一定先于操作后和审批事件执行操作后与审批事件没有特定顺序业务不应该依赖于配置顺序。同步工作流可以“拦截”请求这是源码层面最值得注意的行为。同步工作流执行后代码根据执行状态分三种处理ActionTrigger.ts#L253-L297执行成功RESOLVED正常放行继续后续工作流被拦截状态低于 STARTED如果最后执行节点是end节点说明工作流主动要拦截本次请求——此时抛出RequestOnActionTriggerError400把context.state.messages作为错误信息返回给前端数据操作在界面上会提示失败非 end 节点导致的失败则抛出 500执行完成但仍 pending说明同步工作流卡住例如内部存在异步等待节点抛出 500 提示工作流挂起。该 400 错误由插件注册的错误处理器统一转换成{ errors: [...] }响应体ActionTrigger.ts#L75-L83保证前端能拿到结构化错误提示。异步工作流的延迟触发异步工作流不会阻塞请求scheduleAsyncWorkflowTriggers会监听响应res的finish事件响应真正写回客户端后再统一setTimeout触发延迟常量ASYNC_WORKFLOW_TRIGGER_DELAY_MS 200毫秒ActionTrigger.ts#L32、L300-L330。单个异步工作流触发失败只记录错误日志、不影响其他工作流也不会影响已经返回给用户的响应。这一设计与文档中“操作后和审批事件没有特定顺序”的提示互为印证异步事件彼此之间以及与操作完成之间都存在时序解耦业务上不应依赖它们与主请求的先后关系。多工作流绑定的配置实践结合上述规则给出配置建议能用异步就不用同步只有需要“根据结果放行或拦截本次操作”的场景前置校验、审批阻断才应使用同步/操作前/审批类型通知、日志类联动建议异步避免拖慢用户操作响应同步工作流内部不要再放人工节点同步工作流在请求线程内执行包含等待人工处理等会挂起的节点会导致“同步工作流 still pending”的 500 错误删除按钮只挂操作前事件这是文档矩阵中唯一允许的删除场景绑定用于删除前校验表单含子表时通过!数据路径明确工作流监听的数据层级避免误触发操作后与审批不要混用于有顺序依赖的流程两者顺序未定义确有依赖时应合并到同一个工作流内部编排。相关文档与源码索引原始功能文档绑定工作流触发器文档操作前事件、操作后事件、审批事件、自定义操作事件核心源码ActionTrigger.tsaction 触发器、CustomActionTrigger.ts自定义操作触发器、Plugin.ts触发器注册入口测试参考trigger.test.ts 覆盖了 action 触发器的触发行为configuration1.test.ts 等端到端用例覆盖了按钮配置流程适用前提以上行为以当前仓库中的插件实现为准action触发器中间件目前仅拦截create/update动作工作流需在界面上先启用源码按enabledCache匹配启用的工作流才能被按钮命中。【免费下载链接】nocobaseNocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价