为什么子报表在使用 subDataSource() 时只能从 JsonDataSource 获取一行?
Why does subreport only get one row from a JsonDataSource when using subDataSource()?
我有一个干净的 Jasper 报表,它调用一个没有过滤器的子报表。
在该子报表中,我显示了所有 Json 数据(10 行),如果我看到预览,它会起作用:Subreport preview.
问题出在我从主(干净)报表调用子报表时。它只有 professionalName 和子报表的详细信息。它应该显示 professionalName 和所有子报表(每次都是 10 行),但事实并非如此。它只显示当前行,我确定这是因为主报表没有将所有数据源提供给子报表,只提供了该行。这是捕获:Main report preview.
数据源表达式是:
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource()]]></dataSourceExpression>
Json 文件是这个:
[ {
"appointmentId": 153,
"startDate": 1503061200000,
"patientId": 417,
"patientIdentification": {
"id": 1,
"name": "85471254B"
},
"episodeId": 500358,
"chn": "500058",
"patientName": "Aida Mascaró",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "NEUROLOGIA",
"benefitId": 45,
"benefitName": "CONSULTA",
"schedule": {
"id": 30,
"name": "Neurologia"
},
"professionalName": "a",
"insurance": {
"id": 1387,
"name": "PRIVADOS"
},
"collective": {
"id": 26,
"name": "Privados"
},
"typeId": 1,
"guarantorStatus": {
"id": 1,
"name": "Solicitada"
},
"reason": {
"id": 3,
"name": "Accidente de trabajo"
},
"appoState": {
"id": 3,
"name": "Atendiendo"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1503057809579
},
{
"appointmentId": 150,
"startDate": 1503039600000,
"patientId": 405,
"patientIdentification": {
"id": 1,
"name": "40295204D"
},
"episodeId": 500349,
"chn": "500046",
"patientName": "Cristina Mayo Saez",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "ENDOCRINOLOGIA",
"benefitId": 28,
"benefitName": "CONSULTA",
"schedule": {
"id": 26,
"name": "Nutrición"
},
"professionalName": "b",
"insurance": {
"id": 1387,
"name": "PRIVADOS"
},
"collective": {
"id": 26,
"name": "Privados"
},
"typeId": 1,
"guarantorStatus": {
"id": 1,
"name": "Solicitada"
},
"reason": {},
"appoState": {
"id": 3,
"name": "Atendiendo"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1503037036812
}, {
"appointmentId": 151,
"startDate": 1503039600000,
"patientId": 416,
"patientIdentification": {
"id": 1,
"name": "18466341D"
},
"episodeId": 500350,
"chn": "500057",
"patientName": "Gloria Sena Arrayán",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "NEUROLOGIA",
"benefitId": 45,
"benefitName": "CONSULTA",
"schedule": {
"id": 30,
"name": "Neurologia"
},
"professionalName": "b",
"insurance": {
"id": 1396,
"name": "AGRUPACION MUTUAL ASEGURADORA (AMA)"
},
"collective": {
"id": 30,
"name": "Trafico"
},
"typeId": 1,
"guarantorStatus": {
"id": 1,
"name": "Solicitada"
},
"reason": {},
"appoState": {
"id": 4,
"name": "Atendido"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1503038643436
}, {
"appointmentId": 154,
"startDate": 1503298800000,
"patientId": 389,
"patientIdentification": {
"id": 1,
"name": "23234567J"
},
"episodeId": 500359,
"chn": "500030",
"patientName": "maria perez perez",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "ENDOCRINOLOGIA",
"benefitId": 28,
"benefitName": "CONSULTA",
"schedule": {
"id": 26,
"name": "Nutrición"
},
"professionalName": "a",
"insurance": {
"id": 1387,
"name": "PRIVADOS"
},
"collective": {
"id": 26,
"name": "Privados"
},
"typeId": 1,
"guarantorStatus": {
"id": 1,
"name": "Solicitada"
},
"reason": {
"id": 2,
"name": "Accidente causal"
},
"appoState": {
"id": 3,
"name": "Atendiendo"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1503297627789
}, {
"appointmentId": 148,
"startDate": 1503300600000,
"patientId": 415,
"episodeId": 500346,
"chn": "500056",
"patientName": "Pastora Meseguer Carrión",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "NEUROLOGIA",
"benefitId": 45,
"benefitName": "CONSULTA",
"schedule": {
"id": 30,
"name": "Neurologia"
},
"professionalName": "a",
"insurance": {
"id": 1387,
"name": "PRIVADOS"
},
"collective": {
"id": 25,
"name": "Privados todos"
},
"typeId": 1,
"guarantorStatus": {
"id": 7,
"name": "No requerida"
},
"reason": {},
"appoState": {
"id": 4,
"name": "Atendido"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1502885871664
}, {
"appointmentId": 152,
"startDate": 1503302400000,
"patientId": 416,
"patientIdentification": {
"id": 1,
"name": "18466341D"
},
"episodeId": 500351,
"chn": "500057",
"patientName": "Gloria Sena Arrayán",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "NEUROLOGIA",
"benefitId": 46,
"benefitName": "REVISION",
"schedule": {
"id": 30,
"name": "Neurologia"
},
"professionalName": "a",
"insurance": {
"id": 1396,
"name": "AGRUPACION MUTUAL ASEGURADORA (AMA)"
},
"collective": {
"id": 30,
"name": "Trafico"
},
"typeId": 1,
"guarantorStatus": {
"id": 1,
"name": "Solicitada"
},
"reason": {},
"appoState": {
"id": 4,
"name": "Atendido"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1503038674027
},{
"appointmentId": 156,
"startDate": 1503302400000,
"patientId": 389,
"patientIdentification": {
"id": 1,
"name": "23234567J"
},
"episodeId": 500361,
"chn": "500030",
"patientName": "maria perez perez",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "PEDIATRIA",
"benefitId": 3,
"benefitName": "CONSULTA",
"schedule": {
"id": 29,
"name": "Dra. De la Vega"
},
"professionalName": "a",
"insurance": {
"id": 1387,
"name": "PRIVADOS"
},
"collective": {
"id": 26,
"name": "Privados"
},
"typeId": 1,
"observations": "obs",
"guarantorStatus": {
"id": 1,
"name": "Solicitada"
},
"reason": {
"id": 2,
"name": "Accidente causal"
},
"appoState": {
"id": 3,
"name": "Atendiendo"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1503300374408
},{
"appointmentId": 142,
"startDate": 1503298800000,
"patientId": 412,
"episodeId": 500337,
"chn": "500053",
"patientName": "Mariano López Pastor",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "NEUROLOGIA",
"benefitId": 45,
"benefitName": "CONSULTA",
"schedule": {
"id": 30,
"name": "Neurologia"
},
"professionalName": "b",
"insurance": {
"id": 1387,
"name": "PRIVADOS"
},
"collective": {
"id": 25,
"name": "Privados todos"
},
"typeId": 1,
"guarantorStatus": {
"id": 7,
"name": "No requerida"
},
"reason": {},
"appoState": {
"id": 4,
"name": "Atendido"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1502877885393
}, {
"appointmentId": 158,
"startDate": 1503303300000,
"patientId": 408,
"patientIdentification": {
"id": 2,
"name": "123123"
},
"episodeId": 500363,
"chn": "500049",
"patientName": "ANA CARO MARTINEZ",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "PEDIATRIA",
"benefitId": 3,
"benefitName": "CONSULTA",
"schedule": {
"id": 29,
"name": "Dra. De la Vega"
},
"professionalName": "b",
"insurance": {
"id": 1749,
"name": "ADMIRAL INSURANCE"
},
"collective": {
"id": 13,
"name": "Trafico"
},
"typeId": 1,
"observations": "dewdfe",
"guarantorStatus": {
"id": 1,
"name": "Solicitada"
},
"reason": {
"id": 2,
"name": "Accidente causal"
},
"appoState": {
"id": 3,
"name": "Atendiendo"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1503301904789
}, {
"appointmentId": 159,
"startDate": 1503304200000,
"patientId": 48,
"patientIdentification": {
"id": 5,
"name": "1425871"
},
"episodeId": 500364,
"chn": "186",
"patientName": "cayetana jimenez brotons",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "PEDIATRIA",
"benefitId": 4,
"benefitName": "REVISION",
"schedule": {
"id": 29,
"name": "Dra. De la Vega"
},
"professionalName": "b",
"insurance": {
"id": 1390,
"name": "MAPFRE ESPAÑA, CIA. DE SEGUROS Y REASEGUROS S.A."
},
"collective": {
"id": 4,
"name": "MAPFRE SALUD"
},
"typeId": 1,
"observations": "dfd",
"guarantorStatus": {
"id": 7,
"name": "No requerida"
},
"reason": {
"id": 2,
"name": "Accidente causal"
},
"appoState": {
"id": 3,
"name": "Atendiendo"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1503301999486
}
]
如何为我显示的每一行传递整个数据集?谢谢
subDataSource
方法在创建新的JsonDataSource
实例时使用当前节点。 JasperReports 的未来版本将解决此问题,但在此之前,您需要:
- 从子报表中删除
Data Source Expression
。子报表本身将使用 JSON 数据适配器。
- 将您的 JSON 数据适配器导出到文件。如果您以前没有在 Jaspersoft Studio 中做过,请参阅 here 中的步骤 #2。
- 在您的子报表中,将报表的
Default Data Adapter
属性 设置为指向您在上一步中保存的适配器。请参阅 here. 中的步骤 #4
- 如果您注意到自动生成项目,请重新编译您的子报表。
我有一个干净的 Jasper 报表,它调用一个没有过滤器的子报表。 在该子报表中,我显示了所有 Json 数据(10 行),如果我看到预览,它会起作用:Subreport preview.
问题出在我从主(干净)报表调用子报表时。它只有 professionalName 和子报表的详细信息。它应该显示 professionalName 和所有子报表(每次都是 10 行),但事实并非如此。它只显示当前行,我确定这是因为主报表没有将所有数据源提供给子报表,只提供了该行。这是捕获:Main report preview.
数据源表达式是:
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource()]]></dataSourceExpression>
Json 文件是这个:
[ {
"appointmentId": 153,
"startDate": 1503061200000,
"patientId": 417,
"patientIdentification": {
"id": 1,
"name": "85471254B"
},
"episodeId": 500358,
"chn": "500058",
"patientName": "Aida Mascaró",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "NEUROLOGIA",
"benefitId": 45,
"benefitName": "CONSULTA",
"schedule": {
"id": 30,
"name": "Neurologia"
},
"professionalName": "a",
"insurance": {
"id": 1387,
"name": "PRIVADOS"
},
"collective": {
"id": 26,
"name": "Privados"
},
"typeId": 1,
"guarantorStatus": {
"id": 1,
"name": "Solicitada"
},
"reason": {
"id": 3,
"name": "Accidente de trabajo"
},
"appoState": {
"id": 3,
"name": "Atendiendo"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1503057809579
},
{
"appointmentId": 150,
"startDate": 1503039600000,
"patientId": 405,
"patientIdentification": {
"id": 1,
"name": "40295204D"
},
"episodeId": 500349,
"chn": "500046",
"patientName": "Cristina Mayo Saez",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "ENDOCRINOLOGIA",
"benefitId": 28,
"benefitName": "CONSULTA",
"schedule": {
"id": 26,
"name": "Nutrición"
},
"professionalName": "b",
"insurance": {
"id": 1387,
"name": "PRIVADOS"
},
"collective": {
"id": 26,
"name": "Privados"
},
"typeId": 1,
"guarantorStatus": {
"id": 1,
"name": "Solicitada"
},
"reason": {},
"appoState": {
"id": 3,
"name": "Atendiendo"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1503037036812
}, {
"appointmentId": 151,
"startDate": 1503039600000,
"patientId": 416,
"patientIdentification": {
"id": 1,
"name": "18466341D"
},
"episodeId": 500350,
"chn": "500057",
"patientName": "Gloria Sena Arrayán",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "NEUROLOGIA",
"benefitId": 45,
"benefitName": "CONSULTA",
"schedule": {
"id": 30,
"name": "Neurologia"
},
"professionalName": "b",
"insurance": {
"id": 1396,
"name": "AGRUPACION MUTUAL ASEGURADORA (AMA)"
},
"collective": {
"id": 30,
"name": "Trafico"
},
"typeId": 1,
"guarantorStatus": {
"id": 1,
"name": "Solicitada"
},
"reason": {},
"appoState": {
"id": 4,
"name": "Atendido"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1503038643436
}, {
"appointmentId": 154,
"startDate": 1503298800000,
"patientId": 389,
"patientIdentification": {
"id": 1,
"name": "23234567J"
},
"episodeId": 500359,
"chn": "500030",
"patientName": "maria perez perez",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "ENDOCRINOLOGIA",
"benefitId": 28,
"benefitName": "CONSULTA",
"schedule": {
"id": 26,
"name": "Nutrición"
},
"professionalName": "a",
"insurance": {
"id": 1387,
"name": "PRIVADOS"
},
"collective": {
"id": 26,
"name": "Privados"
},
"typeId": 1,
"guarantorStatus": {
"id": 1,
"name": "Solicitada"
},
"reason": {
"id": 2,
"name": "Accidente causal"
},
"appoState": {
"id": 3,
"name": "Atendiendo"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1503297627789
}, {
"appointmentId": 148,
"startDate": 1503300600000,
"patientId": 415,
"episodeId": 500346,
"chn": "500056",
"patientName": "Pastora Meseguer Carrión",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "NEUROLOGIA",
"benefitId": 45,
"benefitName": "CONSULTA",
"schedule": {
"id": 30,
"name": "Neurologia"
},
"professionalName": "a",
"insurance": {
"id": 1387,
"name": "PRIVADOS"
},
"collective": {
"id": 25,
"name": "Privados todos"
},
"typeId": 1,
"guarantorStatus": {
"id": 7,
"name": "No requerida"
},
"reason": {},
"appoState": {
"id": 4,
"name": "Atendido"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1502885871664
}, {
"appointmentId": 152,
"startDate": 1503302400000,
"patientId": 416,
"patientIdentification": {
"id": 1,
"name": "18466341D"
},
"episodeId": 500351,
"chn": "500057",
"patientName": "Gloria Sena Arrayán",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "NEUROLOGIA",
"benefitId": 46,
"benefitName": "REVISION",
"schedule": {
"id": 30,
"name": "Neurologia"
},
"professionalName": "a",
"insurance": {
"id": 1396,
"name": "AGRUPACION MUTUAL ASEGURADORA (AMA)"
},
"collective": {
"id": 30,
"name": "Trafico"
},
"typeId": 1,
"guarantorStatus": {
"id": 1,
"name": "Solicitada"
},
"reason": {},
"appoState": {
"id": 4,
"name": "Atendido"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1503038674027
},{
"appointmentId": 156,
"startDate": 1503302400000,
"patientId": 389,
"patientIdentification": {
"id": 1,
"name": "23234567J"
},
"episodeId": 500361,
"chn": "500030",
"patientName": "maria perez perez",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "PEDIATRIA",
"benefitId": 3,
"benefitName": "CONSULTA",
"schedule": {
"id": 29,
"name": "Dra. De la Vega"
},
"professionalName": "a",
"insurance": {
"id": 1387,
"name": "PRIVADOS"
},
"collective": {
"id": 26,
"name": "Privados"
},
"typeId": 1,
"observations": "obs",
"guarantorStatus": {
"id": 1,
"name": "Solicitada"
},
"reason": {
"id": 2,
"name": "Accidente causal"
},
"appoState": {
"id": 3,
"name": "Atendiendo"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1503300374408
},{
"appointmentId": 142,
"startDate": 1503298800000,
"patientId": 412,
"episodeId": 500337,
"chn": "500053",
"patientName": "Mariano López Pastor",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "NEUROLOGIA",
"benefitId": 45,
"benefitName": "CONSULTA",
"schedule": {
"id": 30,
"name": "Neurologia"
},
"professionalName": "b",
"insurance": {
"id": 1387,
"name": "PRIVADOS"
},
"collective": {
"id": 25,
"name": "Privados todos"
},
"typeId": 1,
"guarantorStatus": {
"id": 7,
"name": "No requerida"
},
"reason": {},
"appoState": {
"id": 4,
"name": "Atendido"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1502877885393
}, {
"appointmentId": 158,
"startDate": 1503303300000,
"patientId": 408,
"patientIdentification": {
"id": 2,
"name": "123123"
},
"episodeId": 500363,
"chn": "500049",
"patientName": "ANA CARO MARTINEZ",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "PEDIATRIA",
"benefitId": 3,
"benefitName": "CONSULTA",
"schedule": {
"id": 29,
"name": "Dra. De la Vega"
},
"professionalName": "b",
"insurance": {
"id": 1749,
"name": "ADMIRAL INSURANCE"
},
"collective": {
"id": 13,
"name": "Trafico"
},
"typeId": 1,
"observations": "dewdfe",
"guarantorStatus": {
"id": 1,
"name": "Solicitada"
},
"reason": {
"id": 2,
"name": "Accidente causal"
},
"appoState": {
"id": 3,
"name": "Atendiendo"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1503301904789
}, {
"appointmentId": 159,
"startDate": 1503304200000,
"patientId": 48,
"patientIdentification": {
"id": 5,
"name": "1425871"
},
"episodeId": 500364,
"chn": "186",
"patientName": "cayetana jimenez brotons",
"centerName": "HOSPITAL CLINICA BENIDORM",
"serviceName": "PEDIATRIA",
"benefitId": 4,
"benefitName": "REVISION",
"schedule": {
"id": 29,
"name": "Dra. De la Vega"
},
"professionalName": "b",
"insurance": {
"id": 1390,
"name": "MAPFRE ESPAÑA, CIA. DE SEGUROS Y REASEGUROS S.A."
},
"collective": {
"id": 4,
"name": "MAPFRE SALUD"
},
"typeId": 1,
"observations": "dfd",
"guarantorStatus": {
"id": 7,
"name": "No requerida"
},
"reason": {
"id": 2,
"name": "Accidente causal"
},
"appoState": {
"id": 3,
"name": "Atendiendo"
},
"appoType": {
"id": 1,
"name": "Simple"
},
"professionalCreationName": "Marisol Fernández Lleras",
"creationDate": 1503301999486
}
]
如何为我显示的每一行传递整个数据集?谢谢
subDataSource
方法在创建新的JsonDataSource
实例时使用当前节点。 JasperReports 的未来版本将解决此问题,但在此之前,您需要:
- 从子报表中删除
Data Source Expression
。子报表本身将使用 JSON 数据适配器。 - 将您的 JSON 数据适配器导出到文件。如果您以前没有在 Jaspersoft Studio 中做过,请参阅 here 中的步骤 #2。
- 在您的子报表中,将报表的
Default Data Adapter
属性 设置为指向您在上一步中保存的适配器。请参阅 here. 中的步骤 #4
- 如果您注意到自动生成项目,请重新编译您的子报表。