如何在记录中通过按钮一键中止流程
当一个运行中的流程需要快速终止时,除了管理员在“运行历史”里手动结束实例,也可以在记录中放置一个“中止”按钮,直接调用组织相关接口完成中止,适合频繁操作或一线业务人员快速处置。
适用用场景:
-
业务单据误触发/条件变化时,需要立即终止当前业务流程
-
管理员或具备权限的业务人员希望在记录页一键中止,减少往返“运行历史”的操作。
接口信息
组织授权接口地址:https://apidoc.mingdao.com/
私有部署接口文档打开路径:组织管理后台-集成-其他-开放接口- 查看文档 ,Host将自动显示为自己的地址。
中止流程接口信息:
-
请求方式:GET(参数拼接在 URL 后)
-
必填参数:appKey、sign、timestamp、accountId、instanceId
-
签名(sign)规则要点:用 AppKey + SecretKey + Timestamp 组串做 sha256,再做 base64,详见下文示例代码。
实施步骤
我们先从最简单的参数逐步介绍。
1.获取accountId
- 仅管理员中止: 管理员可以在点击个人头像,进入“管理我的账户”页面,直接复制accountId(用户ID),可作为静态值使用。
- 多人可中止: 在工作流中可以通过“获取单个成员信息”节点获取操作人的accountId(用户ID)
本示例中使用静态值,记住获取的accountId:
参数名称 | 值 |
---|---|
accountId | 1e23e1fd-7bc4-48ab-99bf-f3e97084f09c |
2.获取instanceId
instanceId(流程执行实例ID)是每次流程运行实例的唯一ID。建议在触发审批的发起节点之后,加一个“更新记录”节点,把本次instanceId写入到记录字段(如“审批实例ID”),供后续“中止”接口使用。如下图配置:
现在你来触发一次流程,获取并记住instanceId:
参数名称 | 值 |
---|---|
accountId | 1e23e1fd-7bc4-48ab-99bf-f3e97084f09c |
instanceId | 68b7eb4c7c54470dbb2d27ba |
3.获取appKey、sign和 timestamp
sign的生成方法
在接口文档开始章节中介绍了组织sign的生成方法。在生成sign时,需要AppKey、SecretKey和timestamp。
获取AppKey和SecretKey
组织管理员依次进入 组织管理 》 集成 》 其他 》 查看密钥,获取组织AppKey和SecretKey等密钥信息。
记住获取到参数值:
参数名称 | 值 |
---|---|
accountId | 1e23e1fd-7bc4-48ab-99bf-f3e97084f09c |
instanceId | 68b7eb4c7c54470dbb2d27ba |
AppKey | 6ed5ee4bec7xxxxx |
SecretKey | 64b473bbf14bb239014bb24ba2xxxx |
使用代码块生成sign和timestamp
添加一个“中止”按钮,配置中止流程,在流程开始后添加一个代码块节点,根据现有的参数,生成sign和timestamp。
将下面代码完全复制粘贴到代码块中,并将您的AppKey和SecretKey的值替换为您的实际值。
var crypto = require('crypto');
var _ = require('lodash');
var date = new Date();
var timestamp1 = date.getTime().toString();
var appKey='6ed5ee4bec7exxxx';// 替换appKey
var secretKey='64b473bbf14bb239014bb24ba2xxxx'; //替换secretKey
function getSignature() {
var signstr = 'AppKey='+appKey+'&SecretKey='+secretKey+'&Timestamp='+timestamp1;
return base64(sha256(signstr))
};
function sha256(s) {
var hash = crypto.createHash('sha256');
hash.update(s, 'utf8');
return hash.digest('hex').toLowerCase();
}
function base64(s) {
var result = new Buffer.from(s, 'utf8');
return result.toString('base64');
}
output = {sign:getSignature(),timestamp:timestamp1}
点击代码块中的测试按钮,会直接输出计 算好的sign和timestamp,保存节点。
记住已获取的参数:
参数名称 | 值 |
---|---|
accountId | 1e23e1fd-7bc4-48ab-99bf-f3e97084f09c |
instanceId | 68b7eb4c7c54470dbb2d27ba |
AppKey | 6ed5ee4bec7xxxxx |
SecretKey | 64b473bbf14bb239014bb24ba2xxxx |
sign | NzcyNjVjY2E4NzBiMjY2M2JhNTIxY2JjNTgzMmY2NTJiOTllYmUwNTVmMjBkM2RmNDJjOTM3YzE2MDhhNzZiNg== |
timestamp | 1756888994185 |
4.调用中止流程接口
在中止流程中添加“发送自定义请求”节点,配置请求URL。
将下方代码复制到请求的URL地址中,请求方式选择“GET”,然后将“参数值”替换为获取到的静态值或节点字段。
https://api.mingdao.com/workflow/v1/instance/endInstance?appKey=参数值&sign=参数值×tamp=参数值&accountId=参数值&instanceId=参数值
示例:
点击【测试 API】按钮,参数测试数据写为获取到值。调用成功通常返回 status = 1,并在流程运行历史中可见该实例已被终止。
5.发布流程并测试
新触发一个流程后,点击中止按钮,即可中止审批流程。
常见问题与排查
错误代码 | 原因 |
---|---|
400 | 签名错误,检查 AppKey/SecretKey 是否正确 |
401 | accountId不存在 |
500 | instanceId 错误 |
TIPS:
-
只要获取到instanceId,此接口可以中止任何流程实例(不仅限审批)。
-
建议把“审批实例ID”、“最后中止时间”、“中止操作人”等字段标准化,方便审计与回溯。
-
中止审批流程后,主流程可以根据审批流程状态走不同分支