用友nc65 uap公式开发
2017-12-07 17:58
621 查看
用友nc65 uap公式开发
1.应用场景:
上面有一次博客说了如何使用自定义公式解决房产多显问题,这次是在人力资本模块薪资函数公式面板上新加一个公式,实现特定的需求。如图所示:新加一个距起薪日工作日天数公式。
2.开发思路:
和开发自定义公式不同的是:系统公式需要在home/resources下配置两个xml文件,一个是前台显示,一个是后台功能实现类指定,而在人力资本模块使用了多余校验,还需要我们再次配置多语资源文件在:E:\nchome_1106\nchome\langlib2.1配置xml
前台xml在:nchome\resources\formulaconfig\custfunction\hrwa下的default.xml文件夹加入如下代码:
<formula> <customType>9</customType> <functionName>WaperiodDays</functionName> <functionClass>nc.ui.wa.formular.func.WaperiodDays</functionClass> </formula>如图如图所示:
后台功能实现xml路径在:nchome\resources\hr\wa\formula下的wa_formula.xml加入如下代码:
<entry> <string>SALARYPERIODWORKDAYS</string> <function> <defaultName>6013commonbasic;06013commonbasic0073</defaultName> <displayName>salaryPeriodWorkDays</displayName> <hintMsgRes>6013commonbasic;06013commonbasic0073</hintMsgRes> <inputSigRes>6013commonbasic;06013commonbasic0135</inputSigRes> <pattern>salaryPeriodWorkDays\(.*,.*\)</pattern> <arguments>salaryPeriodWorkDays({0},{1})</arguments> <returntype>0</returntype> <parapanel>nc.ui.wa.formular.WageDaysFunctionEditor</parapanel> <group>WA</group> <process>nc.impl.wa.func.SalaryPeriodWorkDays</process> <productCode>UPP6013func</productCode> </function> </entry>其中的多语对应的中文如下:
fvo1.setDefaultName("距起薪日工作日天数"); fvo1.setDisplayName("salaryPeriodWorkDays()"); fvo1.setHintMsgRes("距起薪日工作日天数"); fvo1.setInputSigRes("@薪资函数.期间工作日天数@");在E:\nchome_1106\nchome\langlib下找到对应的多语文件如下:
06013commonbasic0073=距起薪日工作日天数
如图所示:
其中的<pattern>salaryPeriodWorkDays\(.*,.*\)</pattern>代表两个参数,不带参数如下;salaryPeriodWorkDays\(\),对应的<arguments>salaryPeriodWorkDays({0},{1})</arguments>不用填。
在对应的nc.ui.wa.formular.WaFunctionFactory公式工厂类中装载模版,
如图所示:
这样配置好后重启服务在前台就可以看到对应的函数了。
2.2 对应的java类:
前台java类:
package nc.ui.wa.formular.func; import nc.ui.hr.formula.func.HrDigitFunc; public class SalaryPeriodWorkDays extends HrDigitFunc{ public SalaryPeriodWorkDays() { numberOfParameters = 2; } }
后台功能实现类
package nc.impl.wa.func; import nc.vo.hr.func.FunctionReplaceVO; import nc.vo.pub.BusinessException; import nc.vo.pub.lang.UFDate; import nc.vo.pub.lang.UFDate; /** * * @author: zenglong * @ClassName: SalaryPeriodWorkDays * @Description: 距起薪日工作日函数 * @date: 2017年12月4日 */ public class SalaryPeriodWorkDays extends AbstractWAFormulaParse { private static final long serialVersionUID = 3175524099403452930L; public FunctionReplaceVO getReplaceStr(String formula) throws BusinessException { FunctionReplaceVO fvo = new FunctionReplaceVO(); UFDate beginDayLiteralDate = null; UFDate endDayLiteralDate = null; String[] arguments = getArguments(formula); for (int i = 0; i < arguments.length; i++) { String[] date = arguments[i].split("'"); if (i == 0) { beginDayLiteralDate = new UFDate(date[1]); } if (i == 1) { endDayLiteralDate = new UFDate(date[1]); } } int sn = getWorkingDaysBetween(beginDayLiteralDate, endDayLiteralDate, true); fvo.setReplaceStr(" " + sn + " "); return fvo; } private int getWorkingDaysBetween(UFDate beginDay, UFDate endDay, boolean includeEndday) { int countNetWorkingDays = 0; UFDate today = beginDay; while (today.before(endDay)) { if ((today.getWeek() != 6) && (today.getWeek() != 0)) { countNetWorkingDays++; } today = today.getDateAfter(1); } if ((includeEndday) && (endDay.getWeek() != 6) && (today.getWeek() != 0)) { countNetWorkingDays++; } return countNetWorkingDays; } }
3.代码分析:
从nc.impl.hr.formula.parser.WaFormulaProcessParser类中的publicstatic String parse(String formula, LoginContext context) throws BusinessException的方法,从这里开始解析公式:
调用对应nc.impl.wa.func.AbstractWAFormulaParse下的public
String parse(String pk_org, String formula, Object... params) throws BusinessException方法
到同类下的public String parseAfterValidate(String pk_org, String formula, Object... params) throws BusinessException方法
replaceStr = getReplaceStr(tempformula);方法将会找到对应的后台公式类去执行。
相关文章推荐
- 用友nc65 uap开发-公式开发后如何执行生效
- 用友nc65 uap开发刷新按钮二次开发
- 用友nc65 uap开发参照多选三种显示情况总结
- 用友nc65 uap开发查询模版中对于特定条件添加查询条件
- 用友nc65 uap开发如何将一个vo单据显示在一个弹窗面板上?
- 用友nc65 uap开发 nc.vo.bd.meta.BatchOperateVO(批量操作的包装VO)转aggvo
- 用友nc65 uap审批流按钮开发
- 用友nc65 uap开发跳转编辑状态自动赋值参照值无法带出解决办法
- 用友nc65 uap开发中系统出现卡,慢等问题解决思路二(提交审批等按钮卡慢)
- 用友nc65 uap开发主子表单据跳转编辑态时设置某几个值不可编辑
- 用友nc65 uap开发中系统出现卡,慢等问题解决思路一(临时合同节点处理)
- 用友nc65 uap开发参照多选后显示问题解决
- 用友nc65 uap开发对于小数显示百分号开发
- 用友nc65-uap开发将节点分配给当前登录用户可见
- 用友nc65 uap开发参照节点数据拉单之一
- 用友nc65 uap开发找产品功能源代码
- 用友nc65 uap开发参照节点数据拉单之二----直接通过调用查询模版查询上游单据
- 用友nc65 uap开发表体编辑前事件和表体整行不可编辑功能
- uap用友nc65自动加行号
- 用友uap nc65开发-使用自定义公式解决参照多显问题