最近项目中需要使用Ureport2单选列表的功能,并且要求单选列表的选择项由外部其他视图或者数据源导入,于是新建视图,创建单选列表选择框,如下图所示。

ruoyi多数据源配置mongodb_字段

ruoyi多数据源配置mongodb_数据源_02

但是进行数据预览时却抛出如下异常:

ruoyi多数据源配置mongodb_单选_03

通过异常可以大概看出原因是无法读取我定义的单选列表数据源视图。

于是先将报表进行保存,然后查看保存的xml文件

ruoyi多数据源配置mongodb_ruoyi多数据源配置mongodb_04

此时发现<datasource></datasource>标签里并不存在我创建的选择视图的相关信息。

ruoyi多数据源配置mongodb_字段_05

倒是下面的 <search-form> </search-form>标签里有dataset字段有我创建视图的名字,猜想是这边引用了指定dataset数据源视图,但是由于表格里面没有使用该数据源相关字段信息,所以导致<datasource></datasource>标签里面没有对应数据源视图,所以无法访问,抛出异常。

 

说明:

         从上面的分析可以看出,只有表格列引用的数据源才会在<datasource></datasource>字段里面出现。筛选框选择的数据源不会再<datasource></datasource>便签里面出现。对于没有在<datasource></datasource>字段里面出现的数据源Ureport2会任务数据源不存在。

 

解决方案:

在不修改代码的前提下,我这里提供了一种我想到的解决方案,如果有更好的方案,欢迎进行评论说明。

既然筛选框的数据源不会在<datasource></datasource>字段里面出现,那么我们就在表格列里引用对应的数据源即可。但是由于又不希望改变原有的报表结构,所以我们选择一个空白表格,引用该数据源视图,然后利用过滤条件,让该数据源无值展现即可。

 

示例如下:

ruoyi多数据源配置mongodb_单选_06

任选一个空格格子,引用该数据源视图的任意一个字段。

ruoyi多数据源配置mongodb_单选_07

点击过滤条件,定义一个无值的条件(上述例子中系统没有FNAME为0的记录)。

ruoyi多数据源配置mongodb_数据源_08

此时会发现不再报错,并且选择框列有对应的筛选项,并且原来的空格格子仍然还是空白格子,满足报表要求。