FineReport深度集成通达OA

楼主
我是社区第73845位番薯,欢迎点我头像关注我哦~
本帖最后由 benzcomp 于 2016-11-24 17:29 编辑

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

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

查看全部评分

来自 2#
发表于 2016-11-7 19:40:46
本帖最后由 benzcomp 于 2017-4-20 09:45 编辑

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

来自 3#
发表于 2016-11-7 19:41:47
本帖最后由 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. });
复制代码



来自 4#
发表于 2016-11-7 19:42:02
本帖最后由 benzcomp 于 2016-11-8 08:52 编辑

3、FineReport用户认证配置

设计器添加远程服务器,我是在服务器上直接用的,所以主机名是localhost,请自行调整

定义数据连接,这里要注意两点,通达的数据库端口是3336、URL要指定库名

定义数据集,这个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处理一下

sql输入完,预览一下,没问题就可以用了
登录FR管理平台,用户管理

配置完成,重新登录,就可以看到OA帐号都同步过来了


来自 5#
发表于 2016-11-7 19:42:18
本帖最后由 benzcomp 于 2016-11-8 09:04 编辑

4、OA页面集成
这一部分,用通达OA的应该一看就明白,添加菜单

子菜单模块路径的输入需要注意,如果你只有单一域名或IP,可以直接输入http://<ip>/WebReport/ReportServer,但是如果你的服务器有多ip或域名,那么,这里一定要输入../WebReport/ReportServer,如果没有前面两个点的话,会定位的到http://<ip>/general/WebReport/ReportServer

单点登录正常的话,就会直接打开FR平台了

单个报表应用模版的菜单设置

来自 6#
发表于 2016-11-24 17:25:19
本帖最后由 benzcomp 于 2016-11-24 18:55 编辑

5、部门层级结构的实现
上面代码只是简单的把所有部门罗列出来,没有层级关系,要想实现层级结构就要用到“树数据集”

查询数据集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
复制代码



创建树数据集TD_OA.DEPT.tree

决策平台数据集选择TD_OA.DEPT.tree,并设置好其他字段

层级结构就出来了。
这里有个bug,排序总是不正常,看我的sql语句,是按照部门编号、角色编号、用户ID的顺序升序排列的。
最后这张截图的部门排序是对了,但是多数时候是会乱的,而且找不出规律;职位排序应该是“总经理-党委书记-副经理”,结果给我反过来了;人员排序在这个截图里是对的,但是,其他部门里,很多都是乱序的。这个问题已经沟通技术支持,提交了bug。
7楼
发表于 2016-11-8 11:16:50
好东西,收藏一下
8楼
发表于 2016-11-8 17:39:26
大神请收下我的膝盖
9楼
发表于 2016-11-9 08:11:03
太厉害了!!!!!!
10楼
发表于 2016-11-9 17:46:16
11楼
发表于 2016-11-9 21:48:40
6666666666666666666666
12楼
发表于 2016-11-11 15:36:34
赞一个!正好需要,及时雨啊
13楼
发表于 2016-11-12 15:00:54
能解释下这句代码么?对于OA和FR不在同一服务器上也是localhost么?
14楼
发表于 2016-11-13 13:27:45

请看下,按照你的方法OA web服务根本无法启动啊,FR部署在OA同台服务器上也不行
15楼
发表于 2016-11-13 16:08:03
多谢楼主,已经测试成功。但是有两点问题请楼主能修正:
1、楼主放出的资源包,仅限于OA和FR部署在同台服务器上,要是分开单点登录就会失效,这个应该和通达加密文件部分的路径设置为localhost有关。(这点因为每个人的IP地址不一样,貌似只有自己解密修改一途了)
2、FR单点登录成功后,单击FR退出,再通过OA菜单进入FR系统就会报证书已经注销的错误。
16楼
发表于 2016-11-13 17:50:08
太厉害了,好帖,必须支持一下!
17楼
发表于 2016-11-15 23:47:46
正想请人做通达OA集成开发呢,又省下一笔
18楼
发表于 2016-11-16 09:50:47
请教下,OA精灵实现了单点登录。。但是网页版单点登录失效?
19楼
发表于 2016-11-16 15:29:19
好厉害的感觉
20楼
发表于 2016-11-18 09:31:29
大神啊,请接受膝盖。
21楼
发表于 2016-11-22 16:54:08
66666666666
22楼
发表于 2016-11-23 08:55:43
23楼
发表于 2016-11-24 15:13:45
感觉不多,多谢多谢
24楼
发表于 2016-12-23 13:02:56
25楼
发表于 2017-2-17 16:02:59
好像很复杂的样子。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

72回帖数 10关注人数 60531浏览人数
最后回复于:2020-10-21 17:24

返回顶部 返回列表