NC65 自定义公式函数 开发

1、编写显示公式JAVA类,该类继承nc.vo.pub.formulaset.function.NcInnerFunction,例如:public class HrStrFunc extends NcInnerFunction

public class HrDigitFunc extends NcInnerFunction

返回类型是String型的函数

package nc.ui.hr.formula.func;

import java.util.ArrayList;
import java.util.List;

import nc.vo.pub.formulaset.FormulaTypePair;
import nc.vo.pub.formulaset.IFormulaValidate;
import nc.vo.pub.formulaset.IFormulaValidateType;
import nc.vo.pub.formulaset.core.ParseException;
import nc.vo.pub.formulaset.function.NcInnerFunction;

/**
 * 返回类型是String型的函数
 */
public class HrStrFunc extends NcInnerFunction implements IFormulaValidate
{
    /**
     * 
     */
    public HrStrFunc()
    {
        super();
        
        numberOfParameters = 0;
    }
    
    /**
     * 
     * @see nc.vo.pub.formulaset.function.PostfixMathCommand#function(java.util.List)
     */
    @Override
    public Object function(List param) throws ParseException
    {
        
        return super.function(param);
    }
    
    @Override
    public List<FormulaTypePair> getValidParamTypePairs()
    {
        List<FormulaTypePair> result = new ArrayList<FormulaTypePair>();
        
        result.add(new FormulaTypePair(new IFormulaValidateType[0], IFormulaValidateType.STRING));
        
        return result;
    }
}

返回类型是数值型的函数

package nc.ui.hr.formula.func;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import nc.vo.pub.formulaset.FormulaTypePair;
import nc.vo.pub.formulaset.IFormulaValidate;
import nc.vo.pub.formulaset.IFormulaValidateType;
import nc.vo.pub.formulaset.core.ParseException;
import nc.vo.pub.formulaset.function.NcInnerFunction;

/**
 * 返回类型是数值型的函数
 */
public class HrDigitFunc extends NcInnerFunction implements IFormulaValidate
{
    /**
     * 
     */
    public HrDigitFunc()
    {
        numberOfParameters = 0;
    }
    
    /**
     * @see nc.vo.pub.formulaset.function.PostfixMathCommand#function(java.util.List)
     */
    @Override
    public Object function(List param) throws ParseException
    {
        return super.function(param);
    }
    
    public final Map<Integer, IFormulaValidateType> getParasTypeMap()
    {
        return new HashMap<Integer, IFormulaValidateType>();
    }
    
    public final IFormulaValidateType getReturnType()
    {
        return IFormulaValidateType.NUMBER;
        
    }
    
    @Override
    public List<FormulaTypePair> getValidParamTypePairs()
    {
        List<FormulaTypePair> result = new ArrayList<FormulaTypePair>();
        
        result.add(new FormulaTypePair(new IFormulaValidateType[0], IFormulaValidateType.NUMBER));
        
        return result;
    }
}

2、以“期间日历天数”和“上一期间日历天数”为例:

期间日历天数:

package nc.ui.wa.formular.func;

import nc.ui.hr.formula.func.HrDigitFunc;

/**
 * 
 * @走查人: 
 * @走查日期: 
 * @修改人: 
 * @修改日期: 
 */
public class WaperiodDays extends HrDigitFunc {

}

package nc.impl.wa.func;

import nc.vo.hr.func.FunctionReplaceVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFLiteralDate;

/**
 * 期间日历天数
 * @走查人: 
 * @走查日期: 
 * @修改人: 
 * @修改日期: 
 */
public class WaPeriodDays extends AbstractWAFormulaParse{
	private static final long serialVersionUID = 3175524099403452930L;

	/** 
	 * @see nc.impl.wa.func.AbstractWAFormulaParse#getReplaceStr(java.lang.String)
	 */
	@Override
	public FunctionReplaceVO getReplaceStr(String formula) throws BusinessException {
		
		UFLiteralDate periodstart = getContext().getWaLoginVO().getPeriodVO().getCstartdate();
		UFLiteralDate periodEnd = getContext().getWaLoginVO().getPeriodVO().getCenddate();
		
		int sn = UFLiteralDate.getDaysBetween(periodstart,periodEnd );
		FunctionReplaceVO fvo = new FunctionReplaceVO();
		fvo.setReplaceStr(" " +(sn+ 1)+ " ");

		return fvo;
	}

}

上一期间日历天数:

package nc.ui.wa.formular.func;

import nc.ui.hr.formula.func.HrDigitFunc;

public class LastWaPeriodDays extends HrDigitFunc{

}

package nc.impl.wa.func;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import nc.vo.hr.func.FunctionReplaceVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFLiteralDate;

/**
 * 上一期间日历天数
 * @走查人: 
 * @走查日期: 
 * @修改人: 
 * @修改日期: 
 */
public class LastWaPeriodDays extends AbstractWAFormulaParse{
	private static final long serialVersionUID = 3175524099403452930L;

	@Override
	public FunctionReplaceVO getReplaceStr(String formula) throws BusinessException {
		
		UFLiteralDate periodstart = getContext().getWaLoginVO().getPeriodVO().getCstartdate();
//		UFLiteralDate periodEnd = getContext().getWaLoginVO().getPeriodVO().getCenddate();	
		
		UFLiteralDate startDay = new UFLiteralDate(getDate(periodstart,0));
		UFLiteralDate endDay = new UFLiteralDate(getDate(periodstart,1));
		
		FunctionReplaceVO fvo = new FunctionReplaceVO();
		int sn = UFLiteralDate.getDaysBetween(startDay,endDay);		
		fvo.setReplaceStr(" " +(sn+ 1)+ " ");

		return fvo;
	}
	
	private String getDate(UFLiteralDate date, int type){
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date.toDate());
		calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1); 
		if(type==1){
			int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
			calendar.add(Calendar.DATE, days-1);
		}
		String val = new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
		return val;
	}

}

2.1、xml文件配置:
文件路径:nchome\resources\formulaconfig\custfunction\hrwa\default.xml
在这里插入图片描述

文件路径:nchome\resources\hr\wa\formula\wa_formula.xml
在这里插入图片描述
数据库:
在这里插入图片描述
效果:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值