【工作流】流程扩展自定义函数示例代码汇总

目录

1. 流程节点审批人函数
2. 审批开始前执行函数
3. 待办操作提交后执行函数
4. 审批操作数据函数

1. 流程节点审批人函数

包含转交、抄送、加签、填写、通知人自定义函数
当平台默认提供的审批人选择无法满足个性化的业务需求时,我们可以通过自定义函数处理审批人的生成逻辑

1.1 编写自定义审批人函数

@Function(name = "customApprovePerson", openLevel = FunctionOpenEnum.API)
@Function.Advanced(type = FunctionTypeEnum.QUERY, displayName = "自定义审批人函数", category = FunctionCategoryEnum.CUSTOM_DESIGNER)
public List<NodePerson> customApprovePerson(List<NodePerson> nodePersonList, NodeModel nodeModel, WorkflowContext workflowContext) {
    // 自定义的审批人
    List<NodePerson> newNodePersonList = new ArrayList<>();
    // 审批数据源处理
    String nodeModelId = nodeModel.getId();
    Object nodeData = workflowContext.get(nodeModelId);
    DemoItem item = JsonUtils.parseObject(JsonUtils.toJSONString(nodeData), DemoItem.class);

    // TODO 自定义逻辑
    WorkflowTaskInstance taskInstance = new WorkflowTaskInstance().queryById(workflowContext.getLastTaskInstanceId());
    // 当前工作流实例
    WorkflowInstance workflowInstance = new WorkflowInstance().queryById(taskInstance.getWorkflowInstanceId());
    return newNodePersonList;
}

1.2 流程设计器的审批节点设置自定义函数

【工作流】流程扩展自定义函数示例代码汇总

2.审批开始前执行函数

使用场景:在流程执行到审批或填写节点任务初始化后,任务尚未开始,需要在初始化任务做一些自定义逻辑处理时,使用该扩展
执行时间:执行节点是在审批或填写待办任务初始化之后,审批或填写结果执行之前,执行该扩展

/**
 * 审批节点初始化完成,执行前置函数
 * @param approvalNode
 * @param context
 * @param taskInstance
 */
@Function(name = "approvalCustomStartFun",openLevel = FunctionOpenEnum.API)
@Function.Advanced(type= FunctionTypeEnum.QUERY,displayName = "审批执行前置处理",category = FunctionCategoryEnum.CUSTOM_DESIGNER )
public void approvalCustomStartFun(ApprovalNode approvalNode, WorkflowContext context, WorkflowTaskInstance taskInstance) {
    // TODO: 2024/2/23 可以根据结果自己处理业务逻辑
}

3. 待办操作提交后执行函数

使用场景:在审批或填写的待办任务在操作任务时,需要额外执行一些逻辑,比如当前人提交操作以后需要更新更当前人操作相关的数据库记录,
执行时间:执行节点是在保存待办任务之后,异步执行审批或填写结果之前,执行该扩展

/**
 * 转交操作后置函数,再流程设计器中审批和填写节点中 扩展设置-填写操作提交后执行函数选择
 * @param userTask 用户待办记录
 * @return 待办记录
 */
@Function(name = "transformOrgSelectEndFun",openLevel = FunctionOpenEnum.API)
@Function.Advanced(type= FunctionTypeEnum.QUERY,displayName = "转交操作后置函数",category = FunctionCategoryEnum.CUSTOM_DESIGNER )
public WorkflowUserTask transformOrgSelectEndFun(WorkflowUserTask userTask) {
    //可针对操作类型进行过滤
    // 转交操作后
    if (!WorkflowUserTaskOperateTypeEnum.APPROVE_TRANGER.equals(userTask.getOperateType())) {
        return userTask;
    }
    // TODO: 2023/11/21 可自定义补充业务逻辑 userTask对应中数据为本次提交T的数据

    // 审批同意的情况下
    if (WorkflowUserTaskOperateTypeEnum.APPROVE_AGREE.equals(userTask.getOperateType())) {
        // TODO
    }

    // 审批拒绝的情况下
    if (WorkflowUserTaskOperateTypeEnum.APPROVE_REJUST.equals(userTask.getOperateType())) {
        // TODO
    }

    return userTask;
}

4.审批操作数据函数

使用场景:在审批或填写执行过程中审批同意或则填写提交时,需要额外更改其他的业务数据逻辑,如审批同意后需要修改关联数据状态之类
执行时间:在审批或填写执行过程中审批同意或则填写提交后执行完业务数据保存后,执行该扩展

/**
 * 审批后数据处理
 * @param approvalNode 审批节点
 * @param context 上下文
 * @param dataJson 审批提交数据
 * @param result 审批结果
 */
@Function(name = "approvalDataProcessFun",openLevel = FunctionOpenEnum.API)
@Function.Advanced(type= FunctionTypeEnum.QUERY,displayName = "审批后数据处理",category = FunctionCategoryEnum.CUSTOM_DESIGNER )
public void approvalDataProcessFun(ApprovalNode approvalNode, WorkflowContext context, String dataJson, Boolean result) {
    //审批数据提交数据内容
    Map<String, Object> data = JsonUtils.parseMap(dataJson);
    Long id = ParamUtils.createLong(data.get("id"));
    //可根据审批结果来处理自定义数据--通过
    if(result != null && result){
        // TODO: 2024/2/23 可以根据结果自己处理业务逻辑
    }

    //拒绝
    if(result != null && !result){
        // TODO: 2024/2/23 可以根据结果自己处理业务逻辑
    }
}

Oinone社区 作者:nation原创文章,如若转载,请注明出处:https://doc.oinone.top/designer/workflowdesigner/4802.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

(0)
nation的头像nation数式员工
上一篇 2023年12月1日 上午11:38
下一篇 2023年12月4日 下午8:49

相关推荐

  • 工作流动态表单使用说明

    需求背景 为了提高操作效率并简化流程设计过程,应对伙伴们反映的在流程设计器中,即使填写/审批流程相同,不同模型也需重新配置的问题,我们引入了“动态表单”功能。此功能旨在减少重复配置的需求,通过设置节点名称和绑定视图,便可实现审批流程相同而视图不同,从而使得相同的审批流程可以被高效重复利用。 为确保伙伴们能够更加方便的使用动态表单,我们将典型示例整合至“工作流…

    2024年8月22日
    28900
  • 项目中工作流引入和流程触发

    目录 1. 使用工作流需要依赖的包和设置2. 触发方式2.1 自动触发方式2.2 触发方式 1.使用工作流需要依赖的包和设置 1.1 工作流需要依赖的模块 需在pom.xml中增加workflow、sql-record和trigger相关模块的依赖 workflow:工作流运行核心模块 sql-record:监听流程发布以后对应模型的增删改监听 trigge…

    2023年11月7日
    14100
  • 【工作流】如何添加工作流运行时依赖

    前端 package.json中新增依赖 @kunlun/workflow,版本跟@kunlun/dependencies的填一样 src/main.ts内导入依赖 import 'reflect-metadata'; import { VueOioProvider } from '@kunlun/dependencies&#0…

    2024年5月30日
    22500
  • 工作流自定义转交/加签人函数执行时机使用说明

    在实际工作流程的应用过程中,我们注意到有小伙伴需要根据当前执行操作的用户,进行筛选转交或加签人员的列表。为了应对这个需求,我们在流程设计器新增了自定义函数执行时机选项。 使用说明 自定义函数执行时机为空时,逻辑同任务创建时生效。 任务创建时生效:当系统创建待办任务时,会立即调用自定义函数确定转交或加签人列表。 功能特性:效率更高,但无法知道当前操作的用户是谁…

    2024年8月23日
    22600
  • 流程设计流程结束通知SPI接口

    1.实现SPI接口 import pro.shushi.pamirs.meta.common.spi.SPI; import pro.shushi.pamirs.meta.common.spi.factory.SpringServiceLoaderFactory; import pro.shushi.pamirs.workflow.app.api.entit…

    2023年12月26日
    5500

发表回复

登录后才能评论