用户审批意见回填到审批表单

需求

将审批同意时填写的审批意见以及图片回填到审批表单中。(填写节点同理)

用户审批意见回填到审批表单

实现方式一

通过审批后置函数操作流程参数的数据,并将流程参数数据回写到流程中。

流程设计

  1. 流程参数中自定义需要传递的字段。
    用户审批意见回填到审批表单

  2. 审批节点设计审批后置函数,后置函数由后端定义。
    用户审批意见回填到审批表单

  3. 添加更新数据节点,选择需要更新的业务表单字段,并在表达式中选择流程参数中自定义的字段。我这里更新审批意见和图片两个字段。
    用户审批意见回填到审批表单
    用户审批意见回填到审批表单

后置函数定义:

    /**
     * 审批后数据处理
     *
     * @param approvalNode 审批节点
     * @param context      上下文
     * @param dataJson     审批提交数据
     * @param result       审批结果
     */
    @Function(name = "approvalDataProcessFun", openLevel = API)
    @Function.Advanced(type = FunctionTypeEnum.QUERY, displayName = "审批后数据处理", category = FunctionCategoryEnum.CUSTOM_DESIGNER)
    public void approvalDataProcessFun(ApprovalNode approvalNode, WorkflowContext context, String dataJson, Boolean result) {
        List<WorkflowUserTask> workflowUserTasks = Models.origin().queryListByWrapper(Pops.<WorkflowUserTask>lambdaQuery()
                .from(WorkflowUserTask.MODEL_MODEL)
                .eq(WorkflowUserTask::getTaskId, context.getLastTaskInstanceId())
        );
        // 获取审批意见等放入流程参数
        for (WorkflowUserTask userTask : workflowUserTasks) {
            String remark = userTask.getRemark();
            List<String> pics = userTask.getPics();
            List<PamirsFile> attachments = userTask.getAttachments();

            Map<String, Object> paramMap = (Map<String, Object>) context.getContext().getOrDefault(ParamNode.PARAM_PREFIX, new HashMap<String, Object>());
            paramMap.put("remark", remark);
            paramMap.put("pics", pics);
        }

    }

实现方式二

通过审批动作(WorkflowUserTaskAction )扩展点实现

1、扩展点的定义

package pro.shushi.pamirs.work.core.extpoint;

import pro.shushi.pamirs.meta.annotation.Ext;
import pro.shushi.pamirs.meta.annotation.ExtPoint;
import pro.shushi.pamirs.workflow.app.api.model.WorkflowUserTask;

// @see:pro.shushi.pamirs.workflow.app.core.action.WorkflowUserTaskAction
/**
 *  Oinone所有的函数都提供了默认的前置扩展点、重载扩展点和后置扩展点,
 *  其技术名称的规则是所扩展函数的函数编码fun加上“Before”、“Override”和“After”后缀
  *  
  *  根据实际情况保留扩展点的接口和实现(可增加、可删减)
 */
@Ext(WorkflowUserTask.class)
public interface WorkflowUserTaskDealExtPoint {

    // 实际需要几个扩展点根据业务情况自行 增加 和 删除
    @ExtPoint(displayName = "审批同意后")
    WorkflowUserTask approveAgreeAfter(WorkflowUserTask workflowUserTask);

    @ExtPoint(displayName = "审批撤销后")
    WorkflowUserTask recallAfter(WorkflowUserTask workflowUserTask);

    @ExtPoint(displayName = "审批转审后")
    WorkflowUserTask approveTrangerAfter(WorkflowUserTask workflowUserTask);

    @ExtPoint(displayName = "审批转审前")
    WorkflowUserTask approveFallbackBefore(WorkflowUserTask workflowUserTask);

    @ExtPoint(displayName = "审批拒绝后")
    WorkflowUserTask approveRejustAfter(WorkflowUserTask workflowUserTask);

    @ExtPoint(displayName = "审批转审后")
    WorkflowUserTask approveFallbackAfter(WorkflowUserTask workflowUserTask);

    // …………
}

2、扩展点的实现

package pro.shushi.pamirs.work.core.extpoint;

import org.springframework.stereotype.Component;
import pro.shushi.pamirs.meta.annotation.Ext;
import pro.shushi.pamirs.meta.annotation.ExtPoint;
import pro.shushi.pamirs.meta.annotation.fun.extern.Slf4j;
import pro.shushi.pamirs.meta.util.JsonUtils;
import pro.shushi.pamirs.work.api.model.monthplan.WorkMonthlyPlan;
import pro.shushi.pamirs.work.api.model.monthplan.WorkPlanDelayApplication;
import pro.shushi.pamirs.workflow.app.api.model.WorkflowUserTask;

/**
 * 流程审操作扩展  @see:pro.shushi.pamirs.workflow.app.core.action.WorkflowUserTaskAction
 *  Oinone所有的函数都提供了默认的前置扩展点、重载扩展点和后置扩展点,
 *  其技术名称的规则是所扩展函数的函数编码fun加上“Before”、“Override”和“After”后缀
  *  
  *  根据实际情况保留扩展点的接口和实现 (可增加、可删减)
 */
@Ext(WorkflowUserTask.class)
@Component
@Slf4j
public class WorkflowUserTaskDealExtPointImpl implements WorkflowUserTaskDealExtPoint {

    // 根据实际情况是否保留
    @ExtPoint.Implement
    @Override
    public WorkflowUserTask approveRejustAfter(WorkflowUserTask userTask) {
        userTask.getNodeDataBizId();
        userTask.getModel();
         // 业务数据ID:userTask.getNodeDataBizId();
        log.info("=====================approveRejustAfter============================");
        return userTask;
    }

    @ExtPoint.Implement
    @Override
    public WorkflowUserTask approveAgreeAfter(WorkflowUserTask userTask) {
        log.info("=====================approveAgreeAfter============================");
        // WorkPlanDelayApplication 是具体的业务模型,根据事情情况修改。 其他的模型直接写else分支
        if (WorkPlanDelayApplication.MODEL_MODEL.equals(userTask.getModel())) {
            WorkPlanDelayApplication workPlanDelayApplication = JsonUtils.parseObject(userTask.getNodeContext(), WorkPlanDelayApplication.class);
            workPlanDelayApplication.setAuditRemark(userTask.getRemark());
            workPlanDelayApplication.setAuditAttachments(userTask.getAttachments());
            userTask.setPics(userTask.getPics());
            workPlanDelayApplication.updateById();
            userTask.setContent(JsonUtils.toJSONString(workPlanDelayApplication));
        } else if (WorkMonthlyPlan.MODEL_MODEL.equals(userTask.getModel())) {
            // WorkMonthlyPlan逻辑 ………… 其他模版类似
        }

        return userTask;
    }

    // 根据实际情况是否保留
    @ExtPoint.Implement
    @Override
    public WorkflowUserTask recallAfter(WorkflowUserTask userTask) {
        log.info("=====================recallAfter============================");
        return userTask;
    }

    // 根据实际情况是否保留
    @ExtPoint.Implement
    @Override
    public WorkflowUserTask approveTrangerAfter(WorkflowUserTask workflowUserTask) {
        return workflowUserTask;
    }

    // 根据实际情况是否保留
    @ExtPoint.Implement
    @Override
    public WorkflowUserTask approveFallbackBefore(WorkflowUserTask workflowUserTask) {
        return workflowUserTask;
    }

    // 根据实际情况是否保留
    @ExtPoint.Implement
    @Override
    public WorkflowUserTask approveFallbackAfter(WorkflowUserTask workflowUserTask) {
        return workflowUserTask;
    }

}

更多后置函数参考:自定义函数示例代码汇总

Oinone社区 作者:yexiu原创文章,如若转载,请注明出处:https://doc.oinone.top/other/25502.html

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

(0)
yexiu的头像yexiu数式员工
上一篇 2026年1月7日 pm3:51
下一篇 2026年3月12日 pm7:53

相关推荐

  • 数式Oinone培训前注意事项

    一、快速上手 (建议至少预习 6 小时) 在正式培训之前,建议需要完成以下任务,以便对培训内容有基本了解: 点击阅读:快速启动入门 该文档为学员提供了从入门到实现 demo 的全过程说明,涵盖了开发工具、框架搭建、常见问题解答等内容 开始培训前,请参与人员确保完成以下任务 阅读并理解文档中的每个步骤。 配置好前后端开发环境。 完成 demo 的基础框架搭建,验证是否能够成功运行。 二、预期成果 通过上述预习,大家完成以下事项:• 成功搭建本地开发环境,并能运行前后端的基本 demo。• 对前后端技术栈有初步了解,为正式培训中的深度学习打下基础,并且提出对应的疑问点 三、其他准备工作 1.技术工具检查:请确在本地已安装并配置好必要的开发工具和环境(如 IDE、Node.js、数据库等);2.参与者反馈:在预习过程中,学员如遇到困难或无法解决的问题(前后端疑问),请提前记录并提交,以便培训期间重点解答;3.版本是否是最新的版本,且建议研发人员版本一致,且类型是 mini; ps:部署包相关信息,联系数式相关人员获取

    未分类 2024年8月2日
    3.0K00
  • Oinone 初级学习路径

    文档说明 文档链接 介绍Oinone前端相关知识点 前端基础学习路径 介绍Oinone后端相关知识点 后端基础学习路径 介绍平台基础组件 平台基础组件 介绍平台设计器常用场景实操 设计器基础学习路径 设计器实操案例示例 7.2 实战训练(积分发放)

    2024年6月15日
    1.3K00
  • 后台嵌入其他系统的界面,设计器:嵌入网页组件

    管理后台如何新增Iframe嵌入其他系统的界面: 1、新建一个模型。模型中有放【url】的字段2、3、切换组件4、点击发布5、测试环境验证下,后端那个字段返回嵌入的【url】就可以展示这个url的内容了6、最后效果如下:

    2024年12月27日
    1.4K00
  • 自定义流程设计器审批人公司列表

    打开弹窗时会默认选中返回的第一个公司。 依赖: <dependency> <groupId>pro.shushi.pamirs.workflow</groupId> <artifactId>pamirs-workflow-api</artifactId> </dependency> 只显示所有公司 ALL_COMPANY 表示所有公司。 @Order(10) @Component @SPI.Service public class CustomWorkflowCompanyQueryApi implements WorkflowCompanyQueryApi { @Override public Pagination<PamirsCompany> queryPage(Pagination<PamirsCompany> page, IWrapper<PamirsCompany> queryWrapper) { Pagination<PamirsCompany> pageResult = new Pagination<>(); pageResult.setContent(Lists.newArrayList(ALL_COMPANY)); pageResult.setTotalPages(1); return pageResult; } } 不显示所有公司 @Order(10) @Component @SPI.Service public class CustomWorkflowCompanyQueryApi implements WorkflowCompanyQueryApi { @Override public Pagination<PamirsCompany> queryPage(Pagination<PamirsCompany> page, IWrapper<PamirsCompany> queryWrapper) { return new PamirsCompany().queryPage(page, queryWrapper); } } 仅显示特定公司 @Order(10) @Component @SPI.Service public class CustomWorkflowCompanyQueryApi implements WorkflowCompanyQueryApi { private static final Set<String> COMPANY_CODES = Sets.newHashSet("CH0001", "CH0002"); @Override public Pagination<PamirsCompany> queryPage(Pagination<PamirsCompany> page, IWrapper<PamirsCompany> queryWrapper) { Set<String> companyCodes = Sets.newHashSet("CH0001", "CH0002"); LambdaQueryWrapper<PamirsCompany> query = ((QueryWrapper<PamirsCompany>) queryWrapper).lambda(); query.in(PamirsCompany::getCode, COMPANY_CODES); return new PamirsCompany().queryPage(page, queryWrapper); } }

    2025年9月4日
    95200

Leave a Reply

登录后才能评论