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
数据库:
效果: