WorkflowHelper
WorkflowHelper 提供审批流的操作能力,包括发起审批、审批操作(同意/拒绝/驳回/撤回)、查询用户相关的审批数据,以及查询指定用户的待审核/参与审批列表。
概述
Chameleon 平台的审批流模块支持完整的审批流程管理。通过 WorkflowHelper,开发者可以在 C# 脚本中程序化地控制审批流程的各个环节。
API 方法
审批操作
LaunchAsync — 发起审批
对指定业务数据发起审批流程。
Task LaunchAsync(WorkflowLaunchRequest request);
主要参数:
| 参数 | 说明 |
|---|---|
| MetaObjectCode | 实体对象编码(如 "LeaveApplication") |
| BizDataId | 业务数据 ID |
| WorkflowId | 审批流定义 ID |
| LaunchUserId | 发起人用户 ID |
示例:
await sdk.WorkflowHelper.LaunchAsync(new WorkflowLaunchRequest
{
MetaObjectCode = "LeaveApplication",
BizDataId = context.CurrentEntity.Id,
WorkflowId = "leave-approval-workflow-id",
LaunchUserId = sdk.AccountHelper.CurrentUserOrganization // 或具体用户ID
});
AgreeAsync — 同意审批
审批人同意当前的审批节点。
Task AgreeAsync(WorkflowActionRequest request);
示例:
await sdk.WorkflowHelper.AgreeAsync(new WorkflowActionRequest
{
MetaObjectCode = "LeaveApplication",
BizDataId = bizDataId,
Comment = "同意申请"
});
DisagreeAsync — 拒绝审批
审批人拒绝当前的审批节点。
Task DisagreeAsync(WorkflowActionRequest request);
示例:
await sdk.WorkflowHelper.DisagreeAsync(new WorkflowActionRequest
{
MetaObjectCode = "LeaveApplication",
BizDataId = bizDataId,
Comment = "不符合规定,请重新提交"
});
ReturnAsync — 驳回审批
将审批驳回到上一节点或发起人。
Task ReturnAsync(WorkflowActionRequest request);
RevokeAsync — 撤回审批
发起人撤回正在进行的审批。
Task RevokeAsync(WorkflowActionRequest request);
数据查询
GetCurrentUserInProgressDataIdList — 查询进行中的数据
获取当前登录用户在指定对象下所有进行中(待处理)的业务数据 ID 列表。
Task<List<string>> GetCurrentUserInProgressDataIdList(string metaObjectCode);
示例:
// 获取当前用户待处理的请假申请
var pendingIds = await sdk.WorkflowHelper.GetCurrentUserInProgressDataIdList("LeaveApplication");
foreach (var id in pendingIds)
{
sdk.Logger.LogInformation($"待处理申请: {id}");
}
GetCurrentUserParticipatedDataIdList — 查询参与过的数据
获取当前登录用户在指定对象下参与过的所有业务数据 ID 列表(包括已完成的)。
Task<List<string>> GetCurrentUserParticipatedDataIdList(string metaObjectCode);
GetUserPendingApprovalListAsync — 查询指定用户待审核的审批列表
获取指定用户当前待审核的审批列表,返回流程、节点、发起人等信息,可用于在脚本中查询某位用户的待办审批。
Task<List<WorkflowApprovalResponse>> GetUserPendingApprovalListAsync(WorkflowApprovalListRequest request);
参数说明(WorkflowApprovalListRequest):
| 参数 | 说明 |
|---|---|
| UserId | 要查询的用户 ID(必填) |
| Condition | 可选过滤条件(DynamicFilter),后台会与固定条件(status=进行中 且 pendingapproveruserids 包含该用户)合并 |
返回结果(WorkflowApprovalResponse):
| 字段 | 类型 | 说明 |
|---|---|---|
| InstanceId | string | 流程实例 ID |
| BizDataId | string | 关联业务数据 ID |
| MetaObjectCode | string | 实体对象编码 |
| WorkflowId | string | 关联流程 ID |
| WorkflowTitle | string | 流程名称 |
| NodeTitle | string | 当前节点标题 |
| LaunchUserId | string | 发起人 ID |
| LaunchUserDisplay | string | 发起人显示名称 |
| Status | int | 审批状态(ApprovalStatusEnum:0=未发起,1=进行中,2=撤回,3=通过,4=拒绝,5=驳回) |
| CurrentNode | string | 当前节点 ID |
| MetaPageId | string | 关联页面 ID(用于跳转审批详情) |
| EntryTime | DateTime? | 当前节点进入时间 |
| LaunchDateTime | DateTime? | 发起时间 |
| FinishedTime | DateTime? | 实例结束时间 |
示例:
// 查询指定用户待审核的审批(按对象过滤)
var pendingList = await sdk.WorkflowHelper.GetUserPendingApprovalListAsync(new WorkflowApprovalListRequest
{
UserId = "目标用户ID",
Condition = new DynamicFilter
{
Field = "metaobjectcode",
Operator = FilterOperator.Eq,
Value = "LeaveApplication"
}
});
foreach (var item in pendingList)
{
sdk.Logger.LogInformation($"待办: {item.WorkflowTitle} - {item.NodeTitle}");
}
GetUserParticipatedApprovalListAsync — 查询指定用户参与过的审批列表
获取指定用户参与过的审批列表(包括已完成的)。
Task<List<WorkflowApprovalResponse>> GetUserParticipatedApprovalListAsync(WorkflowApprovalListRequest request);
请求参数与返回结果与 GetUserPendingApprovalListAsync 一致,区别在于固定条件为 participantuserids 包含该用户,不限制审批状态。
示例:
// 查询指定用户参与过的审批
var participatedList = await sdk.WorkflowHelper.GetUserParticipatedApprovalListAsync(new WorkflowApprovalListRequest
{
UserId = "目标用户ID"
});
sdk.Logger.LogInformation($"共参与 {participatedList.Count} 条审批");
典型场景
数据保存后自动发起审批
public async Task<object> ExecuteAsync(ComponentContext context, ChameleonSDK sdk)
{
// 数据创建后自动发起审批
await sdk.WorkflowHelper.LaunchAsync(new WorkflowLaunchRequest
{
MetaObjectCode = context.MetaObject.Code,
BizDataId = context.CurrentEntity.Id,
WorkflowId = "default-approval-flow",
LaunchUserId = context.UserId
});
sdk.Logger.LogInformation($"审批已发起,数据ID: {context.CurrentEntity.Id}");
return new { success = true, message = "审批已成功发起" };
}
批量审批操作
// 同意多条待处理记录
foreach (var bizDataId in pendingDataIds)
{
await sdk.WorkflowHelper.AgreeAsync(new WorkflowActionRequest
{
MetaObjectCode = "ExpenseReport",
BizDataId = bizDataId,
Comment = "批量审批通过"
});
}
查看待办数量
var myPendingCount = (await sdk.WorkflowHelper.GetCurrentUserInProgressDataIdList("LeaveApplication")).Count;
sdk.Logger.LogInformation($"您有 {myPendingCount} 条请假申请待处理");
注意事项
- 审批操作的执行者必须是当前审批节点的处理人或具有相应权限的用户
WorkflowActionRequest中除了MetaObjectCode和BizDataId外,还可以附带审批意见(Comment)- 撤回操作只能由发起人在特定阶段执行