为什么子报表在使用subDataSource()时只从JsonDataSource获取一行?

时间:2017-11-17 13:56:08

标签: json jasper-reports subreport

我有一个干净的Jasper报告,它调用一个没有过滤器的子报告。 在该子报告中,我显示了所有Json数据(10行),如果我看到预览它可以工作:Subreport preview

问题是当我从main(和clean)报告调用子报表时。它只有详细的professionalName和子报告。它应该显示professionalName和所有subReport(每次都是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
    }
]

如何为我显示的每一行传递整个DataSet?谢谢

1 个答案:

答案 0 :(得分:1)

subDataSource方法在创建新JsonDataSource实例时使用当前节点。 JasperReports的未来版本将解决此问题,但在此之前,您需要:

  1. 从子报表中删除Data Source Expression。子报表本身将使用JSON数据适配器。
  2. 将您的JSON数据适配器导出到文件。如果您之前没有在Jaspersoft Studio中完成,请参阅here中的步骤#2。
  3. 在子报表中,将报表的Default Data Adapter属性设置为指向上一步中保存的适配器。请参阅here中的第4步。
  4. 如果您注意自动构建项目,请重新编译子报表。