Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / jasperReport с использованием xml и подотчета / 9 сообщений из 9, страница 1 из 1
13.08.2012, 11:13:10
    #37914109
pikehunter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperReport с использованием xml и подотчета
Строю отчет на основе данных представленных в виде 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
13.08.2012, 12:22:23
    #37914275
Лагман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperReport с использованием xml и подотчета
pikehunter,

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

Я так и не понял зачем в сабрепорте пытаешься заново поднять все от корня...
Мне кажется тебе надо прочитать этот топик более внимательно. Вроде там аналогичный случай и у применивших решение оно работает
...
Рейтинг: 0 / 0
13.08.2012, 17:20:37
    #37914908
pikehunter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperReport с использованием xml и подотчета
Это и удивляет, ситуация один в один.
Пробовал в параметрах подотчета указать
((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/root/client/addressbook/person")
а в запросе подотчета
//person[./name/text()='$P{name}']/phone
результат тот же - подотчет данные не показывает.
...
Рейтинг: 0 / 0
13.08.2012, 17:46:00
    #37914956
sanBez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperReport с использованием xml и подотчета
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
13.08.2012, 18:02:14
    #37914989
pikehunter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jasperReport с использованием xml и подотчета
sanBez,
Спасибо, все получилось, действительно вопрос решается работой "исключительно" во вложенных нодах без всякой фильтрации по параметрам.
Подняться из подотчета выше текущей ноды не получается и это накладывает определенные требования на структуру XML.
Вообще было бы неплохо иметь возможность отклонировать источник данных для подотчетов...

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


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