如何在记录中通过按钮一键中止流程
当一个运行中的流程需要快速终止时,除了管理员在“运行历史”里手动结束实例,也可以在记录中放置一个“中止”按钮,直接调用组织相关接口完成中止,适合频繁操作或一线业务人员快速处置。
适用用场景:
- 
业务单据误触发/条件变化时,需要立即终止当前业务流程
 - 
管理员或具备权限的业务人员希望在记录页一键中止,减少往返“运行历史”的操作。
 
接口信息
组织授权接口地址: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”、“最后中止时间”、“中止操作人”等字段标准化,方便审计与回溯。
 - 
中止审批流程后,主流程可以根据审批流程状态走不同分支
