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

 

 

原创粉丝点击