最近单位在用帆软做快速开发,我虽然比较熟悉JavaScript和HTML,自己从零开始造轮子效果可能更好,但是毕竟局里想要使用这个,又是团队项目,自然是能省事就省事一点,有得用就用吧,年纪大了,我也就懒得自己造轮子了。

情人节那天跟我出来喝茶的女孩,我还送了她轻松熊的,正月初七就换了不知道和谁的情侣头像,初六晚上还和别人去看那部电影《你好,李焕英》,不要问我为什么知道这件事,我是个早就被伤害到千疮百孔的人,我真的是麻木了,彻底的麻木了,想起以前大学第一次表白被拒那会儿我伤心了两年,而现在,我伤心不到两个小时……我不得不变得越来越铁石心肠以防止这个世界一次又一次的对我的伤害。

下面言归正传:

最近需要使用帆软批量给一些单元格设置条件属性。帆软的条件属性要批量设置是比较麻烦的,它没有条件属性的格式刷,所以,比如说,你想对一大堆的单元格设置诸如大于0就变绿小于0就变红这样的条件属性,是没有办法先设置好一个再用类似格式刷的东西去刷向另一格的,这就很坑爹了。当然,麻烦归麻烦,也不是就无解,目前有两个解决方法(我通常用的是第一个)。第一个方法是按住ctrl键,把你要设置的单元格全部点上,再一次性设置条件属性。这样吧,如果你的表格比较小倒是还好,表格超过一个画面的话还是要多次操作,没办法。第二个方法就不赘述了,就是使用JavaScript在执行加载结束事件(如何在页面加载结束时执行某个js事件请参考我的前面发的另一篇博客)

然后就是跳转了,有时候,比如你有好几个部门,像销售部、研发部、人事部等等,有个总表,要在总表上增加点击功能,然后跳转到另一个页面去看各个部门的明细,那么,最简单的方法就是在finereport里面设置网络报表,然后自定义一大堆的参数,然后实现跳转,但是,这种东西对于比较简单的报表是没问题的,如果你要实现的可跳转的按钮过多,那么这种给每个可跳转单元格配置自定义参数的工作量会极其可怕,而且日后要修改也非常非常不方便。

比如说,有个表,有上面三个部门分别的十二个月的活动支出明细,手工加跳转要配置得很累很吐血,这个时候如果用js的话就是弄个数组然后for循环的事,而且后期维护起来就简单多了。

用js实现自定义传参,我们知道,js的一句window.open('http://www.baidu.com')就可以实现跳转了。

然后,已知帆软的网址的格式都是 http://你的服务器地址:端口/webroot/decision/view/report?viewlet=/某个文件夹/某个文件.cpt&__parameters__={"__pi__":true,"你的名字":"哈哈哈"}&_=1613983982000

"你的名字":"哈哈哈" 这个就是自定义参数名称和参数的值了,如果要多个就一起添加进去就可以了,用英文的逗号隔开,其实就是个json格式。

而__parameter__后面的 &_=1613983982000 则是时间戳,用js获取当前时间戳是很简单的,就是 Date.parse(new Date())

如果要获取finereport控件的值,则是: var aaa = contentPane.parameterEl.getWidgetByName("某个控件的名称").getValue() 比如获取某个时间,或者某个文本框里面的值等。

通过这样,拼凑一个地址出来即可用window.open()函数实现自定义跳转了。

由于是通过js的,所以可以很容易的给横竖的多个按钮批量添加或绑定跳转事件。

finereport的网络报表地址会对网址进行两层的encodeURI()加密,所以在网址那里加上两层的encodeURI(encodeURI(url))即可模拟得像模像样了。

我是直接将window.open(encodeURI(encodeURI(url)))嵌在网页上,有时可能怕泄密,则可以用js进行事件绑定,或者对url的内容进行进一步的加密,再去写一个解密处理函数,再将代码进行压缩混淆等等。不过,一般来讲没必要搞得太复杂,因为大部分用户其实根本不懂你的代码……

为了让自己套js的单元格更加像模像样一点,还可以添加鼠标事件,比如让鼠标移入的时候就改变鼠标样式变成那个食指朝上的预点击图标,鼠标移出就变回原来的图标。

这个很简单,就是div.style.cursor='pointer' 和 div.style.cursor='default'

由于单位的项目保密原因,这次就不贴出源码了,但是因为很简单,而且也已经说得很详细了,相信有需要的朋友只要仔细看然后慢慢弄就可以了。

就到这里。