Portal端字段联动定制化开发
来源:互联网 发布:java运输管理系统代码 编辑:程序博客网 时间:2024/05/29 19:15
财务共享 - 字段联动定制化开发
在portal端,字段编辑后联动其他字段赋值,开发案例。
一、需求描述
差旅费报销单上存在多个页签,这里是城市间交通费,住宿费用,伙食补助费,公杂费四个页签。这四个页签的表体中都需要填写起始日期,截止日期。基于用户需求,使满足选择城市间交通费的出发日期后,自动带出到达日期与当前选择值一致,并且当前页签下面其他页签的表体起始日期默认为该日期值。点击到达日期文本框选择某日期后,值更新为选择的日期值,并且当前页签下面页签对应的截止日期变化为该值。
图1-1-1差旅费报销单页签图
二、 演示说明
1、城市间交通费的出发日期选择为2017-12-08后,城市间交通费的到达日期带出为2017-12-08,住宿费用、伙食补助费、公杂费的入住日期、到达日期、到达日期分别带出为2017-12-08
2、住宿费用的离店日期值改变为2017-12-30后,伙食补助费、公杂费的返回日期、返回日期带出为2017-12-30。演示效果如图1-1-1。
三、 控制逻辑分析
1、页签的起始日期值会对当前页签的截止日期值作用。
2、页签的起始日期对下面页签的起始日期有作用,并对当前页签的截止日期有作用。
3、页签的截止日期对下面页签的截止日期有作用。
4、页签日期值发生变化后影响下面页签对应的日期,但不会影响上面页签的值
四、 开发案例– 日期定制化开发
1、拓展说明
这里以差旅费报销单为例进行开发。其他单据可参照该过程处理
2、开发过程
1>打开差旅费报销单
我们在浏览器登陆财务共享portal端,在报销人门户打开差旅费报销单,Ctrl+U查看网页源代码,确认页面引用的js文件commonCtrl.js,可以去对应模块路径下打开该js文件。
此处是iwebap/erm/js/commonCtrl.js,其他单据则去对应模块下确定该文件。
图:4-2-1 commonCtrl.js调试图
2>开发者工具调试报销单
F12使用开发者工具,确认commonCtrl.js文件中存在registerEvent()注册事件方法。其中注册了valueChange方法,函数中的serverEvent.fire()触发valueChanged事件,交互后台的注解为JKBXLinkAttrController对应的controller控制类。其中valueChanged即是该控制类中方法。
图4-2-2valueChange()函数图
3>确认js交互后台的方法
如下图4-2-3,核查链接属性的函数中定义了headLinkAttr及bodyLinkAttrs,此处的起始日期、截止日期是表体行属性,两个属性对应的字段分别是defitem1、defitem2,这里将defitem1和defitem2加入bodyLinkAttrs中来注册监听起始日期截止日期valueChanged的事件。
var bodyLinkAttrs = ["jkbxr","dwbm","receiver"/*收款人*/,"amount"/*报销金额*/,"ybje"/*含税原币金额*/,"vat_amount"/*含税原币金额*/,"tni_amount"/*无税原币金额*/,"tax_amount"/*原币税额*/,"bzbm"/*币种编码*/ ,"bbhl"/*汇率*/,"assume_org"/*承担单位*/,"assume_amount"/*承担金额*/,"tax_rate"/*税率*/,"paytarget"/*收款对象*/,"hbbm"/*供应商*/,"customer"/*客户*/,"defitem1"/*起始日期*/,"defitem2"/*结束日期*/];
调试程序,确认两个字段添加到表体链接属性bodyLinkAttrs中,然后往下执行触发commonCtrl.js中registerEvent()中serverEvent.fire(),
图4-2-3checkLinkAttr()函数图
此处serverEvent.fire()是差旅费报销单JKBXLinkAttrController对应的controler控制类的valueChanged方法。这里ctrl的value值是后台控制类的@Component注解值。其他单据则根据ctrl及method的value值按实际情况分析。
serverEvent.fire({ ctrl:'JKBXLinkAttrController', method:'valueChanged', async : false, success: function(data){ } });
图4-2-4JKBXLinkAttrController图
4>确认后台控制类及逻辑处理
确定方法valueChanged,其中根据工具类获取当前单据的表头DataTable和表体DataTable,其中我们可以通过IWebViewContext获取到前台页面event的所在页签id,注册的当前field值和value改变后的值newValue;field即在commonCtr.js中headLinkAttrs,bodyLinkAttrs中注册的值。差旅费报销单上点击起始日期选择2018-01-01,则此处的field问"defitem1",newValue为"2018-01-01"。
String tableID = IWebViewContext.getEventParameter("tableID"); String field = IWebViewContext.getEventParameter("field"); String newValue = IWebViewContext.getEventParameter("newValue");
我们通过工具类获取到表体DataTable[],遍历获取到各个表体DataTable,根据tableID可判断当前DataTable,根据下面这个逻辑
- 页签的起始日期值会对当前页签的截止日期值作用。
- 页签的起始日期对下面页签的起始日期有作用,并对当前页签的截止日期有作用。
- 页签的截止日期对下面页签的截止日期有作用。
- 页签日期值发生变化后影响下面页签的对应日期,但不会影响上面页签的值。
进行逻辑控制设置带出其他日期值。
DataTable hTable = FIDataTableUtil.getDataTable("headform"); DataTable[] bTableArr = ERMDataTableUtil.getBusitemDataTableArr();
表体数据值的setter()与getter(),三个参数在上面都有说明,通过逻辑控制对应的进行赛值即可。
FIDataTableUtil.setBodyValue(DataTable, field, newValue); FIDataTableUtil.getBodyValue(DataTable, field);
图4-2-5controller控制类中valueChanged()方法图
到这里就完成了相关逻辑处理。重新运行项目环境,日期定制化开发效果如开始图1-1-1所示。
END
五、 文件路径说明
NCHome:ssc20
ssc20是NCHome的根目录,进入\hotwebs\iweap\下可查看各个模块。进入模块下\js\commonCtrl.js查看该模块下公共js文件进行了解
附图1:
portal端文件路径:\hotwebs
附图2
erm下的commonCtrl.js路径:/iwebap/erm/js/commonCtrl.js
附图3
差旅费报销单的路径:\hotwebs\iwebap\pages\20110ETEA\2641_IWEB\0\1001A91000000003Y1RT\0001A010000000000F0L\0001Z010000000079UJJ\0\simpchn
- Portal端字段联动定制化开发
- 定制Portal开发阶段总结
- 使用 WebSphere Studio Application Developer 的 WebSphere Portal Server 开发: 第 1 部分:Portal Server 2.1 的动态主题定制
- jboss portal (个性化定制)
- Portal Server 2.1 的动态主题定制
- WebSphere Portal portlet开发
- Portal日志开发
- 《portal开发指南》第一章
- liferay portal 开发环境
- IBM Portal 6.0 部署定制的主题和外表
- 利用Jdeveloper 开发Portal (Portlet)
- Portal开发实践开始撰写
- Liferay Portal in Action 开发
- Websphere Portal 8.0 主题开发
- Jetspeed JetExpress Tutorial Portal笔记1 -- 定制portal安装
- portal
- Portal
- Portal
- DynamoDB 之保留关键字
- mongodb gongose
- 微服务--分布式事务的实现方法及替代方案
- 自定义谷歌浏览器滚动条样式
- Windows-caffe安装
- Portal端字段联动定制化开发
- JS转义特殊字符
- 批处理一 入门命令
- 资源文件路径详解(getResource)
- 《Greenplum5.0 最佳实践 》SQL 转换
- 【重磅】AlphaZero炼成最强通用棋类AI,DeepMind强化学习算法8小时完爆人类棋类游戏
- 算法的时间复杂度
- CentOS7 配置 VPN
- Android中的缓存概述