1. 第三方报表集成

1.1. 报表插件

1.1.1. 1.第三方登录信息配置

为了降低和现有代码的耦合,第三方报表集成一般以独立插件形式存在。通常情况下在开发环境把第三方报表对应的服务地址配置在该独立插件的配置文件中。以分析云报表的集成插件为例,配置如下:

这样在线上部署环境,我们就可以通过协同系统配置器动态修改这几个参数,如下:

1.1.2. 2.插件启动过程

①为了让第三方报表作为一个独立插件随着Spring容器启动,我们需要让Spring帮我们创建一个第三方报表的Bean,即在该插件的Manager配置文件中注册一个Bean指向第三方报表的实现类。如下:

该实现类需要同时实现两个接口

其中SystemInitializer为T1开发框架的标准系统初始化接口,initialize和destroy方法分别在系统启动和停止时调用(详细启动实现过程我们不必关心)

另一个ReportCategoryBinding接口为标准的报表分类适配接口,该接口定义了到目前为止OA侧支持的对第三方报表的各个操作,比如权限检测、报表绑定、报表解绑等。

②在系统启动时,BiInsideCategoryBinding实现类会自动创建第三方报表的管理员角色,并读取相关登录信息注入到当前环境备用。

1.2. 报表管理员角色分配

在步骤二中系统启动时创建了第三方报表的管理员角色之后,我们需要将该角色授权给对应的系统人员账号才可以在报表中心-->报表管理菜单下显示出第三方报表页面。

使用单位管理员账号登录OA系统修改对应的人员角色并保存,如下:

保存之后即可在报表中心—>报表管理菜单下看到第三方报表集成菜单。

1.3. 报表基础功能

通常情况下第三方报表集成页面包含报表绑定、解除绑定、移动至和授权这四个功能按钮。

1.3.1. 1.报表绑定

即建立OA侧和第三方报表系统两端的报表对应关系,点击“绑定”按钮时会调用第三方报表提供的报表数据查询接口将可以进行绑定的报表数据展示成树形结构备选。

第三方报表数据查询接口定义在BiInsideCategoryBinding的findSelectedTreeNodes方法中,根据不同系统自行调整接口URL地址及参数即可。

选择要进行绑定的报表之后点击确认按钮会产生该报表在两侧系统的对应关系及权限信息并记录到OA侧数据库(表vreport_record和表vreport_record_auth)。

1.3.2. 2.解除绑定

解除绑定即删除上述建立的两个系统中报表的对应关系及权限数据(表vreport_record和表vreport_record_auth)。

对应后台VReportManagerImpl.removeVReportRecord方法:

1.3.3. 3.移动至

即修改所选报表从当前报表分类修改为另一个报表分类。

对应后台VReportManagerImpl.updateReportCategory方法。

1.3.4. 4.授权

授权即给予OA侧指定人员在报表中心-报表分析菜单下查看该绑定报表的权限。

对应后台VReportManagerImpl.updateVReportAuth,在此要注意每次授权操作会将原来的权限信息删除,重新记录被授权的人员或部门信息(表vreport_record的auth字段和表vreport_record_auth)。

1.4. 报表自定义功能扩展

除了上述四个基本功能按钮之外,现有的集成接口还提供了扩展功能接口,实际开发过程中可根据需要按需扩展,仍以分析云报表为例:

假如我们需要在报表集成工具栏增加一个自定义的功能按钮(此处以点击按钮打开指定URL为例),则直接在BiInsideCategoryBinding实现类的getExtendFunctions方法中增加该按钮的定义即可,包括页面元素ID,按钮显示文字,样式,返回值等。

在打开BI分析云报表页面时前端控制器会取出该实现类中所有扩展功能,将自定义扩展按钮的定义传递到前台页面。

前台JS(otherReportHome.js)会根据自定义类型自动生成对应类型的功能按钮。

当然,扩展功能接口也可以在后台调用,比如在监听到人员分析员报表管理员角色变化时,将对应人员信息通知分析云。则我们只需在分析云集成实现类BiInsideCategoryBinding的getExtendFunctions方法中增加一个类型为RoleChgNotifyFunction的Function将接口调用逻辑复写即可。

调用时取出该实现类的所有扩展Function根据类型去匹配并调用。

其它扩展功能接口使用方法类似:

1.5. 报表外部REST接口

1.5.1. 1.第三方报表系统参数查询接口

①查询当前OA侧支持的系统参数(各个参数含义见附录)

请求说明:

请求路径 /seeyon/rest/vreport/sysVar/list
HTTP请求method GET注: (GET:请求参数在URL中, POST:请求参数在BODY中)

请求参数:

节点名称 父节点 类型 长度 是否必填 描述

应答参数:

名称 父节点 类型 长度 是否必填 描述
code String 是 结果状态码
data Object 是 结果数据
params data Array 是 参数代码列表
message String 否 结果描述

请求示例

②查询指定系统参数(支持批量查询)

请求说明:

请求路径 /seeyon/rest/vreport/sysVar/{memberId}/{pram1}\ {pram2}\ ...
HTTP请求method GET注: (GET:请求参数在URL中, POST:请求参数在BODY中)

请求参数:

节点名称 父节点 类型 长度 是否必填 描述
memberId Long 是 人员ID
pramN String 是 参数代码,含义见附录

应答参数:

名称 父节点 类型 长度 是否必填 描述
code String 是 结果状态码
data Object 是 结果数据
message String 否 结果描述

请求示例:

1.5.2. 2.判断人员是否有访问指定报表的权限

请求说明:

请求路径 /seeyon/rest/vreport/hasAuth/{memberId}/{reportId}
HTTP请求method POST注: (GET:请求参数在URL中, POST:请求参数在BODY中)

请求参数:

节点名称 父节点 类型 长度 是否必填 描述
memberId Long 是 OA侧人员编号
reportId Long 是 报表ID

应答参数:

名称 父节点 类型 长度 是否必填 描述
code String 是 结果状态码
data Object 是 结果数据
hasAuth data Boolean 是 true有权限;false无权限
message String 否 结果描述

请求示例

1.5.3. 3.第三方报表绑定

请求说明:

请求路径 /seeyon/rest/vreport/thirdBind
HTTP请求method POST注: (GET:请求参数在URL中, POST:请求参数在BODY中)

请求参数:

节点名称 父节点 类型 长度 是否必填 描述
memberId Long 是 OA侧人员编号
moduleId int 是 第三方系统模块ID
reportCategoryId Long 是 OA侧报表分类ID
id Long 是 OA侧报表ID
name String 是 OA侧报表名称
category boolean 是 是否为目录
parentId Long 是 父级目录ID
properties Object 是 其它属性
platform properties String 是 客户端类型:0-PC端;1-移动端

应答参数:

名称 父节点 类型 长度 是否必填 描述
code String 是 结果包体
data String 是 true绑定成功;false绑定失败
message String 否 结果描述

请求示例:

1.5.4. 4.第三方报表解绑

请求说明:

请求路径 /seeyon/rest/vreport/thirdUnBind
HTTP请求method POST注: (GET:请求参数在URL中, POST:请求参数在BODY中)

请求参数:

节点名称 父节点 类型 长度 是否必填 描述
memberId Long 是 OA侧人员编号
reportId Long 是 第三方报表ID

应答参数:

名称 父节点 类型 长度 是否必填 描述
code String 是 结果包体
data Boolean 是 true解绑成功;false解绑失败
message String 否 结果描述

调用示例:

1.5.5. 5.第三方报表授权

请求说明:

请求路径 /seeyon/rest/vreport/thirdAuth
HTTP请求method POST注: (GET:请求参数在URL中, POST:请求参数在BODY中)

请求参数:

节点名称 父节点 类型 长度 是否必填 描述
memberId Long 是 OA侧人员编号
reportId Long 是 第三方报表ID
auths Array 是 权限信息(组织类型\ 组织ID)

应答参数:

名称 父节点 类型 长度 是否必填 描述
code String 是 返回状态码
data Boolean 是 true解绑成功;false解绑失败
message String 否 结果描述

调用示例:

1.6. 附录

1.6.1. 1.系统条件参数字典

参数描述 请求参数
登录人员ID org_currentUserId
登录人员所在部门ID org_currentUserDepartmentId
登录人员所在上级部门ID org_currentUserSuperiorDeptId
登录人员所在一级部门ID org_currentUserFirstDeptId
登录人员岗位ID org_currentUserPostId
登录人员职务级别ID org_currentUserJobLevelId
登录人员所在单位ID org_currentUserUnitId
登录人员所在部门ID(包含子部门) org_currentUserIncludeChildDepartmentId
登录人员所在上级部门ID(包含子部门) org_currentUserIncludeChildSuperiorDeptId
登录人员所在一级部门ID(包含子部门) org_currentUserIncludeChildFirstDeptId
登录人员所在单位ID(包含子单位) org_currentUserUnitId
登录人员主管各部门ID org_currentUserManagerDepartmentId
登录人员主管各部门ID(包含子部门) org_currentUserIncludeChildManagerDepartmentId
登录人员分管各部门ID org_currentUserLeaderDepartmentId
登录人员分管各部门ID(包含子部门) org_currentUserIncludeChildLeaderDepartmentId
登录人员兼岗各部门ID org_currentUserDeputyPostDepartmentId
登录人员兼岗各部门ID(包含子部门) org_currentUserIncludeChildDeputyPostDepartmentId
登录人员所在部门及兼岗各部门ID org_currentUserDeptAndDeputyPostDeptId
登录人员所在部门及兼岗各部门ID(包含子部门) org_currentUserIncludeChildDeptAndDeputyPostDeptId
登录人员姓名 org_currentUserTrueName
登录人员登录名 org_currentUserLoginName
登录人员的人员状态 org_currentUserState
登录人员的人员类别 org_currentUserType
登录人员所在部门名称 org_currentUserDepartment
登录人员所在上级部门名称 org_currentUserSuperiorDept
登录人员所在一级部门名称 org_currentUserFirstDept
登录人员岗位名称 org_currentUserPost
登录人员职务级别名称 org_currentUserJobLevel
登录人员所在单位名称 org_currentUserUnit
登录人员所在单位编码 org_currentUserUnitCode
登录人员所在部门编码 org_currentUserDepartmentCode
登录人员编号 org_currentUserCode
登录人员岗位代码 org_currentUserPostCode
登录人员所在外部单位ID org_currentUserExternalDepartmentId
登录人员所在外部机构ID org_currentUserExternalSuperiorDepartmentId
登录人员负责的各外部单位ID org_currentUserManagerExternalDepartmentId
登录人员负责的各外部机构ID org_currentUserManagerExternalSuperiorDepartmentId
登录人员负责的各外部机构ID(包含子机构) org_currentUserIncludeChildManagerExternalSuperiorDepartmentId
登录人员所在外部单位名称 org_currentUserExternalDepartment
登录人员所在外部机构名称 org_currentUserExternalSuperiorDepartment
系统日期 date_systemDate
系统日期时间 date_dateTime_systemDateTime
系统时间 date_time_systemTime
本周初日期 date_firstDay4ThisWeek
本周末日期 date_lastDay4ThisWeek
本月初日期 date_firstDay4ThisMonth
本月末日期 date_lastDay4ThisMonth
本季度初日期 date_firstDay4ThisSeason
本季度末日期 date_lastDay4ThisSeason
本年初日期 date_firstDay4ThisYear
本年末日期 date_lastDay4ThisYear
上周初日期 date_firstDay4PreviousWeek
上周末日期 date_lastDay44PreviousWeek
上月初日期 date_firstDay4PreviousMonth
上月末日期 date_lastDay4PreviousMonth
上季度初日期 date_firstDay4PreviousSeason
上季度末日期 date_lastDay4PreviousSeason
上年初日期 date_firstDay4PreviousYear
上年末日期 date_lastDay4PreviousYear
下周初日期 date_firstDay4NextWeek
下周末日期 date_lastDay4NextWeek
下月初日期 date_firstDay4NextMonth
下月末日期 date_lastDay4NextMonth
下季度初日期 date_firstDay4NextSeason
下季度末日期 date_lastDay4NextSeason
下年初日期 date_firstDay4NextYear
下年末日期 date_lastDay4NextYear
明日 date_tomorrow
昨日 date_yesterday
本年 date_dec_thisYear
本季度初日期 date_firstDay4ThisSeason
本季度末日期 date_lastDay4ThisSeason
本月 date_dec_thisMonth
本日 date_dec_thisDay

results matching ""

    No results matching ""