跳到主要内容

RPC 资源

启用模块后,会注册以下 RPC 资源。这些操作都不是公开接口:调用者必须已认证; 表中列出 RequiredPermission 时还会校验对应权限点。

RPC 调用使用 API 里的标准 envelope:resourceactionversionparamsmeta。下面标成 params.* 的字段从 params 解码; 标成 meta.* 的字段从 meta 解码。生成的 运行时 API 索引 包含每个请求/响应 DTO 的 完整 JSON 字段 ledger。

approval/category

Action权限参数说明
find_treeapproval.category.queryCategorySearch按租户过滤的树查询
find_tree_optionsapproval.category.queryCategorySearch + DataOptionConfig按租户过滤的树形选项
createapproval.category.createCategoryParams非 super-admin 的租户由调用者覆盖写入
updateapproval.category.updateCategoryParams非 super-admin 只能修改自己租户的数据
deleteapproval.category.delete主键参数非 super-admin 只能删除自己租户的数据
Action请求字段
find_treemeta.namemeta.isActivemeta.sort
find_tree_optionsmeta.namemeta.isActivemeta.sort,以及 option 映射 metadata:meta.labelColumnmeta.valueColumnmeta.descriptionColumnmeta.metaColumns
createparams.idparams.tenantId 必填、params.code 必填、params.name 必填、params.iconparams.parentIdparams.sortOrderparams.isActiveparams.remark
updateparams.idparams.tenantId 必填、params.code 必填、params.name 必填、params.iconparams.parentIdparams.sortOrderparams.isActiveparams.remark
deleteparams.id 必填

approval/delegation

Action权限参数说明
find_pageapproval.delegation.queryDelegationSearch + pageable meta非 super-admin 只查询自己的委托
createapproval.delegation.createDelegationParams非 super-admin 的 delegator 由调用者覆盖写入
updateapproval.delegation.updateDelegationParams非 super-admin 不能转移委托所有权
deleteapproval.delegation.delete主键参数非 super-admin 按委托所有者限制
Action请求字段
find_pagemeta.delegatorIdmeta.delegateeIdmeta.isActivemeta.sortmeta.pagemeta.size
createparams.idparams.delegatorId 必填、params.delegateeId 必填、params.flowCategoryIdparams.flowIdparams.startTimeparams.endTimeparams.isActiveparams.reason
updateparams.idparams.delegatorId 必填、params.delegateeId 必填、params.flowCategoryIdparams.flowIdparams.startTimeparams.endTimeparams.isActiveparams.reason
deleteparams.id 必填

approval/flow

Action权限参数说明
createapproval.flow.createCreateFlowParams开启审计
deployapproval.flow.deployDeployFlowParams开启审计
publish_versionapproval.flow.publishPublishVersionParams开启审计
updateapproval.flow.updateUpdateParams开启审计
toggle_activeapproval.flow.updateToggleActiveParams开启审计
get_graphapproval.flow.queryGetGraphParams读取已发布流程图
find_flowsapproval.flow.queryFindFlowsParams分页查询流程
find_initiatorsapproval.flow.queryFindInitiatorsParams查询发起人配置
find_versionsapproval.flow.queryFindVersionsParams查询单个流程的版本列表
Action请求字段
createparams.tenantId 必填、params.code 必填、params.name 必填、params.categoryId 必填、params.bindingMode 必填、params.iconparams.descriptionparams.businessBindingparams.adminUserIdsparams.isAllInitiationAllowedparams.instanceTitleTemplateparams.initiators
deployparams.flowId 必填、params.descriptionparams.flowDefinition 必填、params.formSchemaparams.storageMode
publish_versionparams.versionId 必填
updateparams.flowId 必填、params.name 必填、params.bindingMode 必填、params.instanceTitleTemplate 必填、params.iconparams.descriptionparams.businessBindingparams.adminUserIdsparams.isAllInitiationAllowedparams.initiators
toggle_activeparams.flowId 必填、params.isActive
get_graphparams.flowId 必填、params.tenantId
find_flowsparams.tenantIdparams.categoryIdparams.keywordparams.isActiveparams.pageparams.pageSize
find_initiatorsparams.flowId 必填、params.tenantId
find_versionsparams.flowId 必填、params.tenantId

params.initiators 条目使用 kinduserroledepartment)和 idsparams.formSchema 是可选的宿主自有表单设计器文档,框架原样透传(见 表单 Schema 与派生字段);没有表单的 流程直接省略它。业务绑定场景下,params.businessBinding 是一个 approval.BusinessBindingConfig 对象(tableNamekeyColumnsstatusColumninstanceIdColumn 必填,startedAtColumn / finishedAtColumn / statusMapping 可选);所有标识符都会经过 ValidateBusinessIdentifier 校验,记录键必须与真实表上的非空主键或唯一键 完全一致,且实例运行期间绑定设置保持冻结(ErrFlowBindingLocked)。

approval/instance

Action权限参数说明
startapproval.instance.startStartParams开启审计
process_taskapproval.task.processProcessTaskParams开启审计;action 必须是 approverejecttransferrollbackhandle
withdrawapproval.instance.withdrawWithdrawParams开启审计
resubmitapproval.instance.resubmitResubmitParams开启审计;接受已退回或已撤回的实例
add_ccapproval.instance.ccAddCCParams开启审计
mark_cc_readapproval.instance.ccMarkCCReadParams读回执,不开启审计
add_assigneeapproval.task.add_assigneeAddAssigneeParams开启审计;addTypebeforeafterparallel
remove_assigneeapproval.task.remove_assigneeRemoveAssigneeParams开启审计
urge_taskapproval.task.urgeUrgeTaskParams额外限流:1m 内最多 10
Action请求字段
startparams.tenantId 必填、params.flowCode 必填、params.businessRef 最多 512 字符、params.formData
process_taskparams.taskId 必填、params.action 必填(approverejecttransferrollbackhandle)、params.opinion 最多 2000 字符、params.formDataparams.attachments 最多 20 项,每项最多 512 字符、params.transferToIdparams.targetNodeId
withdrawparams.instanceId 必填、params.reason 最多 2000 字符
resubmitparams.instanceId 必填、params.formData
add_ccparams.instanceId 必填、params.ccUserIds 必填,1-50 个 ID
mark_cc_readparams.instanceId 必填
add_assigneeparams.taskId 必填、params.userIds 必填,1-50 个 ID,params.addType 必填(beforeafterparallel
remove_assigneeparams.taskId 必填
urge_taskparams.taskId 必填、params.message 最多 500 字符

approval/my

自助查询不声明 RequiredPermission,但仍要求当前调用者已认证。

Action参数输出
find_available_flowsFindAvailableFlowsParamspage.Page[my.AvailableFlow]
find_initiatedFindInitiatedParamspage.Page[my.InitiatedInstance]
find_pending_tasksFindPendingTasksParamspage.Page[my.PendingTask]
find_completed_tasksFindCompletedTasksParamspage.Page[my.CompletedTask]
find_cc_recordsFindCCRecordsParamspage.Page[my.CCRecord]
get_pending_countsGetPendingCountsParamsmy.PendingCounts
get_instance_detailGetInstanceDetailParamsmy.InstanceDetail
Action请求字段
find_available_flowsparams.tenantIdparams.keywordparams.pageparams.pageSize
find_initiatedparams.tenantIdparams.statusparams.keywordparams.pageparams.pageSize
find_pending_tasksparams.tenantIdparams.pageparams.pageSize
find_completed_tasksparams.tenantIdparams.pageparams.pageSize
find_cc_recordsparams.tenantIdparams.isReadparams.pageparams.pageSize
get_pending_countsparams.tenantId
get_instance_detailparams.instanceId 必填

my.InstanceDetail 的 JSON payload 包含 instanceformSchematimelineflowGraphavailableActionsfieldPermissions。已提交表单数据在 instance.formData 中;业务绑定流程的 opaque 业务引用在 instance.businessRef 中;formSchema 是实例提交时所对应版本固定下来的 宿主表单设计器文档,原样返回——框架以语义等价的 JSON 存储且从不解释它。 fieldPermissions(v0.38)是按查看者投影的字段交互性映射,为每个顶层表单 字段都物化一个值(visible / editable / hidden / required);客户端 按原样应用,instance.formData 已剥离查看者无权看到的字段(见 节点字段权限)。

availableActions 是查询层给 UI 的提示。对申请人来说,实例可以流转到 withdrawn 时包含 withdraw,实例已退回或已撤回时包含 resubmit。对 pending task 来说,handle 节点包含 handle,其他节点 包含 approve,随后包含 reject,并按当前节点开关追加 transferrollbackadd_assigneeadd_cc。只要实例存在任何 pending task, 还会包含 urge。命令 handler 仍会独立做最终校验。

approval/admin

Action权限参数说明
find_instancesapproval.instance.queryAdminFindInstancesParams非 super-admin 按租户过滤
find_tasksapproval.task.queryAdminFindTasksParams非 super-admin 按租户过滤
get_instance_detailapproval.instance.detailAdminGetInstanceDetailParams完整管理端详情
find_action_logsapproval.action_log.queryAdminFindActionLogsParams要求 instanceId
get_metricsapproval.metrics.queryAdminGetMetricsParams聚合指标
find_business_projectionsapproval.binding.queryAdminFindBusinessProjectionsParams持久化绑定收敛状态(v0.38)
terminate_instanceapproval.instance.terminateAdminTerminateInstanceParams开启审计
reassign_taskapproval.task.reassignAdminReassignTaskParams开启审计
retry_business_projectionapproval.binding.retryAdminRetryBusinessProjectionParams开启审计;立即重试一条 eventual 投影(v0.38)
Action请求字段
find_instancesparams.tenantIdparams.applicantIdparams.statusparams.flowIdparams.keywordparams.pageparams.pageSize
find_tasksparams.tenantIdparams.assigneeIdparams.instanceIdparams.statusparams.pageparams.pageSize
get_instance_detailparams.instanceId 必填
find_action_logsparams.instanceId 必填、params.tenantIdparams.pageparams.pageSize
get_metricsparams.tenantId
find_business_projectionsparams.tenantIdparams.statuspendingprocessingappliedfailed)、params.pageparams.pageSize
terminate_instanceparams.instanceId 必填、params.reason 最多 2000 字符
reassign_taskparams.taskId 必填、params.newAssigneeId 必填、params.reason 最多 2000 字符
retry_business_projectionparams.projectionId 必填

管理端列表和指标查询中,非 super-admin 调用者会忽略提交的 tenantId override, 并被过滤到自己的租户。super-admin 可以传 tenantId 只看一个租户,也可以省略它 获得跨租户可见性。

管理端列表/详情 DTO 在线上的租户字段名保持为 tenantId。原始审计日志仍可通过 find_action_logs 单独分页查询;详情响应携带 timeline 和 flow graph 投影供 UI 渲染。

响应 DTO 字段

管理端响应使用 approval/admin 包中的 DTO:

DTOJSON 字段
admin.InstanceinstanceIdinstanceNotitletenantIdflowIdflowNameapplicantUserInfo)、statuscurrentNodeNamecreatedAtfinishedAt
admin.TasktaskIdinstanceIdinstanceTitleflowNamenodeNameassigneeUserInfo)、statuscreatedAtdeadlinefinishedAt
admin.InstanceDetailinstanceformSchema(宿主设计器文档,原样返回)、timelineflowGraph
admin.InstanceDetailInfoinstanceIdinstanceNotitletenantIdflowIdflowNameflowVersionIdapplicantstatuscurrentNodeIdcurrentNodeNamebusinessRefformDatacreatedAtfinishedAt
admin.ActionLoglogIdactionnodeIdtaskIdoperatortransferTorollbackToNodeIdaddedAssigneesremovedAssigneesccUsersopinionattachmentscreatedAt
admin.MetricstenantIdcapturedAtinstanceCountstaskCountstimeoutTaskCountavgCompletionSecondspendingBindingFailuresbusinessProjectionCountspendingBusinessProjections
admin.BusinessProjectionprojectionIdtenantIdflowIdflowVersionIdownerInstanceIdappliedOwnerInstanceIdbusinessTablerecordKeyconsistencydesiredStatusdesiredStartedAtdesiredFinishedAtdesiredRevisionappliedRevisionstatusattemptCountnextAttemptAtleaseUntillastErrorappliedAtupdatedAt

自助响应使用 approval/my 包中的 DTO:

DTOJSON 字段
my.AvailableFlowflowIdflowCodeflowNameflowIcondescriptioncategoryIdcategoryName
my.InitiatedInstanceinstanceIdinstanceNotitleflowNameflowIconstatuscurrentNodeNamecreatedAtfinishedAt
my.PendingTasktaskIdinstanceIdinstanceTitleinstanceNoflowNameflowIconapplicantUserInfo)、nodeNamecreatedAtdeadlineisTimeout
my.CompletedTasktaskIdinstanceIdinstanceTitleinstanceNoflowNameflowIconapplicantUserInfo)、nodeNamestatusfinishedAt
my.CCRecordccRecordIdinstanceIdinstanceTitleinstanceNoflowNameflowIconapplicantUserInfo)、nodeNameisReadcreatedAt
my.PendingCountspendingTaskCountunreadCcCount
my.InstanceDetailinstanceformSchema(宿主设计器文档,原样返回)、timelineflowGraphavailableActionsfieldPermissions
my.InstanceInfoinstanceIdinstanceNotitleflowNameflowIconapplicantstatuscurrentNodeIdcurrentNodeNamebusinessRefformDatacreatedAtfinishedAt

错误面

可 import 的 approval 包导出四个普通 Go sentinel。它们可用 errors.Is 识别,但它们不是 result.Error,本身不带 API code 或 HTTP status。

错误源包含义
approval.ErrCrossTenantAccessapproval非 super-admin 调用者尝试跨租户访问
approval.ErrInvalidBusinessIdentifierapprovalbusiness table / field 标识符未通过 SQL 标识符白名单
approval.ErrUnknownNodeKindapprovalNodeDefinition.ParseData 遇到不支持的 kind
approval.ErrNodeDataUnmarshalapprovalNodeDefinition.ParseData 无法解码节点 data

内置审批资源通过标准 API envelope 返回模块自己的 result.Error。这些值位于 internal 包中,所以宿主应用应把下表的 code/message 组合视为公开 wire surface, 而不是 import internal Go symbol。

CodeCode constantError valuei18n message key说明
40001ErrCodeFlowNotFoundErrFlowNotFoundapproval_flow_not_foundflow 查找失败
40002ErrCodeFlowNotActiveErrFlowNotActiveapproval_flow_not_activeflow 已禁用
40003ErrCodeNoPublishedVersionErrNoPublishedVersionapproval_no_published_versionflow 没有已发布版本
40004ErrCodeVersionNotDraftErrVersionNotDraftapproval_version_not_draft当前操作要求 draft 版本
40005ErrCodeInvalidFlowDesignErrInvalidFlowDesignapproval_invalid_flow_design图或节点设计未通过校验
40006ErrCodeFlowCodeExistsErrFlowCodeExistsapproval_flow_code_existsflow code 重复
40007ErrCodeVersionNotFoundErrVersionNotFoundapproval_version_not_foundflow version 查找失败
40008ErrCodeInvalidBusinessIdentifierErrInvalidBusinessIdentifierapproval_invalid_business_identifierbusiness table / field 标识符未通过校验
40009ErrCodeInvalidTitleTemplateErrInvalidTitleTemplateapproval_invalid_title_templateinstance title template 无法解析
40010ErrCodeInvalidFormDesignErrInvalidFormDesignapproval_invalid_form_design表单 schema 未通过设计期校验
40011ErrCodeBindingIncompleteErrBindingIncompleteapproval_binding_incompletebusiness binding 缺少必需的 table / key / status / instance-id 字段
40012ErrCodeInvalidBindingModeErrInvalidBindingModeapproval_invalid_binding_modeflow binding mode 超出枚举范围
40013ErrCodeInvalidInitiatorKindErrInvalidInitiatorKindapproval_invalid_initiator_kindflow initiator kind 超出枚举范围
40014ErrCodeInvalidStorageModeErrInvalidStorageModeapproval_invalid_storage_modedeploy 请求的 storage mode 不是 jsontable
40015ErrCodeFlowBindingLockedErrFlowBindingLockedapproval_flow_binding_locked作为稳定错误面保留;版本固定的绑定快照意味着当前 flow 命令不再返回它
40016ErrCodeBindingColumnsConflictErrBindingColumnsConflictapproval_binding_columns_conflict两个 business-binding 字段指向了同一个列
40017ErrCodeBindingUnexpectedErrBindingUnexpectedapproval_binding_unexpectedstandalone flow 却提供了 business binding 配置
40018ErrCodeBindingSchemaInvalidErrBindingSchemaInvalidapproval_binding_schema_invalid配置的绑定表或列在主库中不存在
40019ErrCodeBindingKeyNotUniqueErrBindingKeyNotUniqueapproval_binding_key_not_uniquekey 列没有对应一个完整的非空主键或唯一键
40020ErrCodeBindingStatusMappingInvalidErrBindingStatusMappingInvalidapproval_binding_status_mapping_invalidstatus mapping 含未知状态或映射到空白值
40101ErrCodeInstanceNotFoundErrInstanceNotFoundapproval_instance_not_foundinstance 查找失败
40102ErrCodeInstanceCompletedErrInstanceCompletedapproval_instance_completedinstance 已完成
40103ErrCodeNotAllowedInitiateErrNotAllowedInitiateapproval_not_allowed_initiate调用者不能发起该 flow
40104ErrCodeWithdrawNotAllowedErrWithdrawNotAllowedapproval_withdraw_not_allowed当前状态不允许撤回
40105ErrCodeResubmitNotAllowedErrResubmitNotAllowedapproval_resubmit_not_allowed当前状态不允许重新提交
40106ErrCodeInvalidInstanceTransitionErrInvalidInstanceTransitionapproval_invalid_instance_transitioninstance 状态流转无效
40107ErrCodeBusinessRefRequiredErrBusinessRefRequiredapproval_business_ref_requiredbusiness 绑定流程发起时缺少业务引用
40108ErrCodeBindingTargetBusyErrBindingTargetBusyapproval_binding_target_busy业务记录已被一个未终结的审批实例占有
40109ErrCodeInvalidBusinessRefErrInvalidBusinessRefapproval_invalid_business_ref业务引用无法解析成配置的记录键
40110ErrCodeBindingProjectionNotFoundErrBindingProjectionNotFoundapproval_binding_projection_not_found投影查找失败(管理端重试)
40201ErrCodeTaskNotFoundErrTaskNotFoundapproval_task_not_foundtask 查找失败
40202ErrCodeTaskNotPendingErrTaskNotPendingapproval_task_not_pendingtask 不是 pending
40203ErrCodeNotAssigneeErrNotAssigneeapproval_not_assignee调用者不是该 task 的 assignee
40204ErrCodeInvalidTaskTransitionErrInvalidTaskTransitionapproval_invalid_task_transitiontask 状态流转无效
40205ErrCodeRollbackNotAllowedErrRollbackNotAllowedapproval_rollback_not_allowed此处不允许回退
40206ErrCodeAddAssigneeNotAllowedErrAddAssigneeNotAllowedapproval_add_assignee_not_allowed禁止动态新增 assignee
40207ErrCodeTransferNotAllowedErrTransferNotAllowedapproval_transfer_not_allowed禁止转交
40208ErrCodeOpinionRequiredErrOpinionRequiredapproval_opinion_required必填 opinion 为空
40209ErrCodeManualCcNotAllowedErrManualCcNotAllowedapproval_manual_cc_not_allowed禁止手动 CC
40210ErrCodeRemoveAssigneeNotAllowedErrRemoveAssigneeNotAllowedapproval_remove_assignee_not_allowed禁止动态移除 assignee
40211ErrCodeInvalidAddAssigneeTypeErrInvalidAddAssigneeTypeapproval_invalid_add_assignee_typeaddType 不是 beforeafterparallel
40212ErrCodeNotApplicantErrNotApplicantapproval_not_applicant调用者不是申请人
40213ErrCodeInvalidRollbackTargetErrInvalidRollbackTargetapproval_invalid_rollback_target回退目标不允许
40214ErrCodeLastAssigneeRemovalErrLastAssigneeRemovalapproval_last_assignee_removal移除后会没有 active assignee
40215ErrCodeInvalidTransferTargetErrInvalidTransferTargetapproval_invalid_transfer_target转交或重新指派目标无效
40216ErrCodeNoUsersSpecifiedErrNoUsersSpecifiedapproval_no_users_specified用户列表操作没有提供目标用户
40301ErrCodeNoAssigneeErrNoAssigneeapproval_no_assignee无法解析出 assignee
40302ErrCodeAssigneeResolveFailedErrAssigneeResolveFailedapproval_assignee_resolve_failedassignee resolver 失败
40401ErrCodeFormValidationFailedErrFormValidationFailedapproval_form_validation_failed通用表单校验失败
40401ErrCodeFormValidationFailedErrFormDataTooLargeapproval_form_data_too_large同一 code;JSON 编码后的 formData 超过 64 KiB
40401ErrCodeFormValidationFailed动态表单校验 result.Errapproval_form_field_not_defined, approval_form_field_required, approval_form_field_must_be_string, approval_form_field_must_be_number, approval_form_field_must_be_integer, approval_form_field_min_length, approval_form_field_max_length, approval_form_field_invalid_validation, approval_form_field_pattern_mismatch, approval_form_field_min_value, approval_form_field_max_value, approval_form_field_empty, approval_form_field_invalid_file_item, approval_form_field_must_be_file, approval_form_field_invalid_value, approval_form_field_must_be_row_list, approval_form_field_must_be_row_object, approval_form_field_min_rows, approval_form_field_max_rows, approval_form_field_table_cell字段级校验消息在运行时构造
40601ErrCodeUrgeCooldown动态 urge result.Errapproval_urge_too_frequent没有静态 sentinel;消息会带 minutes;非正数 urgeCooldownMinutes 默认按 30 分钟处理
40701ErrCodeAccessDeniedErrAccessDeniedapproval_access_denied调用者缺少审批域访问权限
40702ErrCodeTerminateNotAllowedErrTerminateNotAllowedapproval_terminate_not_allowed当前 instance 状态不允许终止

ErrEventRouteNotTransactionalErrEventRouteNotSubscribableErrTenantNotResolved 这类启动和租户解析诊断位于 internal/approval/...; 它们不是可 import 的公开 Go API,但 event routing 或 principal tenant details 配错时,操作员可能会看到它们被包装后的错误消息。


下一步:流程设计 了解 deploy 背后的设计器 wire shape,或 实例运行时 了解各实例操作背后的生命周期语义。