用友nc65 uap公式开发

1.应用场景:

上面有一次博客说了如何使用自定义公式解决房产多显问题,这次是在人力资本模块薪资函数公式面板上新加一个公式,实现特定的需求。如图所示:新加一个距起薪日工作日天数公式。

2.开发思路:

和开发自定义公式不同的是:系统公式需要在home/resources下配置两个xml文件,一个是前台显示,一个是后台功能实现类指定,而在人力资本模块使用了多余校验,还需要我们再次配置多语资源文件在:E:\nchome_1106\nchome\langlib
2.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类中的public static 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公式开发相关推荐

  1. 用友nc65 uap开发找产品功能源代码

    用友nc65  uap开发找产品功能源代码 1.目标:在我们开发中,很多时候我们看到产品有的功能二开的时候需要使用相关功能,这个时候怎么去参考产品相关功能源代码呢?如我们需要收款结算录入节点的联查凭证 ...

  2. 用友nc65 uap开发刷新按钮二次开发

    用友nc65 uap开发刷新按钮二次开发 1.问题现象:卡片刷新,直接返回列表,且定位成第一条,且执行的是全部刷新 2.问题分析: 65向导生成的按钮,刷新按钮使用的同一个 nc.ui.pubapp. ...

  3. 用友nc65 uap开发如何将一个vo单据显示在一个弹窗面板上?

    用友nc65   uap开发如何将一个vo单据显示在一个弹窗面板上? 在有的时候我们需要通过一个节点查看另外一个节点与之相关的信息,而如果需要再去打开另外一个节点这样会使得操作繁杂.此时我们利用他们之 ...

  4. 用友nc65 uap开发参照多选三种显示情况总结

    用友nc65 uap开发参照多选三种显示情况总结 总结参照多选后显示在面板上的3中情况. 注意点:1参照属性面板不能存放数组类型, 2.参照字段由元数据产生,可能不能显示出来,此时需要到单据模版初始化 ...

  5. 用友nc65 uap开发 使用同一个元数据开发两个节点后使用不同的审批流

    用友nc65 uap开发 使用同一个元数据开发两个节点后使用不同的审批流 1.场景: 前面博客有提到过,使用同一个元数据开发出两个不同的节点,但是对于两个节点是有自己的不同审批流配置, 2.思路: N ...

  6. 用友NC65 Rest接口开发及调试(一)

    NC65中除了支持SOAP协议的webservice接口外,还支持REST协议的接口,NC65的REST服务封装的是restlet,找了很多资料终于弄清楚了,这里总结归纳一下,供朋友们参考: 1.接口 ...

  7. 用友NC65 配置UAP时 打开sysconfig闪退

    用友NC65 配置UAP时 打开sysconfig闪退 在安装目录下边记事本打开sysconfig,然后在if一行后边加一行 set JAVA_HOME=D:\yonyou\home\ufjdk 保存 ...

  8. 用友U9 UAP平台解析

    用友U9 UAP平台解析 e-works 孙亚婷 2009年10月,e-works Research对用友U9 2.0版进行了一次评估.本文对U9的UAP平台的评估结果进行解析. 1.现代企业环境的变 ...

  9. 记录用友ERP二次开发全过程(转载)

    记录用友ERP二次开发全过程 以此为备忘录. 最好在机器上装好U8. 下一步把自定义权限及模块加入U8里,以方便外部程序调用,识别! function erpLogin:boolean; var lo ...

最新文章

  1. LeetCode简单题之拆炸弹
  2. oracle SQL性能优化
  3. centos7如何安装samba-client_如何在基本图形模式下最小化全新安装CentOS 7?
  4. try catch finally 执行顺序问题
  5. 20应用统计考研复试要点(part25)--简答题
  6. python基础-网络基础知识和网络编程
  7. (138)System Verilog覆盖率目标设置
  8. ROS入门-10.话题消息的定义与使用
  9. vs配置opencv
  10. 腾讯体育php面试题,腾讯php程序员面试题目及答案分享!
  11. 2019年PAT甲级冬季考试真题及参考答案
  12. internet信息服务器管理器,细述Win10系统上开启internet信息服务(iis)管理器的操作步骤...
  13. windows系统安装wget指令
  14. Mysql查询性能优化-善用Explain语句
  15. 为什么我们创业失败了和选择创业公司的思考
  16. x射线 相衬成像 matlab模拟,X射线相衬成像系统与成像方法
  17. layui按钮---Layer自定义按钮,关闭弹出层/弹窗;layer自带按钮
  18. UVA1103古代象形文字識別
  19. 【C++】数组和指针的爱恨情仇。。。
  20. QRCode二维码扫描和生成

热门文章

  1. 找出让硬盘狂转的元凶
  2. 算法笔记:最富有客户的资产总量
  3. 开工难,工资还得照发,怎么办
  4. 分布式/微服务理论知识
  5. 支付宝支付流程与RSA算法原理
  6. Android 网络性能优化(2)DNS优化,安卓插件化开发
  7. 香橙派4和树莓派4B构建K8S集群实践之三:kubesphere
  8. Hive数据仓库建模
  9. 安徽理工大学计算机设计大赛,校2019年大学生机械创新设计大赛圆满举办
  10. 推荐几款炫酷的基于jquery的页面特效