nc uap后台获取前台数据的方法

以向某张单据在新增保存之前增加一个限制条件为例子:

步骤如下:

nc uap后台获取前台数据的方法_第1张图片nc uap后台获取前台数据的方法_第2张图片nc uap后台获取前台数据的方法_第3张图片

主要代码如下:

public class MaterrialOutSaveBeforeListener implements IBusinessListener {  //实现IBusinessListener接口,可以配置连接到相应事件
    
    public MaterrialOutSaveBeforeListener(){ //空构造函数
        
    }

    @Override
    public void doAction(IBusinessEvent event) throws BusinessException {

      AggregatedValueObject[] aggVOs = getVOs(event);  //获取单据条数,最原始的VO对象 聚合VO AggregatedValueObject也是原始VO,不过比CircularlyAccessibleValueObject高一

//个级别
        Boolean isProject=null;   //判断表体的项目项是否全部都不为空
        String cdptid=(String)aggVOs[0].getParentVO().getAttributeValue("cdptid");         //获取表头的VO,最原始的vo也是CircularlyAccessibleValueObject
        CircularlyAccessibleValueObject[] objs=aggVOs[0].getChildrenVO();                    //获取表头的VO,最原始的vo也是CircularlyAccessibleValueObject
        for(CircularlyAccessibleValueObject ob:objs){               //循环判断表体每个记录行的项目项是否为空
            if(ob.getAttributeValue("cprojectid")==null){            //如果表体某个记录行的项目项是否为空,做出标记,返回
                isProject=false;
                break;
            }
            isProject=true;
        }
        if(cdptid==null||cdptid.equals("")){
            if(isProject==null||isProject==false){
                ExceptionUtils.wrappBusinessException("表头领料部门和表体部门不能同时为空");
            }
        }
        if(isProject==null||isProject==false){
                if(cdptid==null||cdptid.equals("")){
                    ExceptionUtils.wrappBusinessException("表头领料部门和表体部门不能同时为空");
            }
        }
       
    private AggregatedValueObject[] getVOs(IBusinessEvent event)
            throws BusinessException {
        ValueObject obj = (ValueObject) event.getUserObject();
        AggregatedValueObject[] vos = null;
        if ((obj instanceof ICGeneralCommonEvent.ICGeneralCommonUserObj)) {
            ICGeneralCommonEvent.ICGeneralCommonUserObj objs = (ICGeneralCommonEvent.ICGeneralCommonUserObj) obj;
            vos = (AggregatedValueObject[]) objs.getOldObjects();
        } else {
            BusinessEvent.BusinessUserObj objs = (BusinessEvent.BusinessUserObj) obj;
            vos = (AggregatedValueObject[]) objs.getUserObj();
        }
        if ((vos == null) || (vos.length == 0)) {
            return null;
        }
        return vos;
    }

}

获取前台的信息。也可以使用这样的方法:、

      ICGeneralCommonEvent e = (ICGeneralCommonEvent) event;  //先强制转换event
        Object[] value = e.getOldObjs();        //  获取event里面的最原始对象集
        Object data = value[0];                        //获取event里面的最原始对象集的第一个选项
        if(data instanceof GeneralInVO){      //判断是否可以转成一般的VO
        StringBuilder builder = new StringBuilder();
        builder.append("select * from ic_whstrans_h");
        builder.append(" where dr=0 and  vnote='"
                + ((GeneralInVO) (data)).getParentVO()
                        .getVbillcode() + "';");                    //获取最原始对象集的第一个对象的表头的单据类型。
        WhsTransBillHeaderVO headerVO = (WhsTransBillHeaderVO) getBs()   //根据表头单据类型进行数据库查询
                .executeQuery(builder.toString(),
                        new BeanProcessor(WhsTransBillHeaderVO.class));



你可能感兴趣的:(Uap,Nc)