天天看點

Jasper report 用json資料源建立的子報表在主報表中不顯示

上篇寫到用json資料源建立的子報表在主報表中竟然不顯示,原因是需要在主報表中傳遞子報表的資料源。

先配置下Subreport 的 Data Source Expression屬性試一下:

 new net.sf.jasperreports.engine.JREmptyDataSource()

Jasper report 用json資料源建立的子報表在主報表中不顯示

OK,果然顯示出來了,資料是空的,因為我們就是給它配置的空資料源。

Jasper report 用json資料源建立的子報表在主報表中不顯示

說明就是資料源的問題,那我們再考慮怎麼把json的資料源傳遞過來就可以啦。

一個報表隻能綁定一個資料源,那我們就把子報表的json資料整合到主報表的json檔案中試試呗。

原來的3個json檔案:

detail.json

{
	"data":[
		{
			"topic":"我就是可愛的topic",
			"serialNo":"A98K-002-001",
			"isImport":"true",
			"isChecked":"false",
			"noReason":"之是以沒選中,是為了測試"
		}
	],
	success:true
}
           

test1.json

{
	"data":[
		{
			"field1":"我是field1-row1",
			"field2":"我是field2-row1",
			"field3":"我是field3-row1",
			"field4":"我是field4-row1",
			"field5":"我是field5-row1"
		},
		{
			"field1":"我是field1-row2",
			"field2":"我是field2-row2",
			"field3":"我是field3-row2",
			"field4":"我是field4-row2",
			"field5":"我是field5-row2"
		},
		{
			"field1":"我是field1-row3",
			"field2":"我是field2-row3",
			"field3":"我是field3-row3",
			"field4":"我是field4-row3",
			"field5":"我是field5-row3"
		}
	],
	success:true
}
           

test2.json

{
	"data":[
		{
			"name":"MISS李",
			"tel":"12345678",
			"email":"[email protected]"
		},
		{
			"name":"MISS張",
			"tel":"12345679",
			"email":"[email protected]"
		},
		{
			"name":"MISS王",
			"tel":"12345689",
			"email":"[email protected]"
		}
	],
	success:true
}
           

把主報表、子報表的資料源合并到一起,成為新的details.json檔案:

{
	"data":{
		"topic":"我就是可愛的topic",
		"serialNo":"A98K-002-001",
		"isImport":"true",
		"isChecked":"false",
		"noReason":"之是以沒選中,是為了測試",
		"test1":[
			{
				"field1":"我是field1-row1",
				"field2":"我是field2-row1",
				"field3":"我是field3-row1",
				"field4":"我是field4-row1",
				"field5":"我是field5-row1"
			},
			{
				"field1":"我是field1-row2",
				"field2":"我是field2-row2",
				"field3":"我是field3-row2",
				"field4":"我是field4-row2",
				"field5":"我是field5-row2"
			},
			{
				"field1":"我是field1-row3",
				"field2":"我是field2-row3",
				"field3":"我是field3-row3",
				"field4":"我是field4-row3",
				"field5":"我是field5-row3"
			}
		],
		"test2":[
			{
				"name":"MISS李",
				"tel":"12345678",
				"email":"[email protected]"
			},
			{
				"name":"MISS張",
				"tel":"12345679",
				"email":"[email protected]"
			},
			{
				"name":"MISS王",
				"tel":"12345689",
				"email":"[email protected]"
			}
		]
	}
}
           

資料整合完畢,開始修改報表。

1、建立新的Data Adapters——details

2、修改主報表的資料源

Jasper report 用json資料源建立的子報表在主報表中不顯示
Jasper report 用json資料源建立的子報表在主報表中不顯示

可以發現,主報表的fields中多了兩個test1、test2字段,這就是子報表的資料源。

Jasper report 用json資料源建立的子報表在主報表中不顯示

3、修改子報表的 Data Source Expression

Jasper report 用json資料源建立的子報表在主報表中不顯示
Jasper report 用json資料源建立的子報表在主報表中不顯示

子報表1:((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("test1")

子報表2:((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("test2")

修改完畢,預覽下效果:

Jasper report 用json資料源建立的子報表在主報表中不顯示

ok,這是我們想要的效果,目的達到了。

其實,對于這種不需要根據主報表的某些字段值去加載表格内容的,沒有必要使用子報表的方式。可以采用table表格實作,下一篇我們看下多個table怎麼實作吧~