跳至主要内容

如何在记录中通过按钮一键中止流程

当一个运行中的流程需要快速终止时,除了管理员在“运行历史”里手动结束实例,也可以在记录中放置一个“中止”按钮,直接调用组织相关接口完成中止,适合频繁操作或一线业务人员快速处置。

适用用场景:

  • 业务单据误触发/条件变化时,需要立即终止当前业务流程

  • 管理员或具备权限的业务人员希望在记录页一键中止,减少往返“运行历史”的操作。

接口信息

组织授权接口地址:https://apidoc.mingdao.com/

私有部署接口文档打开路径:组织管理后台-集成-其他-开放接口- 查看文档 ,Host将自动显示为自己的地址。

中止流程接口信息:

  • 接口:https://api.mingdao.com/workflow/v1/instance/endInstance

  • 请求方式:GET(参数拼接在 URL 后)

  • 必填参数:appKey、sign、timestamp、accountId、instanceId

  • 签名(sign)规则要点:用 AppKey + SecretKey + Timestamp 组串做 sha256,再做 base64,详见下文示例代码。

实施步骤

我们先从最简单的参数逐步介绍。

1.获取accountId

  • 仅管理员中止: 管理员可以在点击个人头像,进入“管理我的账户”页面,直接复制accountId(用户ID),可作为静态值使用。
  • 多人可中止: 在工作流中可以通过“获取单个成员信息”节点获取操作人的accountId(用户ID)

本示例中使用静态值,记住获取的accountId:

参数名称
accountId1e23e1fd-7bc4-48ab-99bf-f3e97084f09c

2.获取instanceId

instanceId(流程执行实例ID)是每次流程运行实例的唯一ID。建议在触发审批的发起节点之后,加一个“更新记录”节点,把本次instanceId写入到记录字段(如“审批实例ID”),供后续“中止”接口使用。如下图配置:

现在你来触发一次流程,获取并记住instanceId:

参数名称
accountId1e23e1fd-7bc4-48ab-99bf-f3e97084f09c
instanceId68b7eb4c7c54470dbb2d27ba

3.获取appKey、sign和 timestamp

sign的生成方法

在接口文档开始章节中介绍了组织sign的生成方法。在生成sign时,需要AppKey、SecretKey和timestamp。

获取AppKey和SecretKey

组织管理员依次进入 组织管理 》 集成 》 其他 》 查看密钥,获取组织AppKey和SecretKey等密钥信息。

记住获取到参数值:

参数名称
accountId1e23e1fd-7bc4-48ab-99bf-f3e97084f09c
instanceId68b7eb4c7c54470dbb2d27ba
AppKey6ed5ee4bec7xxxxx
SecretKey64b473bbf14bb239014bb24ba2xxxx

使用代码块生成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,保存节点。

记住已获取的参数:

参数名称
accountId1e23e1fd-7bc4-48ab-99bf-f3e97084f09c
instanceId68b7eb4c7c54470dbb2d27ba
AppKey6ed5ee4bec7xxxxx
SecretKey64b473bbf14bb239014bb24ba2xxxx
signNzcyNjVjY2E4NzBiMjY2M2JhNTIxY2JjNTgzMmY2NTJiOTllYmUwNTVmMjBkM2RmNDJjOTM3YzE2MDhhNzZiNg==
timestamp1756888994185

4.调用中止流程接口

在中止流程中添加“发送自定义请求”节点,配置请求URL。

将下方代码复制到请求的URL地址中,请求方式选择“GET”,然后将“参数值”替换为获取到的静态值或节点字段。

https://api.mingdao.com/workflow/v1/instance/endInstance?appKey=参数值&sign=参数值&timestamp=参数值&accountId=参数值&instanceId=参数值

示例:

点击【测试 API】按钮,参数测试数据写为获取到值。调用成功通常返回 status = 1,并在流程运行历史中可见该实例已被终止。

5.发布流程并测试

新触发一个流程后,点击中止按钮,即可中止审批流程。

常见问题与排查

错误代码原因
400签名错误,检查 AppKey/SecretKey 是否正确
401accountId不存在
500instanceId 错误

TIPS:

  • 只要获取到instanceId,此接口可以中止任何流程实例(不仅限审批)。

  • 建议把“审批实例ID”、“最后中止时间”、“中止操作人”等字段标准化,方便审计与回溯。

  • 中止审批流程后,主流程可以根据审批流程状态走不同分支