页面树结构
转至元数据结尾
转至元数据起始

正在查看旧版本。 查看 当前版本.

与当前比较 查看页面历史

版本 1 下一个 »

Smartbi与泛微OA集成示例

1 概述

需求:
(1)平台集成:即实现单点登录,完成OA系统用户及组织架构信息同步到Smartbi系统,通过OA登录后访问报表平台系统不需要重新登录。
(2)报表集成:支持通过URL链接的方式在OA系统集成报表平台相关报表、图表等资源后,根据当前OA用户可以直接访问有权限的报表。
在本示例需求中,Smartbi与泛微OA的集成主要涉及用户同步、单点登录、报表集成。

2 用户同步

本次用户同步采用计划任务调用smartbi接口的方式进行。通过直接数据库读取的方式,获取第三方的用户信息和机构信息,注:本次示例中,假定权限全部在Smartbi中配置,故不同步角色信息。

2.1 同步逻辑:

用户同步依据用户名(工号)作为唯一标识,机构同步依据机构ID作为唯一标识。泛微OA的用户密码采用MD5加密为大写的加密串,如密码:"123",泛微OA中存储的加密串为:202CB962AC59075B964B07152D234B70;而在Smartbi中存储的加密串为:0202cb962ac59075b964b07152d234b70。因而,在同步时,只需将泛微OA的密码转换成小写,在密码前加:"0",然后再存入Smartbi中,即可直接使用泛微OA的密码登录Smartbi,也即是连同密码也同步到了Smartbi。
OA的用户和机构都存在是否有效的标识,1表示用户或机构有效,0表示无效。在同步的时候会先判断这个标识:
(1)标识为1,则进行同步,同步时,如果之前已经同步到BI,则判断OA中的信息与BI中的信息是否一致,一致则不再重复同步,不一致则以OA中的信息为准更新BI中的信息。
(2)标识为0,则判断是否之前已经同步到BI,如果已经同步,则进行删除,如果没有同步则跳过,不作同步处理。

2.2 部署配置

2.2.1 配置数据源

用户同步采用直接通过SQL的方式读取第三方的用户信息,泛微OA中的用户和机构信息存储在泛微OA的知识库中,可通过数据库视图的方式提取出如下两张表的信息,具体表结构如下:
用户表:oa_user

字段名称

说明

c_userid

用户ID(OA中用户ID,同步没有用到)

c_username

用户名(工号)

c_useralias

用户别名(姓名)

c_userpwd

密码(大写MD5加密串)

c_isenabled

是否有效(0/1)

c_defaultgroup

所属机构(OA中一个用户只能属于一个机构)

机构表:oa_group

字段名称

说明

c_groupid

机构名称(OA中的机构ID)

c_groupname

机构别名(OA中机构名称可能重复,所以不能以此为BI的机构名称)

c_groupdesc

机构描述(OA中没有机构描述,故字段没有同步)

c_pgroupid

所属机构名称(OA中的父机构ID)

c_isenabled

是否有效(0/1)

由于数据存在于OA的库中,故需要配置一个数据源,用于连接OA的库。由于本次示例代码写死了同步需要使用的数据源ID为:DS.用户同步。所以需要在Smartbi系统中配置一个名称为:用户同步 的数据源,连接OA的库。示例配置如下图所示:

配置好以后,如果要检验库中是否存在oa_user和oa_group两张表或数据库视图,则可通过基于创建的数据源创建原生SQL查询的方式,分别查询两种表,判断是否存在,并数据正常。

2.2.2 创建任务

数据源配置好以后,就可以创建任务,同步用户了。具体任务配置如下图所示。

示例代码:

2.2.3 创建计划

任务创建好以后,就可以配置一个执行计划。计划的配置可根据实际情况。示例配置如下图所示:

3 单点登录

3.1 登录逻辑

采用隐式登录的方式,即在泛微OA的登录界面中添加Smartbi的登录逻辑;另外,修改泛微OA的注销逻辑中添加Smartbi的注销,在泛微OA点击注销登录的同时,也会注销Smartbi的登录。本次采用浏览器端SDK的方法,具体可查看wiki:
https://history.wiki.smartbi.com.cn/pages/viewpage.action?pageId=21955624
当用户在泛微OA的登录界面中输入用户名和密码登录以后,再使用界面输入的用户名和密码去登录Smartbi系统。
示例代码:
(1)在泛微OA的登录页面中添加Smartbi的登录逻辑,下载示例JSP。
Smartbi登录代码:
(2)在泛微OA的注销页面中添加Smartbi的注销逻辑,下载示例JSP。
Smartbi注销代码:

3.2 注意事项

3.2.1 Smartbi登录失效问题

注意,这种登录方式实际上并没有打开Smartbi的页面,所以,如果长时间没有操作OA以后再去打开Smartbi系统或Smartbi报表,则可能BI的登录已经失效。为解决此问题,泛微OA可以在打开Smartbi系统的链接上再次添加登录BI的方法。下载示例页面:LoginSmartBI.jsp。将LoginSmartBI.jsp部署到泛微OA的login目录中,然后在泛微OA中配置Smartbi的链接。

示例代码:
另外,可以配置BI登录的失效时间,如果失效时间设置大一些,则可更大限度地避免此问题。具体配置方法可查看wiki:
https://history.wiki.smartbi.com.cn/pages/viewpage.action?pageId=21954749

3.2.2 跨域问题

本次单点登录涉及跨域问题,通过在泛微OA中部署BI代理服务器的方法解决。相关内容可查看wiki:
https://history.wiki.smartbi.com.cn/pages/viewpage.action?pageId=21955599注意,实际部署的步骤与wiki描述稍有不同,在部署的时候,由于泛微OA的特殊配置,需要将classes文件夹从WEB-INF移动到smartbi目录下。

4 报表集成

页面集成通过URL链接的方式,可以实现双向集成:泛微OA打开Smartbi资源,以及从BI打开泛微OA的资源。
(1)泛微OA集成BI资源采用URL:
/smartbi/vision/openresource.jsp?resid=...$paramsInfo=[{name:..., value=...}] (2)BI集成泛微OA采用URL:
/workflow/request/ViewRequest.jsp?requestid=...
泛微OA的报表脚本示例代码:
Smartbi报表脚本示例代码:

  • 无标签