收藏 分销(赏)

HR自助服务单据开发快速入门.docx

上传人:xrp****65 文档编号:8920635 上传时间:2025-03-08 格式:DOCX 页数:32 大小:2.61MB 下载积分:10 金币
下载 相关 举报
HR自助服务单据开发快速入门.docx_第1页
第1页 / 共32页
HR自助服务单据开发快速入门.docx_第2页
第2页 / 共32页


点击查看更多>>
资源描述
HR自助服务 单据开发快速入门 用友软件股份有限公司北京分公司客户开发部 2011年3月 目 录 1、 NC自助服务单据开发 3 1.1. 总体概述 3 1.2. 开发环境搭建 3 1.2.1. 配置Java运行时环境 3 1.2.2. 配置JAVA_HOME环境变量 3 1.2.3. 下载并解开Dorado5开发包 4 1.2.4. 安装Dorado 5 4 1.2.5. Eclipse开发环境搭建 6 1.2.6. 搭建项目工程 6 1.3. 自助单据开发流程 7 1.3.1. 建立数据模型 7 1.3.2. 导入数据字典 8 1.3.3. 单据模板初始化 9 1.3.4. 导出Java源代码 10 1.3.5. 建立视图层ViewModel。 11 1.3.6. 生成JSP页面 13 1.3.7. 建立后台控制类 15 1.3.8. 功能节点注册 17 1.3.9. 注册功能按钮 20 1.3.10. 按钮处理事件的定义 23 1.3.11. 单据属性设置 24 附录: 27 轻量级参照实现方式: 27 审批流配置注意点 27 轻量级查询模板实现方式 29 按钮动作前后台交互示例: 31 增加按钮动作处理 31 1、 NC自助服务单据开发 1.1. 总体概述 NC自助服务模块使用的是BSTEK公司推出的Dorado 5展现中间件技术。通过将Dorado和NC-UAP平台的整合,可以在自助服务中引用NC-UAP平台中的单据模板 ,提高了在自助下开发单据的效率。 Dorado技术详细介绍请见BSTEK公司官网: 1.2. 开发环境搭建 1.2.1. 配置Java运行时环境 通过Sun官网获取JDK开发包,下载的开发包解压缩到本地非中文名称的目录中;也可以直接使用NCHOME中自带的JDK开发包,如本机中NCHOME的JDK开发包D:\nchome56\nchome\ufjdk 1.2.2. 配置JAVA_HOME环境变量 对于环境变量的配置就不用多说了,本机的配置如下: 1.2.3. 下载并解开Dorado5开发包 通过如下的地址获取dorado5的开发包: 将下载的zip文件解压缩到本地非中文名称的目录中,如本机的E:\dorado5.2 1.2.4. 安装Dorado 5 在确保系统已经配置过JAVA_HOME的前提下,并双击运行dorado 5开发包中的setup.bat文件,该文件进行dorado5开发包的文件初始化工作。(特别声明:绿色食品,setup.bat的所有操作都是针对开发包所在的目录作初始化工作,不会对该目录之外的内容进行修改。) 首先会打开一个命令控制台,要你确认是否执行初始化的工作: 按任意键继续初始化工作: 这时候系统会在桌面上自动的生成一个dordo5 studio的快捷启动图表,并在控制台中出现让你选择是否直接启动dorado的集成开发环境,也就是dorado5的studio。以下统称studio。 如果选择y并按回车键确认打开studio,可以看到下图: 1.2.5. Eclipse开发环境搭建 Eclipse开发环境的搭建在此就不做介绍了,主要的环境有NC56、eclipse开发环境、nc56插件。 1.2.6. 搭建项目工程 对于自助服务的开发,需要同时用到Eclipse和Dorado工程,对于项目工程需要将Eclipse工程目录和Dorado工程目录整合到一块,以便对在两个开发工具对同一工程进行开发。本例中使用的开发工程为NC-HR自助模块的源开发工程HR_WEB5.6_dev。 在Eclipse中导入HR_WEB5.6_dev工程,如下: 在Dorado集成开发平台中导入HR_WEB5.6_dev工程如下: 1.3. 自助单据开发流程 在自助服务下开发的JSP界面,可将NC-UAP平台下的单据整合到自助服务中,这是通过将单据模板信息解析成Dorado控件来实现的,由于是根据单据模板信息表中的数据进行解析的,对于用元数据制作的单据模板,在自助服务界面目前还没有做到很好的兼容,解析过程中还没有增加对元数据的解析,故目前自助服务只能够对用数据字典制作的单据模板进行正确的解析,下面介绍在NC56中,如何用数据字典在自助服务下开发轻量级单据界面。 1.3.1. 建立数据模型 根据具体的业务在PowerDesigner中建立对应的业务模型,本例中介绍的为休假计划的业务。 1.3.2. 导入数据字典 具体的数据字典导入在【客户化】→【二次开发工具】→【系统管理工具】→【数据字典管理】节点来实现导入。 1.3.3. 单据模板初始化 在完成数据字典导入之后,就可以在【客户化】→【二次开发工具】→【模板管理】→ 【单据模板初始化】节点通过数据字典制作相应的单据模板,具体的与NC5.2初始化单据模板一致。 本例初始化完的单据模板卡片界面显示如下: 1.3.4. 导出Java源代码 通过UAP集成开发平台导出Java源代码。 在通过数据源生成VO代码之前,一定要保证在数据库中将数据模型对应的表结构建立,否则在选择数据库表处看不到单据对应的数据库表,具体的建表SQL脚本可以在建模时,通过PowerDesigner生成。 选择完对应的数据库表,设置对应的VO信息以及对应到文件导出目录(%当前eclipse工程% / src / public 包)后,点击“确定”按钮,即可完成对VO的导出。 1.3.5. 建立视图层ViewModel。 ViewModel是一种用于封装界面逻辑和操作逻辑的对象。即视图中包含哪些数据、这些数据以什么方式展现、视图中包含哪些控件、这些控件会激发什么操作等等。我们可以把ViewModel看作是Dataset和各种控件的容器。 ViewModel一般不用于定义各种控件最终在显示的布局,控件布局应通过其它方式进行定义。在通常情况下,我们利用JSP来完成对ViewModel中定义的控件进行布局。 在Dorado集成开发平台中打开项目工程,在对应的目录下,右键鼠标,如下: 选择新建“Module“,进入ViewModel新建向导。 选择通用的视图模型对象(Common ViewModel)即可,点击“OK”,输入视图模型对象名称,即会在相应的目录下生成一个视图模型对象的XML配置文件,配置文件名称为[输入对象名称.view.xml],如本例在新建视图模型对象的时候输入的名称为LeavePlanOne,则生成的视图模型对象的名称为:LeavePlanOne.view.xml。 1.3.6. 生成JSP页面 对于自助JSP页面是通过ViewModel生成的,具体生成JSP的操作如下图所示: 选择相应的路径以保存生成的JSP文件。 再生成JSP页面之后,需要对生成的JSP页面先进行简单的布局配置,如果需要配置其他在ViewModel中定义的控件显示,在定义完控件后再做详细的页面布局。对于使用NC-UAP平台的单据模板时,对应管理型界面的JSP界面配置如下: <%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib uri="" prefix="d" %> <!—引用用友在自助下自定义的标签库--> <%@ taglib uri="" prefix="u" %> <html> <head> <title></title> </head> <body> <!—-config对应的为ViewModel配置文件 --> <d:View config="nc.bs.hrss.test.leaveplan.LeavePlanOne"> <body class="NC-BODY-NSCROLL-NPAD"> <table cellpadding="0" cellspacing="0" width="100%" height="100%"> <tr> <td> <u:MenuTag displayType="2" /> </td> </tr> <tr> <td height="100%" class="NC-PANEL-NSCROLL"> <!—-定义单据模板控件显示位置,本例单据模板为管理型,其他类型的标签详见ufida.tld标签描述文件--> <u:ManageBill listPosition="100%"/> </td> </tr> </table> </body> </d:View> </body> </html> 1.3.7. 建立后台控制类 新建视图模型后台控制类,由于本例中开发的是带审批流的自助界面,具体的后台控制类应继承nc.bs.hrss.pf.PFViewModel。 对于后台控制类的基本配置如下: package nc.bs.hrss.test.leaveplan; import nc.bs.hrss.pf.PFViewModel; import nc.vo.hr.tools.pub.HRAggVO; import nc.vo.hrss.test.leaveplan.AggLeaveplanHVO; import nc.vo.pub.AggregatedValueObject; import nc.vo.pub.SuperVO; public class LeavePlanOne extends PFViewModel { /** * 返回单据VO */ @Override public AggregatedValueObject toBillAggVO() throws Exception { // TODO Auto-generated method stub HRAggVO aggVO = this.toAggVO(); AggLeaveplanHVO vo = new AggLeaveplanHVO(); vo.setParentVO(aggVO.getParentVO()); vo.setChildrenVO(aggVO.getChildrenVO()); return vo; } /** * 返回对应的单据模板的编码 */ @Override public String getBillType() { // TODO Auto-generated method stub return "LP01"; } @Override public String getBusiType() { // TODO Auto-generated method stub return null; } /** * 用于设置表头对应的VO对象 */ @Override public Class<? extends SuperVO> getHeadClass() { // TODO Auto-generated method stub return nc.vo.hrss.test.leaveplan.LeaveplanHVO.class; } /** * 用于设置表体对应的VO对象 */ @Override protected void initBodyTabCodes() { // TODO Auto-generated method stub super.addBodyTabCodeClass("tbm_leaveplan_b", nc.vo.hrss.test.leaveplan.LeaveplanBVO.class); } } 视图模型后台控制类定义完成后,需要将后台控制类与对应的视图模型进行关联,通过设置ViewModel的clazz属性来实现关联。 1.3.8. 功能节点注册 通过NC业务系统【功能注册】节点注册功能节点,在功能注册时,需要注意几点。 l 功能性质:一定要选择“轻量级Web节点”。 l 对应文件名或控制名:为对应的JSP文件。 对新增的自助节点分配权限,分配时一定要将该节点分配给相应的自助角色才行,产品自带的自助角色有四种,在本例中分配给“自助角色-员工“这个角色。 提示:如果在权限分配时,在相应的节点树位置看不到刚刚注册的功能节点,需到【自定义菜单】节点对节点树的结构进行调整。 到这里自助模块开发单据界面的大致框架就搭建起来了,现在在开发环境下重启NC中间件,登录自助界面就可以看到刚刚在自助节点开发的轻量级Web节点了。 重要提示:对于在第1.3.6步中生成的JSP文件保存在Eclipse工程项目中,此时登录自助模块,打开刚刚注册的自助节点时,是无法加载到对应的JSP页面的,需要将该JSP页面按照相应的目录结构拷贝到NCHOME的nchome\hotwebs\hrss目录下,Web容器在加载JSP页面时,才能够将该JSP页面加载到容器中。 单击“休假计划练习一”轻量级Web节点,即可进入对应的JSP界面。 1.3.9. 注册功能按钮 在1.3.8中打开的轻量级单据界面,是没有对应的功能按钮的,如果需要在画面中添加功能按钮,必须在NC业务系统【功能注册】节点注册相应的功能按钮。 注册完功能节点后,需要在后台控制类中重写父类的initBillState(ButtonFactory buttonFactory2) 方法,以控制每个界面状态按钮的显示情况。 自助服务底层按钮工厂类会自带常用的功能按钮,对于不在自带常用的功能按钮集合内的按钮,需要先定义自己的按钮工厂类,该类需继承nc.bs.hrss.bill.ButtonFactory.对于本例中,“审批意见”为自定义按钮,需要自己定义按钮工厂类,如下: public class LeavePlanOneBtnFactory extends ButtonFactory { private static ButtonFactory instance; /** 附件 按钮编码 */ public static final String APPROVE_NOTE = "approvenote"; private LeavePlanOneBtnFactory() { //格式:按钮内码,和注册中相同的中文名称,响应的Command类名,响应的js和java方法名,要显示的图标名称,tooltips提示 String[][] buttons = { { APPROVE_NOTE, "审批意见", null, "onApproveNote", "unapprove.gif", "查看审批意见 "} }; //系统自带的按钮信息是以二位数组的形式存放, //在自定义按钮是按照数组的格式定义并添加到二位数组中即可 super.strButtonInfos = (String[][])ArrayUtils.addAll(super.strButtonInfos, buttons); } public static ButtonFactory getInstance() { if (instance == null) { instance = new LeavePlanOneBtnFactory(); } return instance; } } 自定义按钮的工厂类定义后,就需要在ViewModel的后台控制类中重写父类的initBillState()方法,以控制具体画面状态下按钮的显示情况以及激活情况。 /** * 初始化该单据的所有状态,并且要设置好按钮在该状态下的可见、可用状态 */ @Override protected void initBillState(ButtonFactory buttonFactory2) { // TODO Auto-generated method stub //定义单据初始化状态 BillState billstate = new BillState(BillState.STATE_INIT); //定义该状态显示的按钮组 billstate.addVisibleBtns(new String[] { ButtonFactory.SEARCH, ButtonFactory.NEW, ButtonFactory.EDIT, ButtonFactory.DELETE, ButtonFactory.SUBMIT, ButtonFactory.CALLBACK, ButtonFactory.APPROVE, ButtonFactory.UNAPPROVE, LeavePlanOneBtnFactory.APPROVE_NOTE }); //定义该状态激活的按钮组 billstate.addEnableBtns(new String[] { ButtonFactory.SEARCH, ButtonFactory.NEW, ButtonFactory.EDIT, ButtonFactory.DELETE, ButtonFactory.SUBMIT, ButtonFactory.CALLBACK, ButtonFactory.APPROVE, ButtonFactory.UNAPPROVE, LeavePlanOneBtnFactory.APPROVE_NOTE }); //将增加的单据状态添加 this.addBillState(billstate); super.initBillState(LeavePlanOneBtnFactory.getInstance()); } 在后台控制类定义完单据的状态以及对应状态按钮组显示情况后,需要在视图层控制对象ViewModel加载时,添加相应的JS事件,以控制单据画面初始化时所属的状态。 到此,重启中间件,重新登录自助界面,即可看到单据初始化状态显示的按钮组。 提示: 对于在后台控制类中增加了新的方法,或者引用了新定义的类时,才需要重启中间件,其他情况无需重启中间件。 对于在视图控制对象ViewModel中添加JS脚本后,首先需要保证Eclipse工程中对应的XML文件与在Dorado工具对ViewModel的配置保持同步;其次,再重新登录自助界面,如果发现新增加的JS脚本没有起作用,这时要将IE的缓存清除,以保证能够加载到最新的JS脚本(在java Web开发中经常会这样去做)。 1.3.10. 按钮处理事件的定义 通过以上9步,即可完成在自助服务下单据的界面模型的开发,接下来重要的工作就是定义单据界面中按钮的处理事件。 在Dorado框架中,前台界面与后台处理类的交互是通过Command组件来完成的,常用的有UpdateCommand、RPCCommand.(其他的本人也没用过,组建详细使用说明请见《dorado 5 组件详解 v1.1.doc》) 组件Command的method属性用于指定调用服务器接受类的指定方法的方法名(默认为视图模型中的方法名,即视图ViewModel的关联的后台控制类中的方法)。 对于按钮在前台页面响应事件,是通过定义JS来实现的,具体响应的JS函数的名称在后台按钮工厂类中已经定义。 //格式:按钮内码,和注册中相同的中文名称,响应的Command类名,响应的js和java方法名,要显示的图标名称,tooltips提示 String[][] buttons = { { APPROVE_NOTE, "审批意见", null, "onApproveNote", "unapprove.gif", "查看审批意见 "} }; 如自定义的按钮“审批意见”在前台页面响应的JS函数的方法应为function onApproveNote(). 1.3.11. 单据属性设置 对于带审批流的单据,需要在UAP平台中进行一些审批流相关属性的设置,这与NC5.2 中的设置类似,具体的设置步骤如下: 第一步:单据类型定义 如上图,输入“类型代码”、“类型名称”、“节点编号”,完成后点击“保存”按钮保存定义的单据类型信息。(其中:此处定义的“类型代码”最好和单据模板定义步骤定义的单据模板编码一致,否则在后面会遇到意想不到的问题。) 第二步:单据号设置 如上图,设置单据号的生成规则。 第三步:单据动作定义 第四步:单据动作脚本设置 如上图,在此处对于单据的动作脚本进行编辑,具体的脚本可以直接从其他定义的单据动作脚本拷贝过来即可(因为笔者没有找到在何处去自动生成系统默认的单据动作脚本,只能通过此方法来实现)。在编辑完动作脚本后,在NCHOME对应的模块目录下的\META-INF\var\source会生成相应的动作脚本类。 第五步:单据VO对照 具体的VO对照关系设置如下图: 附录: 轻量级参照实现方式: 对于自助开发下的单据中字段的参照与业务系统中有所不同,具体设置字段为参照的步骤如下: 第一步:在单据模板中,将参照的字段的数据类型设置为参照,参照类型设置具体的参照编码,如下图。 第二步:配置具体的参照,参照的配置是通过XML文件来配置的,参照主要有三种展现类型:GRID、TREE、TREEGRID。具体的配置请见当前工程的\home\ref\business\RefLeaveItemGrid.xml文件,为休假类别参照的XML配置文件。 第三步:设置具体的参照配置文件与参照类型编码的映射关系,对于映射关系的设置,目前还没有具体的配置界面,只能够通过在后台表hrss_ref_map表中去配置具体的映射关系,下图为休假类别参照对照配置。 审批流配置注意点 要想在自助模块顺利使用审批流,需要在工程中做如下配置: 第一步:设置和审批有关的字段的对应关系,通过集成PFConfig类来配置具体的字段对应关系。(见nc.vo.hrss.test.leaveplan.LeavePlanOneConfig) 第二步:配置 Hrss 单据信息,通过实现nc.itf.hrss.pf.IConfigMeta接口来进行配置。(详见nc.bs.hrss.test.leaveplan.LeavePlanOneMeta) 第三步:配置Hrss单据注册类,用于将自定义的单据信息注册到Hrss单据集中。 package nc.impl.hrss.ta.leaveplan; import nc.bs.hrss.ta.leaveplan.LeavePlanConfigMeta; import nc.bs.hrss.test.leaveplan.LeavePlanOneMeta; import nc.itf.hrss.pf.IConfigMeta; import nc.itf.hrss.pf.IHrssPfConfigExt; public class LeavePlanPfConfigExtImpl implements IHrssPfConfigExt { public IConfigMeta[] getPfConfigExt() { // TODO Auto-generated method stub return new IConfigMeta[] { new LeavePlanConfigMeta(), new LeavePlanOneMeta() }; } } 在定义完具体的后台注册实现类后,需要在UPM文件(hr_hrss.upm)中进行配置。 第四步:配置审批流后台处理类。 第五步:定义审批流。 “提交”动作按钮特别说明: 1、如果在ViewModel的后台控制类中,重写AggregatedValueObject toBillAggVO()方法返回的类型为HYBillVO,则需要在聚合VO(AggLeaveplanHVO)定义相关的nc.vo.trade.field.IBillField接口实现类,以配置具体的在审批流字段的具体对应关系。 2、如果重写AggregatedValueObject toBillAggVO()方法返回的类型为HRAggVO,则需要重写”提交“按钮的动作脚本需要重新定义,由具体的审批流后台实现类完成具体提交字段的更新。 轻量级查询模板实现方式 第一步:定义查询控件MarmotQuery。属性设置分别如下,其中category属性设置的为对应的后台查询模板的ID。 第二步:注册查询模板信息。由于自助模块查询模板的注册在UAP平台还没有对应的前端操作界面,只能够通过在后台数据库,向查询模板信息表中注册的模板信息。 首先:向mmt_query_category表中注册查询模板的基本信息,其中categroy字段为对应查询模板的ID,与第一步中查询控件中的category一致。 其次:向mmt_query_template_fields表中插入具体查询模板中具体的查询字段的基本信息。 最后:在注册完查询模板基本信息之后,在视图控制ViewModel中,添加“查询”按钮对应的前端响应JS事件。 /** * 查询按钮响应事件 */ function onSearch(){ advanceQuery.showQueryBox(); } 到此,就完成了在自助模块下查询模板的配置和开发,最终的效果如下: 按钮动作前后台交互示例: 增加按钮动作处理 首先“增加”按钮在系统默认工厂处理类中定义如下: {NEW, "增加", null, "onNew", "new.gif", “新增一条记录”} 则“增加”按钮在前台页面响应的JS函数的方法为function onNew()。本例中在前台视图模型中定义的“增加”按钮的JS响应函数如下: /** * 增加按钮响应事件 */ function onNew(){ if(_templetType == _MANAGE_BILL && _currentTemplet == _LIST_BILL){ onShowCard(); } //调用RPCCommand与后台进行交互,获取新增单据时画面上所需的信息 cmdNew.execute(); setBillReadOnly(false); stateChanged("new", true); } 对于RPCCommand控件cmdNew的定义如下: 其中methode属性设置为对应的后台处理方法名,具体后台控制类的对应方法的定义如下: /** * 增加按钮后台处理方法 * @throws Exception */ public void newBillData(ParameterSet inParameters, ParameterSet outParameters) throws Exception { // }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服