3.安装配置
jzreport是一个非帆软的报表应用,根据业务系统的需求,可能有如下配置.以下设置所需的信息由业务系统提供或指定;
3.1报表应用访问权限配置
金智报表是基于emap的应用,使用了emap的“权限配置”方法来对应用的权限进行了管理,即在金智报表中,只有admin级别的用户才能够访问到报表列表页面,可以在emap.properties文件中配置哪些用户为admin用户;如果要实现非admin用户也可实现访问金智报表,则需要修改金智报表应用下的config文件夹下的permission.xml文件,将金智报表应用中需要检查权限的访问路径配置去掉即可。上述的配置示意如下:
上图为应用中config文件夹下的permission.xml文件默认的配置,即金智报表应用是需要admin用户才能访问的;如果不需要检查用户权限,可将上图中的红色框中的删掉即可。
上图中红色框为将user1和user2用户配置为admin用户的示例。
现场和其他人员可以根据自己的实际需要来修改相应配置文件。
3.2报表访问权限配置
3.2.1设置说明
jzreport报表应用是为各个业务系统来服务的,各业务系统想要实现不同的用户对不同的报表文件的权限控制必须是使用jzreport的配置。
实现jzreport中的com.wisedu.emap.report.ReportPermissionManager2
要使用jzreport报表应用的每个业务系统(app)都应该实现此接口。此接口类有2个方法,通过报表应用api上传的报表实现getPermission()方法,直接访问CPT文件的报表通过getPermissionByReportlet()方法来实现权限的控制。
ROOT目录下的fr_app_mapping.properties文件(可选)
对于jzreport来说,此属性文件是可选的,没有的话对报表访问权限的控制完全依赖于报表所用模型所在的应用,该应用必须实现ReportPermissionManager2接口。如果还没有实现的话,请使用以下参数来配置:
no_app_permission
设置,值为true或false,意义为如果针对一个报表找不到一个app来获取ReportPermissionManager对象,那么认为是有还是没有权限;no_manage_bean_permission
设置,值为true或false,意义为如果从一个app无法获取ReportPermissionManager2对象,那么认为是有还是没有权限;
3.3报表配置画面访问权限
jzreport报表列表画面和配置画面设置了访问权限的,只能是EMAP环境的admin账号才能访问和配置画面,请注意配置和使用EMAP的admin账号;非admin账号如果要正常访问报表列表画面和配置画面的话需要在emap.properties文件中将要用户配置到admin用户列表中。例如user1和user2用户需要能正常访问报表的话需要增加如下配置:
3.4支持多应用下的报表配置
3.4.1指定应用
在业务系统的环境中,一般都有多个emap应用,使用自定义报表模块时,每次只能为某一个应用下的模型配置报表。请访问访问
【服务器地址】/emap/sys/jzreport/config/index.do?appname=【您的emap应用名称】,来指定应用。
3.4.2设置默认应用
在ROOT目录下,在emap.properties文件,可以指定缺省的应用(APP)名称,示例如下:
这样可以直接访问【服务器地址】/emap/sys/jzreport/config/index.do,无需应用名称参数。
3.5支持业务模型(基于自定义查询动作)
像数据模型一样,自定义报表模块可以基于自定义查询动作来支持业务模型的报表配置。当前应用下的所有自定义查询动作的名称
会和数据模型一起显示在模型列表中供用户选择;同时和数据模型一样,也会有基于动作的model的字段列表。因为需要在报表展示画面支持动态的数据过滤,所以对可以制作报表的自定义查询动作有以下约定:
必须有一个动态条件,作为用于报表的数据过滤条件;
这个动态条件的位置必须是1;
sql模板中有#sub[where $],类似select #auto[select] from T #sub[where $]。
不能有固定条件。
3.6模型白名单列表
3.6.1 说明
只有在白名单中的模型才会出现在设置界面的选择模型的列表中。本功能不提供界面,为程序后台功能。白名单功能需要修改jzreport目录下的whitelist.json来实现。
白名单包含模型名和类型标志,通过类型标志可以通过java api获取不同类型下的报表配置列表。
像数据模型一样,也可以在白名单中设置自定义查询动作名称,同样的也支持类型标志;
如果没有设置白名单,则认为是不需要过滤,所有的模型都会显示。这个判断对于数据模型和自定义查询动作是分开的。也就是说,如果只设定了数据模型白名单没有任何自定义查询动作,则数据模型只是显示白名单规定内容而自定义查询动作则全部显示。
如果在不同应用下的数据模型/自定义查询动作的名称有冲突,可以在白名单中通过设置应用名称属性来指定只在那个应用下的模型可以制作报表。
数据模型/自定义查询动作列表的顺序,如果白名单中没有指定,则是先数据模型后自定义查询动作,两种类型各自的顺序和emap保持一致;如果白名单中指定则以白名单中的顺序为准。
3.6.2 格式说明
- 数据模型
[
{
"modelname": "XXXXX", //必填,为emap的数据模型名称
"type": "xxx", //可选,用于根据类型获取报表配置信息;
"appname": "xx" //可选,用于解决不同app下的名称冲突,一般不填写;
}
]
- 自定义查询动作
[
{
"actionname": "XXXXX", //必填,为emap的自定义查询动作名称
"type": "xxx", //可选,用于根据类型获取报表配置信息;
"appname": "xx" //可选,用于解决不同app下的名称冲突,一般不填写;
}
]
3.6.3 示例
- 默认显示全部数据模型和自定义查询动作
[]
- 只对数据模型设置白名单,显示全部自定义查询动作
[
{
"modelname": "A"
},
{
"modelname": "B"
}
]
数据模型中只有A和B可以制作报表,而全部自定义查询动作都可以制作报表
- 只对自定义查询动作设置白名单,显示全部数据模型
[
{
"actionname": "A"
},
{
"actionname": "B"
}
]
自定义查询动作中只有A和B可以制作报表,而全部数据模型都可以制作报表
- 不同应用下有名称冲突的模型,一个需要显示另一个要过滤掉
[
{
"actionname": "A",
"appname": "app1"
},
{
"actionname": "B",
"appname": "app2"
}
]
app1和app2下都有一个名称为A的自定义动作;app2下还有自定义动作B;上面的设置app1下的A可以制作报表,app2下只有B可以制作报表,A被过滤掉。
3.7支持oracle数据库配置
特殊说明,为什么要用oracle数据库替换H2数据库
异常现象:
报表展示画面,偶尔会出现异常页面,刷新后一般会显示正常!
解决方案:
H2数据库并发被锁导致,本身无很好解决办法,如改为server模式,会导致性能下降,目前方案为更改数据库为oracle,会在配置项中增加数据库连接配置,若设置,则使用配置的数据库连接,否则,使用默认的H2数据库。
配置说明:
- 在ROOT下的emap.properties文件中添加oracle数据库连接信息,如下图:
其中jzreport.ds.driver不需要改变,其他三项根据实际的数据库连接信息填写即可(请填写业务系统的数据库连接信息)。
- 使用oracle数据库后,开发配置的报表只能使用导出然后在现场导入。