设计时流程定义管理(BillDefiController)¶
流程定义(BillDefiVO / .flow)设计时资源管理:流程的增删改查、复制,按当前节点获取前置节点(流程编辑器),子流程获取父流程表单,流程编辑器获取所有流程与模块清单,以及流程参数(FlowParameter)的列表查询与批量保存。
- 接口类型:REST 资源
- 基址:
${myapps.context-path.designer:}/api/designtime/applications(类级@RequestMapping,produces = APPLICATION_JSON_VALUE,@Component继承AbstractDesignTimeController) - Tag:设计时-流程定义模块
公共说明¶
- 鉴权:是(需 designerToken)。所有端点继承自
AbstractDesignTimeController,通过Security.getDesignerIdFromToken(request)从 designerToken JWT 中解析设计器用户。鉴权机制详见 index.md「鉴权说明」。 - 路径变量:
{applicationId}、{moduleId}、{flowId}、{nodeId}均为**明文设计时 ID**(与 designer 其他控制器一致,非 runtime 的 DES 加密密文)。 - 响应:统一
Resource(见 ../index.md「统一响应结构」)。成功errcode=0;异常默认errcode=500,errmsg为异常信息;新建/更新流程时捕获OBPMValidateException(主题为空、流程重名等)返回errcode=40001。 - HTTP 方法:受
CommonSecurityFilter限制,仅允许GET/POST/HEAD/OPTIONS。 - 请求体约定:POST/PUT 多接收原始 JSON 字符串(
@RequestBody String content)或 JSON 字符串数组(@RequestBody String[]),由服务端用JSONObject.fromObject解析为BillDefiVO;批量保存流程参数接收@RequestBody List<FlowParameter>。 - 流程状态约定:新建/更新流程时强制
checkout=true、checkoutHandler=getUser().getId()(编辑期占位,留待流程保存发布时再释放)。
1. 新建流程¶
在指定模块下新建流程定义。请求体反序列化为 BillDefiVO 后做主题非空与重名校验(doSaveValidate),通过则分配设计时序列号并保存。HTTP 状态码固定 201 Created。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/{applicationId}/modules/{moduleId}/workflows(完整:{designer-context}/api/designtime/applications/{applicationId}/modules/{moduleId}/workflows) - 鉴权:是(需 designerToken)
- Tag:设计时-流程定义模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 软件Id |
| moduleId | path | string | 是 | 模块Id |
| content | body | string(JSON) | 是 | 流程对象 JSON |
请求体¶
对应 BillDefiVO 对象 JSON(name、subject、flow、uri 等)。subject(主题)不能为空,否则 errcode=40001、errmsg="{*[workflow.subject.notempty]*}";同模块内 name 重名时 errmsg="{*[workflow.subject.exist]*}"。
响应¶
data:JSONObject,仅含 id(新建流程Id)。校验失败时 errcode=40001。
2. 获取流程列表¶
分页获取指定模块下的流程列表,可按流程名称过滤。返回精简字段(id、name)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/{applicationId}/modules/{moduleId}/workflows - 鉴权:是(需 designerToken)
- Tag:设计时-流程定义模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 软件Id |
| moduleId | path | string | 是 | 模块Id |
| pageNo | query | string | 否 | 页码(缺省 1,经 ParamsTable.getParameterAsString 读取) |
| linesPerPage | query | string | 否 | 每页条数(缺省 10) |
| name | query | string | 否 | 流程名称关键字 |
说明:分页与
name参数通过getParams()读取,未在方法签名上声明,由请求参数绑定。
请求示例¶
GET /api/designtime/applications/{applicationId}/modules/{moduleId}/workflows?pageNo=1&linesPerPage=10&name= HTTP/1.1
响应¶
结构:统一 Resource(见 ../index.md「统一响应结构」)。
data:JSONObject,含 pageNo/linesPerPage/rowCount 与 data(流程精简数组,每项 {id, name})。
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": {
"pageNo": 1,
"linesPerPage": 10,
"rowCount": 2,
"data": [ { "id": "...", "name": "请假流程" } ]
},
"errors": null
}
3. 获取流程详情¶
按流程Id查询单个流程,返回 id、name、authorname、lastmodify、subject、flow、uri 等字段。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/{applicationId}/modules/workflows/{flowId}(注意:路径中workflows前为/modules/,无{moduleId}) - 鉴权:是(需 designerToken)
- Tag:设计时-流程定义模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 软件Id |
| flowId | path | string | 是 | 流程Id |
请求示例¶
响应¶
data:JSONObject,含 id、name、authorname、lastmodify、subject、flow、uri。
{
"errcode": 0,
"errmsg": "ok",
"data": {
"id": "...",
"name": "请假流程",
"authorname": "...",
"lastmodify": "2026-08-04 12:34:56",
"subject": "...",
"flow": "<流程图 JSON/XML>",
"uri": ""
},
"errors": null
}
4. 复制流程(可批量)¶
按流程Id数组批量复制流程(billDefiDesignTimeService.doCopyFlow)。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/{applicationId}/modules/workflows/copy(注意:路径中无{moduleId},使用/modules/workflows/copy) - 鉴权:是(需 designerToken)
- Tag:设计时-流程定义模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 软件Id |
| ids | body | string | 是 | 流程Id数组(@RequestBody String[]) |
请求体¶
响应¶
data:String,成功时为 "复制成功"。
5. 更新流程¶
按流程Id更新流程定义。强制覆盖 id=flowId、applicationid=applicationId,并重置 lastmodify、checkout=true、checkoutHandler。校验失败(主题为空/重名)时 errcode=40001。
- 接口类型:REST 资源
- 请求方式:
PUT - 请求路径:
/{applicationId}/modules/workflows/{flowId} - 鉴权:是(需 designerToken)
- Tag:设计时-流程定义模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 软件Id |
| flowId | path | string | 是 | 流程Id |
| content | body | string(JSON) | 是 | 流程对象 JSON |
请求体¶
对应 BillDefiVO 对象 JSON(name、subject、flow、uri 等)。
响应¶
data:JSONObject,仅含 id(即 flowId)。校验失败时 errcode=40001,errmsg 为 {*[workflow.subject.notempty]*} 或 {*[workflow.subject.exist]*}。
6. 删除流程(可批量)¶
按流程Id数组批量删除流程。
- 接口类型:REST 资源
- 请求方式:
DELETE - 请求路径:
/{applicationId}/modules/workflows - 鉴权:是(需 designerToken)
- Tag:设计时-流程定义模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 软件Id |
| ids | body | string | 是 | 流程Id数组(@RequestBody String[]) |
请求体¶
响应¶
data:String,成功时为 "删除流程"。
7. 根据当前节点获取其他节点¶
按流程Id + 节点Id 获取流程编辑器中需要的关联节点列表(当前实现仅返回 type=0 分支的所有前置节点 getAllBeforeNode,并强制转换为 ManualNode)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/{applicationId}/modules/workflows/{flowId}/node/{nodeId} - 鉴权:是(需 designerToken)
- Tag:设计时-流程定义模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 软件Id |
| flowId | path | string | 是 | 流程Id |
| nodeId | path | string | 是 | 当前节点Id |
| type | query | string | 否 | 节点查询类型(经 ParamsTable 读取;0=获取所有前置节点,其他值当前实现返回空数组) |
请求示例¶
GET /api/designtime/applications/{applicationId}/modules/workflows/{flowId}/node/{nodeId}?type=0 HTTP/1.1
响应¶
data:JSONArray,每项 {id, name}(仅 type=0 时返回前置 ManualNode 列表)。
说明:方法捕获异常后仅
e.printStackTrace()并return null(响应体为空,HTTP 200),调用方需按 body 是否为空判断成败。
8. 流程编辑器子流程获取父流程表单¶
分页查询当前应用下指定模块/名称关键字的表单,并附带每个表单的全部字段(用于子流程映射父流程字段)。每页固定 10 条。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/{applicationId}/modules/workflows/flexGetForms - 鉴权:是(需 designerToken)
- Tag:设计时-流程定义模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 软件Id |
| pageNo | query | string | 否 | 页码(缺省 1) |
| formName | query | string | 否 | 表单名称关键字 |
| moduleName | query | string | 否 | 模块名称关键字 |
说明:上述形参未标注
@RequestParam,由 Spring MVC 按请求参数绑定。
请求示例¶
GET /api/designtime/applications/{applicationId}/modules/workflows/flexGetForms?pageNo=1&formName=&moduleName= HTTP/1.1
响应¶
data:JSONObject,含分页字段(linesPerPage/pageCount/pageNo/rowCount)与 data(表单数组)。每项表单 {id, formName, moduleName, formFields},formFields 首项固定为 {name:"--select--", valuetype:""},其余为字段对象 {name, valuetype}。
{
"errcode": 0,
"errmsg": "ok",
"data": {
"linesPerPage": 10,
"pageCount": 1,
"pageNo": 1,
"rowCount": 1,
"data": [
{
"id": "...",
"formName": "请假表单",
"moduleName": "考勤",
"formFields": [
{ "name": "--select--", "valuetype": "" },
{ "name": "字段名", "valuetype": "VALUE_TYPE_TEXT" }
]
}
]
},
"errors": null
}
9. 流程编辑器获取所有流程¶
分页查询当前应用下指定模块/名称关键克的流程,并附带应用下所有模块名称集合(用于流程编辑器下拉过滤)。每页固定 10 条。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/{applicationId}/modules/workflows/flexGetBillDefiVOs - 鉴权:是(需 designerToken)
- Tag:设计时-流程定义模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 软件Id |
| pageNo | query | string | 否 | 页码(缺省 1) |
| flowName | query | string | 否 | 流程名称关键字 |
| moduleName | query | string | 否 | 模块名称关键字 |
请求示例¶
GET /api/designtime/applications/{applicationId}/modules/workflows/flexGetBillDefiVOs?pageNo=1&flowName=&moduleName= HTTP/1.1
响应¶
data:JSONObject,含分页字段、data(流程数组,每项 {id, flowName, moduleName})与 modulearray(模块名称字符串数组,首项固定为 "")。
{
"errcode": 0,
"errmsg": "ok",
"data": {
"linesPerPage": 10,
"pageCount": 1,
"pageNo": 1,
"rowCount": 1,
"data": [ { "id": "...", "flowName": "请假流程", "moduleName": "考勤" } ],
"modulearray": [ "", "考勤", "报销" ]
},
"errors": null
}
10. 获取流程参数列表¶
按流程Id返回该流程的全部流程参数(FlowParameter)列表。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/{applicationId}/workflows/{flowId}/parameters(注意:路径前缀为/{applicationId}/workflows/...,无/modules/) - 鉴权:是(需 designerToken)
- Tag:设计时-流程定义模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 软件Id |
| flowId | path | string | 是 | 流程Id |
请求示例¶
响应¶
data:List<FlowParameter>。
{
"errcode": 0,
"errmsg": "ok",
"data": [ { "id": "...", "name": "...", "...": "..." } ],
"errors": null
}
11. 批量保存流程参数¶
按流程Id批量保存流程参数(增量更新:保留请求体中携带的参数,删除库中存在但请求体中已移除的参数),并基于新旧参数表单差异同步动态表(createOrUpdateDynaTable)。
- 接口类型:REST 资源
- 请求方式:
POST - 请求路径:
/{applicationId}/workflows/{flowId}/parameters/batch(注意:路径前缀为/{applicationId}/workflows/...,无/modules/) - 鉴权:是(需 designerToken)
- Tag:设计时-流程定义模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| applicationId | path | string | 是 | 软件Id |
| flowId | path | string | 是 | 流程Id |
| flowParameters | body | array(JSON) | 是 | 流程参数数组(@RequestBody List<FlowParameter>;服务端会强制 parentId=flowId、applicationid=applicationId) |
请求体¶
响应¶
data:List<FlowParameter>,保存后重新查询的参数列表。
{
"errcode": 0,
"errmsg": "ok",
"data": [ { "id": "...", "name": "参数1", "...": "..." } ],
"errors": null
}