|
Bu bölümde JasperProcess elemanının kullanılışı uygulamalı olarak anlatılacak. Ayrıca adımlar arasında JasperProcess raporlamaları hakkında bilgiler verilecek.
Uygulamalı Adımlar:
SuperStore veri tabanının product_categories tablosunda yer alan ürün kategorilerini raporlamak istiyoruz.
JasperProcess elemanı, diğer işlem elemanları gibi işlem formu (ProcessForm) veya işlem bloğu (ProcessBlock) elemanları içine yerleştirilerek kullanılabilir. Bir raporlama yapılacaksa herşeyden önce rapor dosyamızı hazırlamamız gerekir. JasperProcess'in ihtiyaç duyduğu rapor dosyaları *.jrxml uzantılıdır ve jrxml dosyalarının xml yapısı "jasperreport.dtd"de tanımlı olup ve bu DTD'ye (Document Type Definition) göre oluşturulmalıdır.
JasperProcess elemanını kullanmaya geçmeden önce rapor dosyamızı oluşturalım.
| 1. | Aşağıdaki xml içeriği kopyalayıp bir metin editörüne (Ör: mmed veya Notepad) yapıştırın. |
<?xml version="1.0"?>
<!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport name="kategori">
<parameter name="BASLIK" class="java.lang.String"/>
<field name="NAME" class="java.lang.String"/>
<title>
<band height="90">
<textField>
<reportElement x="0" y="10" width="535" height="80" forecolor="#FF0033"/>
<textElement textAlignment="Center">
<font size="32"/>
</textElement>
<textFieldExpression class="java.lang.String">
<![CDATA[$P{BASLIK}]]>
</textFieldExpression>
</textField>
</band>
</title>
<detail>
<band height="40">
<textField>
<reportElement x="0" y="0" width="535" height="40"/>
<textElement textAlignment="Left">
<font size="24"/>
</textElement>
<textFieldExpression class="java.lang.String">
<![CDATA[$F{NAME}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
|
BASLIK : Raporun sayfa başlığı. Parametre olarak tanımlanmıştır. [parameter] $P{BASLIK}
NAME : SQL sorgusundan dönen NAME değerlerini listelemek içindidr. Alan olarak tanımlanmıştır. [field] $F{NAME}
| 2. | Yapıştırma işleminden sonra dosyayı kategori.jrxml olarak herhangi bir yere keydedin. Kaydedilen yeri akılda tutmakta fayda var çünkü daha sonra projeye dahil edilecektir. Bkz. Adım 4 |
Yukarıdaki xml içeriği JasperProcess için gerekli olan raporumuz olup sadece BASLIK adında parametrik bir metin alanı ve tekrar eden NAME isimli bir alandan ibarettir. (Kırmızı renkle belirtilmiştir). NAME isimli metin elemanı, sql sorgusu ile veri tabanından dönecek NAME değerlerinin değerlerini raporda göstermek içindir. Dikkat ederseniz detail düğümünün içerisindedir. JasperReport rapor dosyalarında tekrar eden yapı detail düğümlerinin içinde konumlandırılır.
| 3. | Proje kaşifinde Site1 seçili iken sağ tıklayıp açılan bağlamsal menüden "Yeni Dizin"i seçin. Açılan "Yeni Dizin" penceresinden "Sunucu dosya tipleri"ni işaretleyip listeden de "JasperReports Dosyaları" nı seçin ve [Tamam] düğmesine tıklayın.
|

Proje kaşifinde "JasperReports Dosyaları" oluşacaktır.
| 4. | Proje kaşifinden "JasperReports Dosyaları" üzerinde sağ tıklayıp menüden "Dosya Dahil Et"i seçin. Açılan pencerede [Dosya Getir...] düğmesine tıklayın ve dosya diyaloğu üzerinden daha önce kaydedilmiş olan rapor dosyasını (kategori.jrxml) bularak seçin. Seçilen kategori.jrxml dosyası "Dosya dahil et" penceresinde belirecektir; Dosyayı işaretleyerek "Tamam"a tıklayın. |

kategori.jrxml dosyası proje kaşifinde, "JasperReports Dosyaları" dizini altında belirecektir.
Rapor dosyası projeye dahil edilmiş oldu. Şimdi bu dosyayı çalıştıracak olan JasperProcess elemanının kullanımına geçelim.
| 5. | Sistem Kütüphanesinden "zpro > ProcessForm" elemanını sayfaya yerleştirin. |
| 6. | Rapor başlığını sayfadan dinamik olarak alabilmek için İşlem Formu içine bir Yazı Kutusu elemanı ekleyin ve adını "RAPOR_BASLIK" olarak belirleyin. |
| 7. | Eğer henüz projenizde bir veri tabanı bağlantısı tanımlanmamış ise, "mor > RelDB > RelDBConnection" elemanı ile bir veri tabanı bağlantısı kurun. Elemanın (dolayısıyla bağlantının) adının "SuperStore" olduğu varsayılacaktır. |
| 8. | Şimdi, raporu üretecek işlemi tanımlamak üzere "mor > Reporter > JasperProcess" elemanını işlem formunun içine yerleştirin ve özelliklerini aşağıdaki gibi belirleyin. |

Bu adımda kategori.jxml dosyası JasperProcess işlemi ile yorumlanacak ve kategoriPDF isimli bir PDF dökümanı oluşturulup değişken havuzuna atanacaktır.
| 9. | Değişken havuzunda kategoriPDF ismiyle saklı tuttuğumuz Pdf dökümanını tarayıcıya göndermek için "mor > Reporter > FileToBrowserProcess" elemanını işlem formunun içine yerleştirin ve özelliklerini aşağıdaki gibi belirleyin.

|
| 10. | Adı "KategoriRaporla" ve "PdfDokumaniniTarayiciyaGonder" olarak belirlenmiş olan işlemleri harekete geçirecek olan "zpro > ProcessForm > ExcecuteCommand" işlem komutunu form içine yerleştirin ve özelliklerini aşağıdaki gibi belirleyin. |
Ad
|
RaporAl
|
Değer
|
Rapor Al
|
İşlem Listesi
|
<callProcess name="KategoriRaporla" if="_maxlcc = 0"/>
<callProcess name="PdfDokumaniniTarayiciyaGonder" if="_maxlcc = 0"/>
|
Sonraki Sayfa
|
%vof(PAGE_NAME)
|
Bu adımdan sonra, sayfa tasarım alanındaki görüntü aşağıdakine benzer olmalıdır.

| 10. | Artık projeyi derleyip sayfayı test edebilirsiniz. Sayfada yazı kutusuna gireceğiniz değer, pdf dökümanının başlığı; veri tabanındaki kategoriler ise pdf dökümanının içeriği olacaktır. Sonuç olarak tarayıcı içinde aşağıdaki gibi bir pdf dökümanı görüntülüyor olmanız gerekir. Aşağıdaki örnekte "Bütün Kategoriler" başlığı yazı kutusuna girilen değerdir.
|

"KategoriRaporla" isimli JasperProcess elemanının "Çıktı Türü" özelliğini değiştirerek diğer döküman türlerini test ediniz. JasperProcess'deki "Çıktı Türü" ile FileToBrowserProcess'deki "İçerik Tipi" aynı olmalıdır.
Önemli Not: Örneğimizde raporu oluştururken metin editörü kullandık. Fakat bu rapor ve çok daha gelişkin raporlar iReport isimli rapor tasarım aracıyla düzenlenebilir. iReport aracıyla tasarladığınız raporu 3. ve 4. adımları tekrarlayarak MoreMotion Application Studio projelerine dahil edebilirsiniz. Raporunuzu iReport ile tasarlarken rapor sorgularınızı statik olarak girererek test edebilir ve sorguyu silmeden raporu kaydedebilirsiniz. Çünkü, JasperProcess işlemi "Rapor Sorgusu (SQL)" özelliğinde belirlenen sorguyu dikkate alacak ve rapor dosyasının içinde bulunan sorgu devre dışı kalacaktır.
Tavsiye: kategori.jrxml dosyasını iReport rapor tasarım aracı ile açarak; veri tabanındaki ID alanını da rapora dahil etmeyi deneyiniz. Bir hatırlatma: "KategoriRaporla" isimli JasperProcess elemanındaki "Rapor Sorgusu (SQL)" özelliği değiştirilmeli ve product_categories tablosundaki ID alanı da rapora dahil edilmelidir. "SELECT ID,NAME FROM product_categories"
|