历史版本33 :开放平台插件 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 版本

报表服务器版本
开放平台BETA 插件版本
10.00.19
V1.3
11.0V1.3

1.2 应用场景

客户希望在自身的第三方业务系统中,通过访问应用,调用API的方式,实现帆软决策系统的管理效果,以及自定义的数据服务功能

1)IT部门,需要实现企业内各系统的互联互通。

2)软件公司,通过集成方式实现特有的行业产品。

3)终端企业,基于帆软接口服务,实现客制化需求。

1.3 功能简介

帆软提供「开放平台BETA」插件:

1)提供安全、灵活、规范、有效的web服务,方便开发人员快速构建应用,实现在自身的业务系统中,对帆软系统进行相应管理、开展数据服务。

2)提供统一的平台配置,实现客户端API的权限管理、安全认证管理。

3)提供日志管理功能,实现对于API、应用的请求、访问状态查看。

1.4 公共接口

1)官方接口

对于开放平台中内置了的接口,帆软提供相关 API 文档,方便用户进行理解和使用。

该 API 文档,仅作为官方示例,提供给具备自主产品集成能力的用户使用。技术支持不负责接口示例的维护和使用问题解答。

分类API文档
平台平台接口文档
FineReportFineReport接口文档
FineBIFineBI接口文档
2)定制接口

若内置的认证方式或API不足以满足业务需求,希望能够添加自定义开发认证方式或API。

帆软提供自定义开发示例,仅做参考。用户可参考相关逻辑自行开发,详情请参见:开放平台子插件示例

注:如需官方开发人员做相关定制开发,请联系销售经理进一步咨询。

2. 插件简介编辑

2.1 插件安装

FineReport11.0默认安装了「开放平台BETA」插件。FineReport10.0需自行安装该插件。

点击下载插件:开放平台BETA插件

设计器插件安装方法参照:设计器插件管理

服务器安装插件方法参照:服务器插件管理

注:在升级插件时,如果有使用同系列插件,需要在升级开放平台插件前,禁用同系列插件,或者升级后重启服务器!

同系列插件列表:开放平台-FineBI接口、开放平台-FR报表接口、开放平台-平台登录认证接口。

2.2 界面简介

插件安装成功后,管理员登录数据决策系统,点击「管理系统>开放平台」,即可进入功能界面,如下图所示:

3. 功能简介编辑

3.1 API管理

在「API管理」中,包含第三方系统与Finereport进行资料互动服务的所有配置。

1)分组管理

「API管理」界面左侧为分组。帆软已内置了多个分组,用户可根据需要自行增删分组。

对于内置的分组,使用者不可删除和编辑。

对于非内置的分组,使用者可进行编辑、删除等操作。被删除的分组内的API,会自动移动到默认分组中。

2)API管理

每个分组内存放着多个API。帆软已内置了常用的API,使用者也可自行新增API。

对于内置的API,使用者仅可进行编辑、复制、更换分组操作,不可删除和禁用。

对于非内置的API,使用者可进行编辑、复制、更换分组、删除和禁用等操作。

3.2 应用管理

1)新增应用

在「应用管理」中,使用者可以通过添加事件的方式,新建应用。

使用者点击「应用管理」,点击「增加」,设置相关内容,点击「确定」,即可新增应用。

自动生成的「应用ID」和「密钥」,可用于API的鉴权,作为第三方系统的访问凭证。

设置项
说明
应用ID自动生成,不可手动设置
应用名称应用的名称,必填
应用描述应用的描述,选填
密钥自动生成,不可手动设置
备选认证认证方式中预先设置好的几种方式,选填

2)应用管理

对于添加的应用,支持新增、编辑、复制、禁用、单个删除、批量删除等操作。编辑时可重置密钥。

3.3 认证方式

认证方式为对外服务提供相关的安全保障,开放平台有三种默认3种认证方式,也允许用户自己去进行扩展

3.3.1 内置的认证方式

开放平台内置了三种认证方式,仅允许用户编辑、复制,不支持删除和禁用,如下图所示:

认证方式
说明
国密SM2签名认证

利用国密SM2 椭圆算法进行加解密,使用标准椭圆参数

签名_sign_=sm2(clientId+secret+timestamp)

配置项priKey=密钥

timeout=超时时间(秒)

摘要签名认证

1)应用场景:

在不能用token认证的情况下,利用摘要演算法(比如 SM3/MD5/ SHA256),对应用ID、密钥以及时间戳进行签名后,通过签名和应用ID进行认证

推荐使用这种认证方式,安全性更高

2)功能简介:

签名= 摘要算法(应用ID+密钥+时间戳)+时间戳

示例背景:

  • client_id=203bc7b8db1d423fb55824150327ef98

  • secret=98ffd41b86db4868a6875f57e6974bbc

  • timestamp=1600166180321

  • 签名算法为MD5

  • 超时时间为300秒

示例签名 = MD5(client_id+secret+timestamp)+timestamp = EE6E14BCEC5724C3BC6FC08AFC5C2B111600166180321

AkSk直接认证

利用应用ID和密钥直接作为认证依据,直接呼叫服务。

出于安全考虑,不推荐使用这种认证方式。

在认证方式的编辑界面的配置信息中,不可编辑。

在请求头添加 client_id={应用ID} secret={密钥} 即可直接访问应用

3.3.2 自定义认证方式

使用者可新增认证方式,对于非内置的认证方式,支持编辑、禁用、单个删除、批量删除等操作。

在「认证方式」页面,点击「增加」按钮,设置相关配置项,点击「确定」,即可新增认证方式。如下图所示:

配置项
说明
基础

支持自定义「认证名称」、「认证描述」和「接口类」,方便使用者区分设置的认证方式

1)「认证名称」必填,不可为空

2)「认证描述」选填

3)「接口类」是需要实现的认证API的例项物件。同一个类,可以通过配置的改变来变成多种认证方式。

配置

在认证方式的编辑界面的配置信息中,需进行一些固定配置,例如摘要签名认证需要定义「摘要算法」和「有效期」

配置可以设置为加密项,这样加密后的信息在保存后,也无法从前端读取

默认参数自定义参数设置

3.4 权限管理

对于非公开API来说,调用都是需要做权限验证的,那么不同的场景不同的应用可调用的接口范围肯定是不一样的。

管理员可以在这个页面内进行权限分配。公开API则可以随意调用不受这里的约束。

注:目前不存在分组权限,也就是即便是把某个分组权限打开了,实质上也只是把当前分组下面的API的权限分配给了某个客户端。

       如果后续发生了API分组变更,或者该分组API新增,那么权限是不会发生变化的。

3.5 日志管理

在日志管理页面,管理员可以查看API的请求频率,也可以查看API请求的详细记录。

3.6 全局设置

在全局设置界面,管理员可设置「每秒查询率上限」和「最大流量」,点击「保存」生效。如下图所示:

4. 调用示例编辑

权限配置完毕后后,就可以调用API接口了。本章将提供多种调用示例Demo,帮助大家理解开放平台插件的使用。

4.1 SQL数据服务

这个Demo示例用来向我们展示,最简单的将SQL转换成数据服务向第三方提供使用的场景。

我们需要用到的接口实例是:[demo]Sql数据服务

包含两个配置项:

connection:SQL运行的数据源连接名称(比如FRDemo之类的)

sql:数据来源的SQL

这个接口主要用于一些基础的简单的数据服务的对外提供,完全不依赖于模板,只要会写SQL就可以了

比如如下的测试例子:

数据源连接 = FRDemo  SQL = SELECT * FROM `销量` where 地区 = '${地区}'

这个查询中我们使用到了一个参数 地区

调用一下看看【两种传参的方式

4.2 模板数据集数据服务

这个Demo示例用来向我们展示,对于我们已经做好的模板内的数据集数据如何向第三方进行提供。

我们需要用到的接口实例是:报表数据集服务

包含两个配置项:

report:数据集的来源(相对于reportlets)

dsName:数据集的名称

这个接口主要用于一些模板里面已经做好了的数据集第三方需要使用对应数据的,或者数据的来源不是SQL的数据集数据,或者其他不适合直接向第三方开发源数据连接的数据服务。

比如如下的测试例子:

模板路径 = GettingStarter.cpt    数据集名称 = ds1

这个查询中我们使用到了一个参数 地区

调用一下看看【两种传参的方式

25.png

4.3 填报接口调用

填报接口这个demo主要用于展示,当我们希望向第三方提供 数据录入/审批 这类业务服务的时候我们如何借助模板来简单的实现。

首先它需要用到我们开发好的接口实例:com.tptj.plugin.hg.client.center.api.data.WriteReport

配置上支持两个配置项

report : 某个填报模板的路径(相对于reportlets目录)

sheet:【可选】需要执行的具体某个sheet名称对应sheet的模板填报属性内的填报业务。【如果不填这个参数,就会执行所有sheet的模板填报属性内的填报业务】。

注1:该填报不会触发JS相关事件!

注2:这里我们用到了body这个参数,这个参数可以直接通过URL传,也可以通过请求的body传(仅限通过调用接口服务的情况下)

如果http请求的body是一个json,那么在计算的报表内有两种引用

1.直接通过 $body 或者${body} 这个参数名获取到整个json字符串

2.如果如果是{ key1:xxxx,key2:ffffff,...,keyN:fsss }这种结构的body,还可以直接通过$key1,$key2,....$keyN在报表中使用这些参数

4.4 简单报表行列式数据服务

这个demo示例用来向我们展示,对于一些无法用单个数据集简单取出的数据,可以通过制作成简单的报表的形式输出数据服务。

我们需要用到的接口实例是:com.tptj.plugin.hg.client.center.api.data.GetListByReport

包含两个配置项:

report:数据来源的报表路径(相对于reportlets)

tag:数据来源的sheet名

这个接口主要用于一些模板里面已经做好了的数据集第三方需要使用对应数据的,或者数据的来源不是SQL的数据集数据,或者其他不适合直接向第三方开发源数据连接的数据服务。

比如如下的测试例子:

模板路径 = WorkBook12.cpt    sheet名 =sheet1

这个查询中我们使用到了一个参数 地区

6.png

通过两个数据集关联实现


我们定义的demo接口配置详情如下


实际测试效果如下【两种传参方式

9.png

特别说明:这并不是一个真正通用的接口实现,如果要使用这个接口实例,制作的模板必须满足以下的限制

只支持纯数据表格

目前简单的把一个sheet分成了以下几种情况

数据行:从上往下,逐行从左往右查看,找到的第一个有 “向下扩展”单元格的且该单元格所在行未隐藏的行作为数据的起始行。往下所有的内容都被简单认为是要输出的数据区域(所以限制了我们一个sheet内只能有一个数据区域)

标题行:数据行之前的所有行中,如果该行只有一个格子有值,且该行未隐藏,则该行被作为标题行。可以有多个标题行,输出顺序按行序号排序(明细数据中不输出标题)

列表头行:数据行之前的所有行中,如果该行有超过一个格子有值,且该行未隐藏,则该行被作为列表头行。可以有多层列表头,但是目前每列的列表头只取最接近数据行的列表头单元格的值作为该列的列表头。

空行:所有行高等于0,或者一整行都没有数据的行。空行不会输出

空列:列宽等于0,或者该列的列表头的值是空的。空列不会输出

合并行的数据会按最合并小行粒度输出。

注:不要使用复杂或大数据量模板

4.5 简单报表分组式数据服务

这个demo示例用来向我们展示,对于一些无法用单个数据集简单取出的数据,可以通过制作成简单的报表的形式输出数据服务。

我们需要用到的接口实例是:报表分组式数据服务

包含两个配置项:

report:数据来源的报表路径(相对于reportlets)

tag:数据来源的sheet名

比如如下的测试例子:

模板路径 = WorkBook12.cpt    sheet名 =sheet1

这个查询中我们使用到了一个参数 地区


通过两个数据集关联实现


我们定义的demo接口配置详情如下

12.png

实际测试效果如下【两种传参方式

特别说明:这并不是一个真正通用的接口实现,如果要使用这个接口实例,制作的模板必须满足一定的限制,限制跟简单报表行列式数据服务相同

注:不要使用复杂或大数据量模板