找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,极速登录

FineReport深度集成通达OA

benzcomp 实名认证 初学乍练(Lv1)
发表于 2016-11-7 19:39 | 显示全部楼层 |取消关注该作者的回复
本帖最后由 benzcomp 于 2016-11-24 17:29 编辑

网上的文章没有一个实用的,无奈自己动手了。
对应通达2016 9.5.160913版
1、Nginx与Tomcat反向代理
2、单点登录
3、FineReport用户认证配置
4、OA页面集成
5、部门层级结构的实现
目前有一个问题,firefox下单点登录和注销会抽疯,不定时的失效,而且每台的表现不一。在我的本机登录注销都不管用,而虚拟机里就登录正常,注销则10次有8次不管用。不知道firefox对jquery的解析有什么问题,有经验的番薯帮忙解决下

MYOA.rar

82.72 KB, 阅读权限: 10, 下载次数: 255

售价: 50 个F豆  [记录]

2016-11-8 11:15重新上传,修正了精灵不显示在线用户问题

点评

666666666  发表于 2016-11-7 20:16

评分

参与人数 6F豆 +745 VIP经验 +50 F币 +50 收起 理由
大熊先生 + 1 正好使用通达oa,收藏,回头学习测试
luker + 1 感谢分享
windy_gui + 1
txlcc + 10 感谢分享
传说哥 + 666 + 50 + 50 感谢分享
yets11 + 66 感谢分享

查看全部评分

此帖共有 893 位番薯登录后查看

本帖被以下淘专辑推荐:

 帆软首届数据生产力大赛--20g纯金奖章等你领取
回复

使用道具 举报

benzcomp 实名认证 初学乍练(Lv1)
发表于 2016-11-7 19:40 | 显示全部楼层 |取消关注该作者的回复
本帖最后由 benzcomp 于 2017-4-20 09:45 编辑

1、 Nginx与Tomcat反向代理
目的就是为了统一由nginx提供访问入口,也为后面解决通达OA的菜单设置内外网多地址问题。
其实很简单,就是nginx的几行配置,在 MYOA\MYOA\nginx\conf\nginx.conf 文件中插入以下代码:
  1. <blockquote>location ^~ /WebReport/ {    #^~ 可以解决js和css无法读取的问题
复制代码

  • 我也说一句

回复 支持 反对

使用道具 举报

benzcomp 实名认证 初学乍练(Lv1)
发表于 2016-11-7 19:41 | 显示全部楼层 |取消关注该作者的回复
本帖最后由 benzcomp 于 2016-11-9 09:30 编辑

2、单点登录
    a) 参照帆软的帮助文档,不管哪种方式必须要得到用户名、密码,密码只能在登陆时获得,index.php和logincheck.php,logincheck.php比较小,就拿他动手吧,添加ajax跨域单点登录代码。
  1. echo "<script type=\"text/javascript\">\r\n    var frname=\"".$USERNAME."\";\r\n    var frpwd=\"".$PASSWORD."\";\r\n    jQuery.ajax({\r\n    url:\"/WebReport/ReportServer?op=fs_load&cmd=sso\",\r\n    dataType:\"jsonp\",\r\n    data:{\"fr_username\":frname,\"fr_password\":frpwd},\r\n    jsonp:\"callback\",\r\n    timeout:5000\r\n    });</script>";
复制代码
   关于“OA精灵”的单点登录,需要修改 \MYOA\webroot\general\ipanel\index.php 文件,插入ajax跨域单点登录代码:
  1. echo “<script type=\"text/javascript\">\r\n    var frname=\"".$_SESSION["LOGIN_BYNAME"]."\";\r\n    var frpwd=\"".$ROW["PASSWORD"]."\";\r\n    jQuery.ajax({\r\n    url:\"/WebReport/ReportServer?op=fs_load&cmd=sso\",\r\n    dataType:\"jsonp\",\r\n    data:{\"fr_username\":frname,\"fr_password\":frpwd},\r\n    jsonp:\"callback\",\r\n    timeout:5000\r\n    });</script>";
复制代码
   因为这两个文件牵涉到decode,就不放出源码了,直接用我提供的附件替换就行,有能力的自己动手解了看吧。
    b) FineReport 用户身份http认证程序 fr_login.php,放到\MYOA\webroot下:
  1. <?php
  2. include_once "inc/conn.php";
  3. $USERNAME = $_GET["fr_username"];
  4. $PASSWORD = $_GET["fr_password"];
  5. $USERNAME = strtolower(trim($USERNAME));
  6. $query = "SELECT PASSWORD from USER where BYNAME='$USERNAME'";
  7. $cursor = exequery(TD::conn(), $query);
  8. if($ROW = mysql_fetch_array($cursor)){
  9.         $PWD = $ROW["PASSWORD"];
  10. }
  11. if((crypt($PASSWORD, $PWD) == $PWD) || $PASSWORD==$PWD){
  12.         echo $USERNAME;
  13. }else{
  14.         echo "false";
  15. }
  16. ?>
复制代码


    c) 注销用户
    通达注销用户动作是由js代码实现的,针对不同的主题有四个不同的js来处理,分别是:
    \MYOA\webroot\static\js\index.js.gz
    \MYOA\webroot\static\js\index_classic.js.gz
    \MYOA\webroot\static\js\tDesktop\tDesktop.js
    \MYOA\webroot\static\js\tDesktop\puck_tDesktop.js
    把这段代码插入initlogout()函数或logout()函数就可以了。
  1. jQuery.ajax({
  2.     url:"/WebReport/ReportServer?op=fs_load&cmd=ssout",
  3.     dataType:"jsonp",
  4.     jsonp:"callback",
  5.     timeout:5000
  6. });
复制代码



  • 我也说一句

回复 支持 反对

使用道具 举报

benzcomp 实名认证 初学乍练(Lv1)
发表于 2016-11-7 19:42 | 显示全部楼层 |取消关注该作者的回复
本帖最后由 benzcomp 于 2016-11-8 08:52 编辑

3、FineReport用户认证配置
1.PNG
设计器添加远程服务器,我是在服务器上直接用的,所以主机名是localhost,请自行调整
2.PNG
定义数据连接,这里要注意两点,通达的数据库端口是3336、URL要指定库名
3.PNG
定义数据集,这个sql需要说明一下:
  1. select lower(user.BYNAME) as USER_ID,user.USER_NAME,user.PASSWORD,user.USER_PRIV_NAME,department.DEPT_NAME from TD_OA.user,TD_OA.department where NOT_LOGIN!='1' and user.DEPT_ID = department.DEPT_ID
复制代码
因为FR登陆认证对用户名的大小写敏感,而通达的mysql配置大小写不敏感的,而用户账号创建时可能大小写混排,所以,用户账号需要用lower处理一下
4.png
sql输入完,预览一下,没问题就可以用了
登录FR管理平台,用户管理
5.png
配置完成,重新登录,就可以看到OA帐号都同步过来了
6.png

  • 我也说一句

回复 支持 反对

使用道具 举报

benzcomp 实名认证 初学乍练(Lv1)
发表于 2016-11-7 19:42 | 显示全部楼层 |取消关注该作者的回复
本帖最后由 benzcomp 于 2016-11-8 09:04 编辑

4、OA页面集成
这一部分,用通达OA的应该一看就明白,添加菜单
1.PNG
子菜单模块路径的输入需要注意,如果你只有单一域名或IP,可以直接输入http://<ip>/WebReport/ReportServer,但是如果你的服务器有多ip或域名,那么,这里一定要输入../WebReport/ReportServer,如果没有前面两个点的话,会定位的到http://<ip>/general/WebReport/ReportServer
2.PNG
单点登录正常的话,就会直接打开FR平台了
3.PNG
单个报表应用模版的菜单设置
4.png
  • 我也说一句

回复 支持 反对

使用道具 举报

benzcomp 实名认证 初学乍练(Lv1)
发表于 2016-11-24 17:25 | 显示全部楼层 |取消关注该作者的回复
本帖最后由 benzcomp 于 2016-11-24 18:55 编辑

5、部门层级结构的实现
上面代码只是简单的把所有部门罗列出来,没有层级关系,要想实现层级结构就要用到“树数据集”
1.PNG
查询数据集TD_OA.user代码:
  1. select department.DEPT_NO,department.DEPT_NAME,lower(user.BYNAME) as USER_ID,user.USER_NAME,user.USER_PRIV_NAME,user.EMAIL,user.MOBIL_NO from department left join user on department.DEPT_ID=user.DEPT_ID where department.DEPT_ID>0  or user.NOT_LOGIN<>'1' order by department.DEPT_NO,user.USER_PRIV_NO,user.USER_ID
复制代码


2.PNG
创建树数据集TD_OA.DEPT.tree
3.PNG
决策平台数据集选择TD_OA.DEPT.tree,并设置好其他字段
4.png
层级结构就出来了。
这里有个bug,排序总是不正常,看我的sql语句,是按照部门编号、角色编号、用户ID的顺序升序排列的。
最后这张截图的部门排序是对了,但是多数时候是会乱的,而且找不出规律;职位排序应该是“总经理-党委书记-副经理”,结果给我反过来了;人员排序在这个截图里是对的,但是,其他部门里,很多都是乱序的。这个问题已经沟通技术支持,提交了bug。
  收起(1)
  • xyzy1008 xyzy1008

    部门结构,还是有BUG的,在3层以上的会出现:部门丢失的情况。不知楼主有没有测试到?
    2016-12-05 16:43 回复
  • 我也说一句

回复 支持 反对

使用道具 举报

dami3937  初出茅庐(Lv3)
发表于 2016-11-8 11:16 | 显示全部楼层 |取消关注该作者的回复
好东西,收藏一下
  • 我也说一句

回复 支持 1 反对 0

使用道具 举报

austin1122 社区微信达人番薯互助团队 互助新人
发表于 2016-11-8 17:39 | 显示全部楼层 |取消关注该作者的回复
大神请收下我的膝盖
  • 我也说一句

回复 支持 反对

使用道具 举报

laobiah  渐入佳境(Lv2)
发表于 2016-11-9 08:11 | 显示全部楼层 |取消关注该作者的回复
太厉害了!!!!!!
  • 我也说一句

回复 支持 反对

使用道具 举报

传说哥 社区微信达人实名认证 番薯互助团队 帆软员工 管理员
发表于 2016-11-9 17:46 | 显示全部楼层 |取消关注该作者的回复
  • 我也说一句

回复 支持 反对

使用道具 举报

qianlijun 实名认证 初学乍练(Lv1)
发表于 2016-11-9 21:48 | 显示全部楼层 |取消关注该作者的回复
6666666666666666666666
  • 我也说一句

回复 支持 反对

使用道具 举报

xyzy1008 社区微信达人 渐入佳境(Lv2)
发表于 2016-11-11 15:36 | 显示全部楼层 |取消关注该作者的回复
赞一个!正好需要,及时雨啊
  • 我也说一句

回复 支持 反对

使用道具 举报

xyzy1008 社区微信达人 渐入佳境(Lv2)
发表于 2016-11-12 15:00 | 显示全部楼层 |取消关注该作者的回复
449175826bde6582a1.png 能解释下这句代码么?对于OA和FR不在同一服务器上也是localhost么?
  收起(1)
  • benzcomp benzcomp

    localhost肯定是同一台服务器啊,如果你不存在OA服务器多ip,或NAT的情况,可以换成FR服务器的ip或域名
    2016-11-12 17:56 回复
  • 我也说一句

回复 支持 反对

使用道具 举报

xyzy1008 社区微信达人 渐入佳境(Lv2)
发表于 2016-11-13 13:27 | 显示全部楼层 |取消关注该作者的回复
61945827f96547c72.png
请看下,按照你的方法OA web服务根本无法启动啊,FR部署在OA同台服务器上也不行
  • 我也说一句

回复 支持 反对

使用道具 举报

xyzy1008 社区微信达人 渐入佳境(Lv2)
发表于 2016-11-13 16:08 | 显示全部楼层 |取消关注该作者的回复
多谢楼主,已经测试成功。但是有两点问题请楼主能修正:
1、楼主放出的资源包,仅限于OA和FR部署在同台服务器上,要是分开单点登录就会失效,这个应该和通达加密文件部分的路径设置为localhost有关。(这点因为每个人的IP地址不一样,貌似只有自己解密修改一途了)
2、FR单点登录成功后,单击FR退出,再通过OA菜单进入FR系统就会报证书已经注销的错误。
  收起(1)
  • benzcomp benzcomp
    加密文件没有写入ip信息,关于加密文件中添加的单点登录代码在3楼已经公布,FR的路径只是定位于OA服务器的根目录一层,所以只要你把nginx配置好了,使用http://<OA ip>/WebReport/ReportServer能转向到FR就不会有问题的。另外,看一下你的FR的http登陆认证的地址设置是否正确。
    关于证书的问题,我没有碰到。再说,你登陆OA后再注销FR是什么用意,本来做集成就是要让他们同时进退的,你这个用法不合常规啊
    2016-11-13 17:41 回复
  • 我也说一句

回复 支持 反对

使用道具 举报

luker  禁止发言
发表于 2016-11-13 17:50 | 显示全部楼层 |取消关注该作者的回复
太厉害了,好帖,必须支持一下!
  • 我也说一句

回复 支持 反对

使用道具 举报

qwcaigang 社区微信达人实名认证 初学乍练(Lv1)
发表于 2016-11-15 23:47 | 显示全部楼层 |取消关注该作者的回复
正想请人做通达OA集成开发呢,又省下一笔
  收起(1)
  • benzcomp benzcomp

    不早说,也让我挣点外快啊
    2016-11-22 23:23 回复
  • 我也说一句

回复 支持 反对

使用道具 举报

xyzy1008 社区微信达人 渐入佳境(Lv2)
发表于 2016-11-16 09:50 | 显示全部楼层 |取消关注该作者的回复
请教下,OA精灵实现了单点登录。。但是网页版单点登录失效?
  • 我也说一句

回复 支持 反对

使用道具 举报

haoui 社区微信达人 初学乍练(Lv1)
发表于 2016-11-16 15:29 | 显示全部楼层 |取消关注该作者的回复
好厉害的感觉
  • 我也说一句

回复 支持 反对

使用道具 举报

dahorn 社区微信达人 初学乍练(Lv1)
发表于 2016-11-18 09:31 | 显示全部楼层 |取消关注该作者的回复
大神啊,请接受膝盖。
  • 我也说一句

回复 支持 反对

使用道具 举报

juileliu  初学乍练(Lv1)
发表于 2016-11-22 16:54 | 显示全部楼层 |取消关注该作者的回复
66666666666
  • 我也说一句

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

Copyright © 帆软|联系帆软| 联系管理员@兔子酱|免责声明|手机版|帆软社区 ( 苏ICP备14031611号-3 )

GMT+8, 2018-6-24 07:08 , Processed in 1.213286 second(s), 230 queries , Gzip On.

返回顶部 返回列表