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

实现方式一
通过审批后置函数操作流程参数的数据,并将流程参数数据回写到流程中。
流程设计
-
流程参数中自定义需要传递的字段。

-
审批节点设计审批后置函数,后置函数由后端定义。

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


后置函数定义:
/**
* 审批后数据处理
*
* @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低代码应用平台体验