Почему подотчет получает только одну строку из JsonDataSource при использовании subDataSource()?

У меня есть чистый отчет Jasper, который вызывает подотчет без фильтра. В этом подотчете я показываю все данные Json (10 строк), и если я вижу предварительный просмотр, он работает: предварительный просмотр подотчета.

Проблема в том, когда я вызываю подотчет из основного (и чистого) отчета. В нем подробно указаны только имя профессионала и подотчет. Он должен показывать professionalName и все вложенные отчеты (все 10 строк каждый раз), но это не так. Он показывает только текущую строку, и я уверен, что это потому, что основной отчет не предоставляет весь источник данных для подотчета, а только эту строку. Вот захват: Предварительный просмотр основного отчета.

Выражение источника данных:

<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 ответ

subDataSource Метод использует текущий узел при создании нового JsonDataSource пример. В будущей версии JasperReports эта проблема будет решена, но до тех пор вам необходимо:

  1. Удалить Data Source Expression из вашего подотчета. Сам подотчет будет использовать адаптер данных JSON.
  2. Экспортируйте свой адаптер данных JSON в файл. См. Шаг № 2 здесь, если вы еще не сделали этого в Jaspersoft Studio.
  3. В вашем подотчете установите отчет Default Data Adapter свойство, указывающее на сохраненный адаптер из предыдущего шага. Смотрите шаг № 4 отсюда.
  4. Перекомпилируйте свой подотчет, если вы заметили, что проект автоматически создается.
Другие вопросы по тегам