Raporlama işleri için Reportviewer kontrolünü kullanıyorum. Ama bildiğiniz gibi bu kontrolün bir eksikliği, raporu direkt olarak yazdıramamanız. Bu sorunu aşmak için arkadaşlarımdan birisi ile bir yol bulduk. ReporServer' ın yazdırma işleri için kullandığı activex i kullanarak rapor sayfasından direkt olarak bir düğmeye basılarak yazdırılmasını sağlayabiliyoruz.
Zaten bilinen bir şey olduğu için bu yolu detaylı olarak anlatmayacağım. Bu işlemi yağtımız sayfa yaklaşık şöyle bir şey;
<html><head>
<object id="RSClientPrint" classid="CLSID:FA91DF8D-53AB-455D-AB20-F2F023E498D3" codebase="http://myAppUrl/RSClientPrint.cab" viewastext></object>
<script type="text/javascript">
function Print(reportid) {
RSClientPrint.Authenticate = false;RSClientPrint.Print('http://myAppUrl/ReporGenerator.aspx?Param=PuUfK1YXSlAWfq4MFTcM9w%3d%3d', 'reportId=' + reportid, 'Rapor'); }
</script></head><body>
<form name="aspnetForm" method="post" action="Rapor.html" id="aspnetForm"> .......
<input type="button" value="Bas" onclick="Print('f956661a-501e-402e-9849-551ca88ea72f');" />
................</form></body></html>
Burada en önemli eleman RsClientPrint ActiveX nesnesi.
Bir kaç gün önce kullanıcılarımızdan birisi rapor sayfasının çalışmadığı rapor etti. Raporu yazdırmak için düğmeye basıldığında, "nesne bu özelliği desteklemiyor" veya benzeri bir Javascript hatası veriyordu. Hatanın sebebi ActiveX nesnesiydi. Biraz araştırdıktan sonra KB956391 kodlu bir güncellemenin ActiveX' i bozduğunu anladım. http://www.technologystudio.net/blog/post/Microsoft-Update-KB956391-breaks-Reporting-Services-ReportViewer.aspx, adresindekiler de dahilolmak üzere bir kaç yol denedim. ActiveX' i kaldırıp tekrar kurdum, registry yi temizleyip tekrar kurdum vb. Tümünde de olumlu bir netice aldım sanırım ancak bu değişikliklerden sonra sistem tekrar güncellendiğinde sorun tekrar oluşuyordu. Bu ActiveX ve bu güncelleme arasında bir çakışma olduğu anlamına geliyordu. Güncellemeyi ilelebet erteleyemeceğime göre bu, ActiveX' in bundan sonra kullanılamayacaı anlamına geliyordu.
Her neyse, elimdeki ActiveX' in bu güncellemeyle uyumlu olan yeni sürümünü aramaya başladım. (Basit mantık; eski kullanılamıyorsa kullanılabilir yeni bir tane olmalıydı:) Microsoft "bundan sonra raporlarınızı yazdıramazsınız" diyemeyeceğine göre, bu soruna bir çözümler olmalıydı. Bu yüzden, Report Server 2005(SP1) de bu sorunu aşmış olmalı düşüncesiyle Report Server klasörünü aradım taradım ve ActiveX' in yeni versiyonunu; "C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin" dizininde buldum. Uygulamamı, aşağıda anlattığım adımlarla, yeni ActiveX' i kullanacak şekilde değiştirdiğimde hata kayboldu.
ÇÖZÜM:
- Eğer halen kuruluysa C:\WINDOWS\Downloaded Program Files\ dizininden eski ActiveX' i kaldırın. (Aslında bu adımı yapmak sorunda değilsiniz ama ne olur ne olmaz ...)
- Uygulamanızdaki eski RSClientPrint.cab dosyasını (codebase in işaret ettiği) yeni cab dosyası ile değiştirin (yeni cab dosyasını yukarıda bir yerlerde bahsettiğim gibi Report Server 2005 dizini altında bulabilirsiniz).
- Son olarak, nesnenin CLSID sini 41861299-EAB2-4DCC-986C-802AE12AC499 olarak değiştirin (eski clsid; FA91DF8D-53AB-455D-AB20-F2F023E498D3 idi)
Bütün bu değişikliklerden sonra rapor sayfanızı açtığınızda ActiveX yükleme penceresinin açılması lazım. Olur da açılmazsa hemen telaşlanmayın zira belki de başka bir uygulama tarafından daha önce kurulmuş olabilir. Bu yüzden yükleme penceresi açılmaz ise sadece raporu yazdırmayı deneyin :) Yazdırma ekranı geliyorsa işlem tamamdır. Eğer gelmiyorsa yukarıdaki aşamaları veya bahsetmeyi unutmuş olabileceğim bir şeyleri deneyin :). Bu işlemi başarıyla tamamladığınızda, kullanıcılarınız "RSClientPrint 2005 Class" isimli yeni ActiveX i kullanmaya başlayacak. Hepi topu bu :)
Problemi teşhis etmenizi kolaylaştırmak için eski ve yeni ActiveX nesnelerinin özelliklerini aşağıya yazıyorum.
| |
Eski ActiveX |
Yeni ActiveX |
| Dosya Adı |
RSClientPrint.cab |
RSClientPrint.cab |
| Sınıf Adı |
RSClientPrint Class |
RSClientPrint 2005 Class |
| CLSID |
{FA91DF8D-53AB-455D-AB20-F2F023E498D3} |
{41861299-EAB2-4DCC-986C-802AE12AC499} |
| Versiyonu |
2005.90.1399.0 |
2005,90,3073,0 |
| İçerdiği rsclientprint.dll 'in versiyonu |
2005.90.1399.0 |
2005,90,3073,0 |
| İçerdiği gdiplus.dll 'in versiyonu |
5.2.3790.1830 |
5.1.3102.3352 |
| |
|
|
!!! Lisans Anlaşması vb sebeplerle "RSClient 2005 Class" ActiveX ini yazıya eklemiyorum... Lisanslı bir Report Server' ınız varsa SP1 güncellemesini yaparak(henüz yapmadıysanız) yeni ActiveX i yasal olarak bilgisayarınızda bulup kullanabilirsiniz !!!