NC65增加业务规则超级详细的教程(含图片代码)

NC65增加业务规则

前期准备

  • 单据的单据类型例如请购单单据类型为20、采购合同单据类型为Z2、付款申请单据类型为36D1

  • 寻找单据的业务扩展点
    下面是查找方式以请购单为例,首先找到单据对应的审批动作
    在这里插入图片描述

    进入审批方法会发现一个带有processer后缀的类,其中PraybillPluginPoint.APPROVE为我们要找到的插入点

    在这里插入图片描述

    下面代码为我们需要的插入点枚举类
    在这里插入图片描述

    业务扩展点主要有两种类型: 一种是无参的插入点(如上图)、一种是有参数的插入点(如下图)

    在这里插入图片描述

  • 寻找注册脚本所需要的参数(在扩展点枚举类中)

    请购单所需要的参数
    在这里插入图片描述

    采购合同所需要的参数
    在这里插入图片描述

注册业务规则脚本

  • 常规字段介绍以及数据字典
    业务规则注册所涉及的表只有一个pub_pluginitem 下面是常见字段介绍

    字段名含义取值示例
    VMODULENAME模块名称PO
    VCOMPONENTNAME业务组件名称20(一般指单据类型)
    VEXTENDPOINTNAME扩展点名称APPROVE(无参枚举)或者nc.impl.ct.purdaily.action.PurdailyUnApproveAction(有参枚举)
    VEVENTTYPE扩展事件类型before(业务前事件)、after(业务后事件)
    VEXTENDTYPE扩展类型addAfter、addBefore、replace该参数是指将新增的业务规则放在扩展点前还是后,或者替换原有的扩展点
    VTARGETCLASS扩展水平产品目标类nc.bs.pubapp.pub.rule.ApproveStatusCheckRule和上面的扩展类型对应起来
    VRULECLASS扩展规则类自定义的扩展规则全路径名nc.bs.pu.rule.ApproveTempDataBeforeRule
    IORDER规则的执行顺序数字101、1、2都行,只要不和以后的冲突

    在这里插入图片描述

  • 常见字段的取值
    请购单为例VCOMPONENTNAME的值为20VEXTENDPOINTNAME的值为APPROVEVMODULENAME的值为PO
    在这里插入图片描述

  • 业务规则脚本
    请购单审批和采购合同弃审前规则脚本示例如下

    --请购单
    insert into pub_pluginitem (DR, INDUSTRYTYPE, IORDER, LOCALTYPE, PK_PLUGINITEM, TS, VCOMPONENTNAME, VDESCRIPTION, VEVENTTYPE, VEXTENDMODULE, VEXTENDPOINTNAME, VEXTENDTYPE, VMODULENAME, VRULECLASS, VTARGETCLASS)
    values (0, '0', 101, '~', '1001Z8PRAYBTEMPAppro', '2018-01-20 14:07:07', '20', '请购单审批检查是否提交CRM', 'before', null, 'APPROVE', 'addBefore', 'PO', 'nc.bs.pu.rule.ApproveBeforeRule', null);
    --采购合同
    insert into pub_pluginitem (DR, INDUSTRYTYPE, IORDER, LOCALTYPE, PK_PLUGINITEM, TS, VCOMPONENTNAME, VDESCRIPTION, VEVENTTYPE, VEXTENDMODULE, VEXTENDPOINTNAME, VEXTENDTYPE, VMODULENAME, VRULECLASS, VTARGETCLASS)
    values (0, '0', 101, '~', '1001Z2PRAYBTEMPUNAPP', '2018-01-20 14:07:07', 'Z2', '采购合同弃审校验是否提交CRM', 'before', null, 'nc.impl.ct.purdaily.action.PurdailyUnApproveAction', 'addBefore', 'CT', 'nc.bs.ct.rule.UnApproveCtBeforeRule', null);
    
    
    
  • 业务规则逻辑图
    在这里插入图片描述

业务规则代码部分

请购单审批业务前规则和采购合同弃审业务后规则代码如下

  • 请购单

    package nc.bs.pu.rule;
    
    import java.util.List;
    import java.util.Map;
    
    import nc.bs.dao.BaseDAO;
    import nc.impl.pubapp.pattern.rule.IRule;
    import nc.jdbc.framework.SQLParameter;
    import nc.jdbc.framework.processor.ColumnProcessor;
    import nc.jdbc.framework.processor.MapListProcessor;
    import nc.vo.pu.m20.entity.PraybillVO;
    import nc.vo.pub.BusinessException;
    import nc.vo.pubapp.pattern.exception.ExceptionUtils;
    import nc.vo.so.m32.entity.SaleInvoiceVO;
    
    /**
     * 请购单审批校验
     * 
     * @author 不太厉害的程序员
     * 
     */
    public class ApproveBeforeRule implements IRule<PraybillVO> {
    
    	@Override
    	public void process(PraybillVO[] vos) {
    		try {
    			
    			for (PraybillVO vo : vos) {
    				if ("Y".equalsIgnoreCase(vo.getHVO().getVdef20())) {
    					continue;
    				}
    				String strSql = "SELECT * FROM bd_defdoc a WHERE a.dr = 0 and def1 = '"
    						+ vo.getHVO().getPk_org()
    						+ "' AND pk_defdoclist IN (SELECT pk_defdoclist FROM bd_defdoclist WHERE CODE = 'OA001')";
    				List<Map<String, String>> exec1 = (List<Map<String, String>>) getBaseDAO()
    						.executeQuery(strSql, new MapListProcessor());
    				String oaId=vo.getHVO().getVdef3();
    				if ((null != exec1 && exec1.size() != 0)||(oaId!=null&&!oaId.isEmpty())) {
    					ExceptionUtils.wrappBusinessException("单据"
    							+ vo.getHVO().getVbillcode()
    							+ "业务单元在请购单流程对照表中或者已经在CRM处理,不能进行此操作!");
    				}
    
    			}
    
    		} catch (Exception e) {
    			ExceptionUtils.wrappException(e);
    		}
    	}
    
    	private BaseDAO dao = null;
    
    	private BaseDAO getBaseDAO() {
    		if (dao == null) {
    			dao = new BaseDAO();
    		}
    
    		return dao;
    	}
    
    }
    
    
  • 采购合同

    package nc.bs.ct.rule;
    
    import nc.bs.dao.BaseDAO;
    import nc.impl.pubapp.pattern.rule.IRule;
    import nc.vo.pubapp.pattern.exception.ExceptionUtils;
    import nc.vo.cmp.apply.AggApplyVO;
    import nc.vo.ct.purdaily.entity.AggCtPuVO;
    
    /**
     * 采购合同弃审按钮控制
     * @author 不太厉害的程序员
     *
     */
    public class UnApproveCtBeforeRule implements IRule<AggCtPuVO> {
    
    	@Override
    	public void process(AggCtPuVO[] vos) {
    		try {
    			for(AggCtPuVO vo:vos){
    				if ("Y".equalsIgnoreCase(vo.getParentVO().getVdef20())) {
    					vo.getParentVO().setVdef20("");
    					continue;
    				}
    				String oaId=vo.getParentVO().getVdef3();
    				if(oaId!=null&&!oaId.isEmpty()){
    					ExceptionUtils.wrappBusinessException("单据"
    							+ vo.getParentVO().getVbillcode()
    							+ "已经提交CRM,请在CRM进行弃审");
    				}
    			}
    
    			
    		} catch (Exception e) {
    			ExceptionUtils.wrappException(e);
    		}
    	}
    	
    	
    	
    	
    	
    	private BaseDAO dao = null;
    	
    	private BaseDAO getBaseDAO() {
    		if(dao == null) {
    			dao = new BaseDAO();
    		}
    		
    		return dao;
    	}
    
    
    }
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值