流程表单一体化创建
资源边界:本技能只处理普通 OpenYida 流程表单创建;目标不明时先只读确认或询问用户。
Resource-First 使用门槛
本技能不是“审批/流程”诉求的默认入口。执行前必须先解析 app/form/process context:
- 已有流程表单、
processCode、流程表单 URL 或 bound process 时,禁止从零创建,改用yida-process-rule配置/更新节点、分支、字段权限。 - 已有普通表单
formUuid且用户明确要把这张表单转成审批流程时,可使用用法 2(--formUuid)复用该表单;不得新建同名表单。 - 只有没有目标表单/流程,且用户明确要新建带审批的数据入口或完整审批系统时,才使用用法 1 或推荐两步流程创建新表单再转流程。
- 多个表单/流程候选按根技能来源优先级选择;同级冲突或无法判断要改哪条流程时才问用户。
严格禁止 (NEVER DO)
- 不要编造 processCode,必须从命令返回的 JSON 中提取
- 不要在流程定义中使用猜测的 fieldId,必须先用
yida-get-schema获取 - 不要在流程定义
nodes中声明start/startNode/end/endNode/finish节点;OpenYida 会自动生成发起和结束节点 - 不要把审批节点写成
approve;CLI 支持的是approval(名词),别名可用approver/approvalNode - 不要用 shell heredoc、
cat/echo/printf/tee或重定向生成字段定义、流程定义 JSON 文件 - 已有流程表单、
processCode或 bound process 时,不要从零创建流程表单;改用yida-process-rule。
严格要求 (MUST DO)
- 创建前必须确认:执行创建命令前,必须向用户确认表单名称、流程配置和目标应用,获得用户明确同意后再执行
- 优先使用用法 2(先创建表单获取字段 ID,再
--formUuid转流程) - 创建成功后,将 formUuid 和 processCode 记录到
.cache/<项目名>-schema.json - 流程定义中字段 ≥ 3 且审批节点 ≥ 2 时,必须自动配置字段权限
- 字段定义和流程定义文件必须用 agent 的结构化文件写入工具创建到
<projectRoot>/.cache/openyida/<项目名或任务名>/;不要在仓库根目录、系统临时目录或.cache/顶层生成fields.json、process-definition.json等临时文件 - 本技能不读写 memory:formUuid 和 processCode 输出到 stdout,通过
.cache/<项目名>-schema.json持久化,不依赖跨会话的 memory 状态 - 创建或转换任何远程资源前,CLI 必须先完成字段和流程定义的纯本地编译;本地编译失败时远程写入数必须为 0
- 复用普通表单时由
configure-process统一执行表单模式只读 preflight、必要转换、发布与平台 view 回读,不要在外层先手动转换表单
配置失败后的原表恢复
create-process返回success:false且包含formUuid时,该表单已经存在,失败的是后续配置;新建模式与复用模式均适用。保存返回的appType/formUuid,禁止去掉--formUuid、再次create-form或另建同名表作为恢复手段。- 先按错误中的
stage、nextStep和recovery检查原表状态及权限。修正明确原因后只能复用原formUuid,使用返回的完整retryCommand;不得自动补--replace绕过已绑定流程的保护。 noWriteRetry:true、NON_IDEMPOTENT_RESULT_UNKNOWN或PUBLISHED_UNVERIFIED表示远程结果未确认:只读核实原表/流程,不能执行写重试,也不能新建替代资源。- 无法安全恢复时保留原表,并向用户报告原表链接、失败阶段和需处理的问题;不要宣称流程已完成。
适用场景
用户需要"创建审批流程"、"新建流程表单"、"搭建审批系统",且 resource context 没有既有流程/表单目标时使用。
关键区分:
- 从零创建流程表单(含表单+流程配置)→ 本技能
- 为已有表单或流程配置/修改审批规则 →
yida-process-rule;已有普通表单要转流程时仅使用本技能的--formUuid复用模式
触发条件
正向触发:
- "创建审批流程"、"新建流程表单"
- "搭建审批系统"、"创建带审批的表单"
- 需求中含「审批」「流程」「申请」「审核」「工单」等关键词,且尚无目标表单/流程
用法 1:全新创建
bashopenyida create-process <appType> <formTitle> <fieldsJsonFile> <processDefinitionFile> [--replace]
用法 2:复用已有表单(推荐)
bashopenyida create-process <appType> --formUuid <formUuid> <processDefinitionFile> [--replace]
推荐用法 2:先用
openyida create-form create创建表单获取字段 ID,再用--formUuid转流程表单。
| 参数 | 必填 | 说明 |
|---|---|---|
appType | 是 | 应用 ID |
formTitle | 用法 1 必填 | 表单名称 |
fieldsJsonFile | 用法 1 必填 | 字段定义文件(格式同 yida-create-form-page) |
--formUuid | 用法 2 必填 | 已有表单 UUID |
processDefinitionFile | 是 | 流程定义文件(格式同 yida-process-rule) |
--replace | 条件必填 | 仅当目标已存在 PUBLISHED 流程或 SAVED 草稿,并已获得用户对整图替换的明确确认时传入 |
参数不确定时先看 openyida create-process --help。缺参、重复参数或未知选项会在读文件和登录前返回 CREATE_PROCESS_INVALID_ARGUMENTS;按 details.argument 定位参数、details.reason 判断原因,修正后重试。复用参数写作 --formUuid。
输出
json{"success":true,"formUuid":"FORM-YYY","formMode":"create","formTitle":"订单处理表","appType":"APP_XXX","fieldCount":6,"processCode":"TPROC--XXX","processId":"83145794990","processVersion":2,"verificationLevel":"PLATFORM_VIEW_VERIFIED","platformViewVerified":true,"url":"{base_url}/APP_XXX/workbench/FORM-YYY"}
formMode 区分新建(create)和复用(reuse)。复用模式不读取表单名称和字段数,formTitle、fieldCount 返回 null,表示未查询,不代表字段为空或转换失败;新建模式返回传入名称和创建结果中的字段数。配置失败时返回的表单信息也遵循此约定。流程是否成功以 success 和 verificationLevel 为准,不能根据字段数判断。
流程定义最小 DSL 合约
processDefinitionFile 只描述发起和结束之间的业务节点。OpenYida 编译器会自动注入发起节点和结束节点,nodes 数组里不要手写任何 start/end 节点。
节点参数按需加载 use_skill("yida-flow-node-config", "流程;所需节点类别或配置项")。发起页字段权限用顶层 startFormConfig;谁能发起用表单 START 权限组。保存发布和整图替换仍遵循 yida-process-rule,不必为简单人员配置加载全部高级节点。
合法基础节点类型只使用这些值:
| 节点意图 | type 写法 |
|---|---|
| 审批 | approval |
| 办理 / 填写 | operator |
| 条件分支 | route |
| 并行分支 | parallel |
| 抄送 | carbon |
| 多人审批 | multiApproval,并设置 mode: all|or|oneByOne 与必填 approver |
常见误写必须修正:
| 错误写法 | 正确处理 |
|---|---|
start, startNode, StartNode | 删除该节点,CLI 自动生成发起节点 |
end, endNode, finish, FinishNode | 删除该节点,CLI 自动生成结束节点 |
approve | 改成 approval |
最小合法流程定义示例:
json{ "nodes": [ { "type": "approval", "name": "主管审批", "approver": "originator" } ] }
带条件分支示例:
json{ "nodes": [ { "type": "route", "name": "金额分支", "conditions": [ { "name": "5万以上", "rules": [ { "fieldId": "numberField_amount", "fieldName": "采购金额", "componentType": "NumberField", "op": "GreaterThanOrEqual", "value": 50000 } ], "childNodes": [ { "type": "approval", "name": "总经理审批", "approver": "originator" } ] }, { "name": "5万以下", "rules": [ { "fieldId": "numberField_amount", "fieldName": "采购金额", "componentType": "NumberField", "op": "LessThan", "value": 50000 } ], "childNodes": [ { "type": "approval", "name": "部门经理审批", "approver": "originator" } ] } ] } ] }
推荐两步流程
- 使用 create_file / Write / file edit tool 创建字段定义:
<projectRoot>/.cache/openyida/order/order-fields.json - 执行表单创建命令,获取真实
formUuid和fieldId。 - 使用结构化文件写入工具创建流程定义:
<projectRoot>/.cache/openyida/order/process-definition.json - 执行流程转换命令。
bash# 以下命令默认在 OpenYida project 工作目录内执行;从 workspace 根执行时路径加 project/ 前缀。 openyida create-form create "APP_XXX" "订单处理表" .cache/openyida/order/order-fields.json openyida create-process "APP_XXX" --formUuid "FORM-YYY" .cache/openyida/order/process-definition.json
流程定义中的
fieldId需在表单创建后确定。如流程不含条件分支、字段权限或数据节点字段映射,可用用法 1 一步到位。
AI 自动生成流程特性
生成流程定义 JSON 时,必须自动分析并生成:
- 🔐 字段权限:当字段 ≥ 3 且审批节点 ≥ 2 时,每个节点只允许编辑相关字段
- 🔄 跳转规则:存在回退/循环语义时,自动配置
routeRules - 🔀 并行/办理/高级组件:需要并行会审、办理节点或连接器/数据/消息等官方组件节点时,流程定义格式直接参考
yida-process-rule - 加签/转交操作权限:用户要求开启时,加载
use_skill("yida-flow-node-config", "操作按钮"),生成nodes[].actions.normalActions/appendActions;未要求时保持默认关闭。create-process与configure-process共用编译器,无需新增命令或手写运行字段。禁止仅修改hidden后提交原始运行 JSON。
需要流程规则细节时,调用 use_skill("yida-process-rule", "配置已有流程节点、分支和字段权限")。
异常处理
| 异常场景 | 处理方式 |
|---|---|
| 命令返回失败 | 检查 appType 和 formUuid 是否正确,确认登录态有效 |
| processCode 获取失败 | 确认表单已成功转为流程表单类型,重新执行 |
| 流程定义 JSON 格式错误 | 加载 yida-process-rule 子技能,按其中的 JSON 格式说明修正 |
PROCESS_COMPILE_ACTION_CONFIG_INVALID | 本地编译已拦截无效操作权限,修正报错节点的加签位置、结果或按钮配置后再执行;不要通过删除校验或手动补运行 JSON 绕过 |
| 返回 JSON 中无 processCode | 不要猜测 processCode,重新执行命令获取 |
| 流程发布失败 | 检查流程定义中的 fieldId 是否为真实 ID(先 get-schema 获取) |
| 登录态失效 | 执行 openyida login 重新登录后再试 |
| appType 格式错误 | 确认格式为 APP_ 开头的字符串 |
| formUuid 格式错误 | 确认格式为 FORM- 开头的字符串 |
CONFIGURE_PROCESS_REPLACE_REQUIRED | 展示完整替换摘要并再次取得用户明确确认;确认后才可补 --replace 执行一次 |
CONFIGURE_PROCESS_OWNERSHIP_UNVERIFIED | 停止;核对 appType、formUuid 和 binding,不得猜测 processCode |
NON_IDEMPOTENT_RESULT_UNKNOWN | 写入结果未知;不得自动重试,先只读查询目标版本和平台状态 |
PUBLISHED_UNVERIFIED | 发布可能已生效但平台 view 未完整验证;不得宣称成功或 processJson verified,不得直接重试写入 |
| 网络超时 | 若发生在只读 preflight 可检查网络后重试;若发生在写入边界按结果未知处理,先只读核对状态 |
Agent 错误处理策略
当 Agent 执行本技能遇到错误时,必须遵循以下默认行为:
| 错误类型 | 默认处理策略 |
|---|---|
| 命令执行失败 | 停止执行,向用户展示完整错误信息,询问是否重试或调整参数 |
| 参数格式错误 | 停止执行,提示正确的参数格式,引导用户修正 |
| 登录态失效 | 提示用户执行 openyida login 重新登录 |
| processCode 缺失 | 停止执行,不得编造,提示用户重新执行命令 |
已有流程或草稿但缺少 --replace | 展示替换摘要并请求明确确认;未确认不执行写入 |
| 写入结果未知或发布未验证 | 停止自动重试,只读核对平台状态并报告机器码 |
| fieldId 不存在 | 停止执行,提示用户先执行 yida-get-schema 获取真实 ID |
| 用户拒绝确认 | 停止执行,询问用户是否需要调整配置 |
| 未知错误 | 停止执行,完整展示错误信息,建议用户反馈问题 |


