一、审批流查询
审批流定义,可用来判断单据是否启用审批流,操作人是否有流程操作权限等
nc.itf.uap.pf.IWorkflowDefine
/**
* 是否有流程定义
* @param pk_group 集团
* @param billType 单据类型
* @param mainWorkflowtype 流程类型
* @return boolean
* @throws BusinessException
*/
public boolean hasValidProcessDef(String pk_group, String billType,
String pkOrg, String operator,int emendEnum, int mainWorkflowtype)
throws BusinessException;
select * from pub_wf_def t where workflow_type =2 and billtype ='30-Cxx-03' and t.validity =1
二、业务插件开发
1、业务插件注册,找到并选中财务-费用管理-借款报销单
点击新增事件类型按钮,新增事件类型 ,事件类型编码:ERM1016 ,事件类型名称:提交后
2、新增业务插件
插件名称:提交后,插件全类名:实现了nc.bs.businessevent.IBusinessListener接口的插件类名称
3、修改系统产品代码
找到借款报销类单据表头业务类nc.bs.arap.bx.BXZbBO,添加常量: public static String MESSAGE_COMMIT = “bx-commit”;
找到方法 public JKBXVO commitVO(JKBXVO vo) throws BusinessException
添加提交前和提交后时间处理方法
3、修改系统事件触发方法
4、重启服务,点击提交按钮即可触发提交后事件。
原文链接:https://blog.youkuaiyun.com/weixin_42516207/article/details/103183419
判断审批流的历史活动节点:
FlowHistoryQryResult result = NCLocator.getInstance().lookup(IPFWorkflowQry.class).queryFlowHistoryQryResult(billType, billId, WorkflowTypeEnum.Approveflow.getIntValue());
ProcessRouteRes processRoute = result.getProcessRoute();
// 走过的主流程
if (processRoute != null && processRoute.getActivityInstance() != null
&& processRoute.getActivityInstance().length > 0) {
for (ActivityInstance acinst : processRoute.getActivityInstance()) {
if (acinst.getStatus() == WfTaskOrInstanceStatus.Finished.getIntValue()&& reject_activity.equals(acinst.getActivityID())) {
isCanRejectActity = true;
}
}
}
if (processRoute != null && processRoute.getSubProcessRoute() != null
&& processRoute.getSubProcessRoute().length > 0) {
for (ProcessRouteRes prte : processRoute.getSubProcessRoute()) {
if (prte != null && prte.getActivityInstance() != null && prte.getActivityInstance().length > 0) {
for (ActivityInstance acinst : prte.getActivityInstance()) {
if (acinst.getStatus() == WfTaskOrInstanceStatus.Finished.getIntValue()
&& reject_activity.equals(acinst.getActivityID())) {
isCanRejectActity = true;
}
}
}
}
}
if (!isCanRejectActity) {
if (StringUtils.isNotEmpty(reject_activity)) {
throw new BusinessException("无法回退,从活动实例流程中未匹配到对应的流程号:"+reject_activity);
}
}
worknoteVO.getTaskInfo().getTask().setBackToFirstActivity(false);
worknoteVO.getTaskInfo().getTask().setJumpToActivity(reject_activity);
worknoteVO.getTaskInfo().getTask().setTaskType(WfTaskType.Backward.getIntValue());