2016-04-14 4 views
0

У меня есть этот JSon DS:Каков правильный способ добавления json subDataSource в отчеты Jasper?

{ 
    "customername":"home", 
    "workSiteRows":[ 
     { 
     "invoiceRows":[ 
      { 
       "candidateName":"name1", 
       "units":"13:00" 
      }, 
      { 
       "candidateName":"name2", 
       "units":"18:30" 
      } 
     ], 
     "workSiteName":"wsname1" 
     }, 
     { 
     "invoiceRows":[ 
      { 
       "candidateName":"name1", 
       "units":"13:00" 
      }, 
      { 
       "candidateName":"name2", 
       "units":"18:30" 
      } 
     ], 
     "workSiteName":"wsname2" 
     } 
    ] 
} 

В моем файле .jrxml я определил подотчет, и я пытаюсь создать subDataSource, чтобы перейти к этому подотчету.

<subreport isUsingCache="false"> 
    <reportElement x="0" y="10" width="555" height="30" uuid="b2d96c34-ad5d-4eb2-b218-43aad4e09282" /> 
    <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).dataSource("workSiteRows")]]></dataSourceExpression> 
    <subreportExpression><![CDATA[$P{REPORT_DIR} + "\\invoice_ws_row.jasper"]]></subreportExpression> 
</subreport> 

я получаю следующее исключение: Ошибка заполнения печати ...

java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonNode java.lang.ClassNotFoundException: org.codehaus.jackson.JsonNode 

Я попытался с помощью ответа от вопроса http://community.jaspersoft.com/questions/956036/caused-javalangclassnotfoundexception-orgcodehausjacksonjsonnode-exception-ireport

Но это не работает. Проблема в том, что в настоящее время ядро ​​jackson находится под репо "com.fasterxml.jackson.core"

, в то время как iReport продолжает запрашивать "org.codehaus.jackson.core".

Пробовал искать старые версии ядра Jackson, которые находятся под org.codehaus, и добавить их в путь класса iReport, но он все еще не работает. Любые идеи?

ответ

1

Обычно вам не нужно выставлять выражение. Попытка: <![CDATA[$P{REPORT_DATA_SOURCE}.subDataSource("workSiteRows")]]>

Это прекрасно работает в моем случае. В вашем случае subDataSource представляет собой массив, возможно, вы также можете попробовать и использовать объект.

+0

Это работает. Благодарю. *** facepalm ***, кстати, вы когда-нибудь использовали другие альтернативы отчетам Jasper? – ionutab

+1

Добро пожаловать. Я знаю только Jasper Reports, его бесплатное и наилучшее доступное решение, но при использовании его все еще много моментов facepalm :) – hering

+0

Я использую JasperSoft Studio 6.2.1, и невозможно использовать метод 'subDataSource' без кастования 'net.sf.jasperreports.engine.data.JsonDataSource' –