powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / jasperReport с использованием xml и подотчета
9 сообщений из 9, страница 1 из 1
jasperReport с использованием xml и подотчета
    #37914109
pikehunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Строю отчет на основе данных представленных в виде xml файла.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
<?xml version="1.0" encoding="UTF-8"?>
<root>   
    <client>
        <addressbook> 
            <person> 
                <name>ETHAN</name> 
                <phone type="mobile">+1 (415) 111-1111</phone> 
                <phone type="home">+1 (415) 111-1112</phone> 
                <phone type="work">+1 (415) 111-1113</phone> 
                <phone type="fax">+1 (415) 111-1114</phone> 
            </person> 
            <person> 
                <name>CALEB</name> 
                <phone type="mobile">+1 (415) 222-2222</phone> 
                <phone type="home">+1 (415) 222-2223</phone> 
            </person> 
            <person> 
                <name>WILLIAM</name> 
                <phone type="work">+1 (415) 333-3333</phone> 
                <phone type="mobile">+1 (415) 333-3334</phone> 
            </person> 
        </addressbook>

    </client>
</root>


В основном отчете вытаскиваю персон, а в подотчете надо добыть контакты. По отдельности и отчет и подотчет отражаются отлично, а вот в кобинации подотчет данные не отражает.
Имя персоны передаю в подотчет как параметр успешно, а вот с datasource возникает проблема.
Отчет основной:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="null" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="d36cca6a-bfcb-43aa-9c27-b52814c61e45">
	<property name="ireport.zoom" value="1.0"/>
	<property name="ireport.x" value="0"/>
	<property name="ireport.y" value="0"/>
	<style name="Crosstab Data Text" hAlign="Center"/>
	<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
		<defaultValueExpression><![CDATA["C:\\Documents and Settings\\я\\Мои документы\\NetBeansProjects\\JavaFXApplication2\\src\\javafxapplication2\\"]]></defaultValueExpression>
	</parameter>
	<queryString language="xPath">
		<![CDATA[/root/client/addressbook/person]]>
	</queryString>
	<field name="name" class="java.lang.String">
		<fieldDescription><![CDATA[name]]></fieldDescription>
	</field>
	<variable name="variable1" class="java.lang.String" calculation="Sum">
		<variableExpression><![CDATA[$F{name}]]></variableExpression>
	</variable>
	<background>
		<band splitType="Stretch"/>
	</background>
	<title>
		<band height="221" splitType="Stretch">
			<textField isStretchWithOverflow="true" pattern="">
				<reportElement uuid="98a21be7-c050-4688-88bf-c6a4bbbdb98b" x="136" y="22" width="406" height="48"/>
				<textElement/>
				<textFieldExpression><![CDATA[$P{SUBREPORT_DIR}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement uuid="8d420d99-bf88-47f2-a3b6-a5484f7df10a" x="136" y="90" width="419" height="20"/>
				<textElement/>
				<textFieldExpression><![CDATA[""+$P{REPORT_DATA_SOURCE}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement uuid="475b2437-18b7-4a78-8a4b-3397d7db2675" x="136" y="130" width="419" height="20"/>
				<textElement/>
				<textFieldExpression><![CDATA[""+$P{JASPER_REPORT}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement uuid="7386cd54-d1fd-4ea0-a676-cf6357f4fa27" x="136" y="170" width="419" height="20"/>
				<textElement/>
				<textFieldExpression><![CDATA[""+$P{REPORT_SCRIPTLET}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement uuid="e4b09a10-3de5-4a22-9515-e3c1dfab1138" x="136" y="190" width="419" height="20"/>
				<textElement/>
				<textFieldExpression><![CDATA[""+$P{XML_DATA_DOCUMENT}]]></textFieldExpression>
			</textField>
			<staticText>
				<reportElement uuid="b36ad160-d29d-4329-8f84-fb98fe529eed" x="0" y="22" width="136" height="48"/>
				<textElement/>
				<text><![CDATA[SUBREPORT_DIR]]></text>
			</staticText>
			<staticText>
				<reportElement uuid="06681c86-2ae4-4c58-b5b4-66a407254b55" x="0" y="90" width="136" height="20"/>
				<textElement/>
				<text><![CDATA[REPORT_DATA_SOURCE]]></text>
			</staticText>
			<staticText>
				<reportElement uuid="e6d29eea-cfc0-427f-a693-e5541317172d" x="0" y="130" width="136" height="20"/>
				<textElement/>
				<text><![CDATA[JASPER_REPORT]]></text>
			</staticText>
			<staticText>
				<reportElement uuid="7a8e6ec6-2597-4555-a2f3-84df04a5f380" x="0" y="170" width="136" height="20"/>
				<textElement/>
				<text><![CDATA[REPORT_SCRIPTLET]]></text>
			</staticText>
			<staticText>
				<reportElement uuid="de796f97-9b5f-4b55-80a1-a74e39047820" x="0" y="190" width="136" height="20"/>
				<textElement/>
				<text><![CDATA[XML_DATA_DOCUMENT]]></text>
			</staticText>
			<staticText>
				<reportElement uuid="d8fb93ff-7736-4ddf-96b4-331c4cc1724c" x="0" y="108" width="136" height="22"/>
				<textElement/>
				<text><![CDATA[xmlinputstream]]></text>
			</staticText>
			<staticText>
				<reportElement uuid="ecf3e935-3f30-46e9-8188-280926a39e6f" x="0" y="150" width="136" height="20"/>
				<textElement/>
				<text><![CDATA[xmlfile]]></text>
			</staticText>
			<staticText>
				<reportElement uuid="c88a8f4b-9c3b-4dec-826f-5f64d6133514" x="0" y="70" width="136" height="20"/>
				<textElement/>
				<text><![CDATA[Static text]]></text>
			</staticText>
			<textField>
				<reportElement uuid="817c6d10-f7f0-4f83-b05a-b109f6bee3e1" x="136" y="110" width="269" height="20"/>
				<textElement/>
				<textFieldExpression><![CDATA[""+$P{XML_INPUT_STREAM}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement uuid="84d36ac2-563e-404f-b085-0eb2228c1922" x="136" y="150" width="269" height="20"/>
				<textElement/>
				<textFieldExpression><![CDATA[""+$P{XML_FILE}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement uuid="dea099c6-8427-4d6a-8289-e83c912e3e50" x="136" y="70" width="269" height="20"/>
				<textElement/>
				<textFieldExpression><![CDATA[$P{net.sf.jasperreports.xml.source}]]></textFieldExpression>
			</textField>
		</band>
	</title>
	<pageHeader>
		<band height="16" splitType="Stretch"/>
	</pageHeader>
	<columnHeader>
		<band height="32" splitType="Stretch">
			<staticText>
				<reportElement uuid="c92adb6e-000c-493e-8caa-652853ba3d4d" x="0" y="0" width="119" height="21"/>
				<textElement>
					<font size="16" isBold="true" isItalic="true"/>
				</textElement>
				<text><![CDATA[name]]></text>
			</staticText>
			<staticText>
				<reportElement uuid="59135814-29b4-470e-a1ab-6079dcd596e2" x="119" y="0" width="143" height="21"/>
				<textElement>
					<font size="16" isBold="true" isItalic="true"/>
				</textElement>
				<text><![CDATA[detail]]></text>
			</staticText>
		</band>
	</columnHeader>
	<detail>
		<band height="140" splitType="Stretch">
			<textField>
				<reportElement uuid="1cd80a8e-0433-460b-880d-314569d29763" x="0" y="0" width="119" height="20"/>
				<textElement/>
				<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
			</textField>
			<subreport>
				<reportElement uuid="53fcae45-4026-4a10-bdc6-139bdf84be68" x="0" y="20" width="555" height="120"/>
				<subreportParameter name="name">
					<subreportParameterExpression><![CDATA[$F{name}]]></subreportParameterExpression>
				</subreportParameter>
				<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("//root")]]></dataSourceExpression>
				<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "subReport1.jasper"]]></subreportExpression>
			</subreport>
		</band>
	</detail>
	<columnFooter>
		<band height="18" splitType="Stretch"/>
	</columnFooter>
	<pageFooter>
		<band height="15" splitType="Stretch"/>
	</pageFooter>
	<summary>
		<band height="13"/>
	</summary>
</jasperReport>



подотчет:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report name" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="d93924a6-3093-4c21-83c1-2f60a0f97807">
	<property name="ireport.zoom" value="1.0"/>
	<property name="ireport.x" value="0"/>
	<property name="ireport.y" value="0"/>
	<parameter name="name" class="java.lang.String">
		<defaultValueExpression><![CDATA["CALEB"]]></defaultValueExpression>
	</parameter>
	<queryString language="xPath">
		<![CDATA[/root/client/addressbook/person[./name/text()='$P{name}']/phone]]>
	</queryString>
	<field name="type" class="java.lang.String">
		<fieldDescription><![CDATA[@type]]></fieldDescription>
	</field>
	<field name="phone" class="java.lang.String">
		<fieldDescription><![CDATA[child::text()]]></fieldDescription>
	</field>
	<background>
		<band splitType="Stretch"/>
	</background>
	<title>
		<band height="22" splitType="Stretch">
			<staticText>
				<reportElement uuid="7ec0c2ec-19e7-41d3-89a7-dfad639209ec" mode="Opaque" x="0" y="0" width="355" height="22" backcolor="#CCFF00"/>
				<textElement verticalAlignment="Middle"/>
				<text><![CDATA[Subreport! Contact of person:]]></text>
			</staticText>
			<textField>
				<reportElement uuid="6b060ffe-9a72-4dd2-b3d6-0cdbb09282c9" x="442" y="2" width="100" height="20"/>
				<textElement/>
				<textFieldExpression><![CDATA[$P{name}]]></textFieldExpression>
			</textField>
			<staticText>
				<reportElement uuid="2876e193-b617-4f89-8ce5-bb70b83d05ea" x="355" y="2" width="87" height="20"/>
				<textElement/>
				<text><![CDATA[parameter name:]]></text>
			</staticText>
		</band>
	</title>
	<columnHeader>
		<band height="22">
			<staticText>
				<reportElement uuid="b460bcd8-df59-42dc-b206-239530398b2f" x="0" y="0" width="100" height="20"/>
				<textElement/>
				<text><![CDATA[type]]></text>
			</staticText>
			<staticText>
				<reportElement uuid="e77f26ae-f532-4409-8546-de676464e73e" x="100" y="0" width="194" height="20"/>
				<textElement/>
				<text><![CDATA[number]]></text>
			</staticText>
		</band>
	</columnHeader>
	<detail>
		<band height="22">
			<textField>
				<reportElement uuid="7618919d-2c9d-4352-baf6-2088283d3274" x="0" y="0" width="100" height="20"/>
				<textElement/>
				<textFieldExpression><![CDATA[$F{type}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement uuid="18a0ed0e-ad0a-4898-b64f-fc872f97eea4" x="100" y="0" width="194" height="20"/>
				<textElement/>
				<textFieldExpression><![CDATA[$F{phone}]]></textFieldExpression>
			</textField>
		</band>
	</detail>
</jasperReport>


Как же правильно сослаться на источник данных?
...
Рейтинг: 0 / 0
jasperReport с использованием xml и подотчета
    #37914275
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pikehunter,

наверное надо создать 2 источника с одинаковыми данными
...
Рейтинг: 0 / 0
jasperReport с использованием xml и подотчета
    #37914361
pikehunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если создать два источника данных в netbeans то непонятно как один из них подсунуть подотчету.
...
Рейтинг: 0 / 0
jasperReport с использованием xml и подотчета
    #37914800
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
jasperReport с использованием xml и подотчета
    #37914814
pikehunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sanBez,
Именно по тому рецепту и пробовал сделать. В той ветке последний пост мой...
...
Рейтинг: 0 / 0
jasperReport с использованием xml и подотчета
    #37914875
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pikehunter,
Да я заметил :) Ты же нашел всю инфу, осталось только ее применить.
А почему не поменял subDataSource("//root") на XPath запрос именно по потомкам как там указано?
Типа subDataSource("//phone")

Я так и не понял зачем в сабрепорте пытаешься заново поднять все от корня...
Мне кажется тебе надо прочитать этот топик более внимательно. Вроде там аналогичный случай и у применивших решение оно работает
...
Рейтинг: 0 / 0
jasperReport с использованием xml и подотчета
    #37914908
pikehunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это и удивляет, ситуация один в один.
Пробовал в параметрах подотчета указать
((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/root/client/addressbook/person")
а в запросе подотчета
//person[./name/text()='$P{name}']/phone
результат тот же - подотчет данные не показывает.
...
Рейтинг: 0 / 0
jasperReport с использованием xml и подотчета
    #37914956
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pikehunterЭто и удивляет, ситуация один в один.
Не совсем. В приведенных примерах там Enfant - потомки контекстного узла. По нему идет запрос //Enfant

У вас все phone уже в текущем узле. Если подгонять под тот вариант, то ваш xml должен выглядеть как

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<root>   
    <client>
        <addressbook> 
            <person> 
                <name>ETHAN</name> 
                <phones>
                     <phone type="mobile">+1 (415) 111-1111</phone> 
                     <phone type="home">+1 (415) 111-1112</phone> 
                     <phone type="work">+1 (415) 111-1113</phone> 
                     <phone type="fax">+1 (415) 111-1114</phone> 
               </phones>
               ....
    </client>
</root>



и тогда в subDataSource("//phones") - это потомки контекстного узла, а не как у вас от корня /root/.... - тут наверно ничего не вернет

В вашем случае либо менять структуру документа, либо использовать xPath выражение в subDataSource, с использованием точки (context node). Посмотрите xPath запросы по этому поводу,я с ним давно не работал, забыл половину :) Может и прокатит.

И кстати, вы заметили что они там никаких параметров в subreport не передают для фильтрации? Скорее всего потому что и не надо, работа в контексте текущего узла

P.S.
Доктор осматривает пациента:
- Хорощо... хорошо... хорошо...
- Что хорошо, доктор?
- Хорошо что не у меня :)

А я с завтрашнего дня в отпуске!!!!!!!!!!!! :) :D :)
...
Рейтинг: 0 / 0
jasperReport с использованием xml и подотчета
    #37914989
pikehunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sanBez,
Спасибо, все получилось, действительно вопрос решается работой "исключительно" во вложенных нодах без всякой фильтрации по параметрам.
Подняться из подотчета выше текущей ноды не получается и это накладывает определенные требования на структуру XML.
Вообще было бы неплохо иметь возможность отклонировать источник данных для подотчетов...

Счастливо отгулять отпуск!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / jasperReport с использованием xml и подотчета
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]