Makale Özeti

SQL Reporting Service kullanarak XSLT ve XML dökümanları sayesinde MSWord e geçirmenin alternatif yolu

Makale

SQL Reporting Service kullanarak XSLT ve XML dökümanları sayesinde MSWord e geçirmenin alternatif yolu

 

 

 

SQL Reporting Service MSWord’ e rapor aktarmayı henüz desteklememektedir. Ancak Uzantılı/Gelişmiş uygulamalarla MSWord’ e aktarma öyle kolay değildir. Bu makalemde data yı MSWord’ te doc halinde elde edeceğiz. Temelde bazı istemci/son kullanıcılar genellikle anlık(adhoc) raporlar ve bazı zamanlarda basit rapor şablonları hazırlamaktadırlar. MSWord, çok kullanılan ve genel kullanıcılar tarafından çok tercih edilmektedir. Bu makale ile XML(Reporting Servisten aktararaktan) dosyasını MSWord e aktarmayı anlatıyor olacağım. Aslında bunu yapmak için birçok alanda bu konuda rekabet çoğaldı dersek doğru demiş oluruz.

 

Aşağıda madde ve cümleler dahilinde tek tek  anlatıyor olacağım.

 

Öncelikle SQL Reporting Servis' imizin, XML' imizin ve XSD’ nin var olduğunu düşünüyorum.

Basit adımlarla XML i MSWord dosyasına çevirmek :

 

1.      SQL Reporting Servis’ ten aktaracağımız raporu hazırlıyoruz.

2.      XSD ‘ i dizayn ediyoruz.

3.      XSD ile MSWord’ ün eşleştirilmesini yapıyoruz.

4.      XSLT  dosyasını oluşturuyoruz.

5.      İstemiş olduğumuz MSWord dökümanına ulaşmak için XML üzerindeki XSLT i onaylıyoruz.

 

 


Şekil 1: Basit adımlarla XML i MSWord dosyasına çevirme.

 

      SQL Rapor Görüntüleme(SQL Report Viewer) ekranı Visual Studio içinde gelmektedir ve Visual Studio raporu XML e aktarma özelliğine sahiptir. Dataların şeması olan XSD MSWord şablonlarının eşleştirilmesine ihtiyaç duymaktadır. Eşleştirilen Word dosyası bazı statik data ya da boş data içermektedir. Eğer rapor datalarının şeması aynı kalıyor ise, bu eşleştirilen dosya halen word şablon versiyonunu sürdürebilmesi olası bir durumdur. Bazı zamanlarda MSWord dosya klasörünü modifiye ettiğimizde/düzenledikten sonra XSLT dosyasını düzenlemek zorundayız. XSLT üzerinde aynı XML taşıyanı uygulamak çoklu MSWORD dosyayı meydana getirecektir. Böylece XSLT programlanabilir ya da manuel olarak uygulanması mümkün olabilmektedir.

 

Datayı XML’ e atmadan önce Rapor’ u hazırlamın yolu :

 

      SQL Reporting Servis’ te bazı elemanların veri çıkışları otomatik olarak atanmış olabilir yani varsayılan olarak SQL Reporting Serviste böyledir. Maximum zamanda ki data element çıktıları, xml düğüm(node) özellikleri gibi kolay olmayan word dosyası içinde xml eşleştirmesidir. Bunu bazı data elemanları içinde özellikler penceresinden atamak mümkündür ve bunun için bazı Render opsiyonları olan element/attribute ler mevcuttur.

 

 

Şekil 1.1 :Data Çıkış elemanlarının ayarlanması.

 

Varsayılan Değerler :

       

        Bazı zamanlarda rapor içindeki değerler boş gelebilir. Eğer tablo hücreleri içerisinde bazı boş değerler geldi ise, MSWord’ te bu durum karşısında tablo hücrelerini veremez ve tablo hücrelerinin hizalarının da düzgün olmadığını göreceksiniz. Bunu çözmek için eğer bazı boş değerler gelirse varsayılan karakterler ile geçmelisiniz.

 

Bunu düzeltmenin ve yakalamanın kolay yolu Reporting Serviste IIF fonksiyonunu kullanmak. Örneğin:

 

=IIf(IsNothing(Fields!CompanyName.Value),"-",Fields!CompanyName.Value) gibi.

 

Gruplama :

 

      Grupla denildiğinde toplama objeleri planmak zordur fakat rahatlıcı XSD kuralları, hemen hemen bütün karışık senaryoları üzerinden geçmeyi mümkün kılar.Örneğe bakacak olursak :

Şekil : XSD Dizayn

 

 

Tarih Formatı :

 

      Satır formatları XML’ de tarih-saat tipinde veriler şeklinde gelir ancak bazı tarih formatları farklı bölgelerde kullanılır ve hemen hemen örgütsel kültürlere bağlıdırlar. Çözüm olarak yüklenen XML de tüm düğümlere uğruyarak ayıştırılması ve istenen veri formatı ile yerine koymak. Ancak çok yararlı değildir bu çözüm fakat XML düğümlerinin sayısı oldukça yüksekse  güzel çözümdür tabi eğer ki, XSLT’ i raporu Reporting Servisten aktarılmadıysa. Bu opsiyon Reporting Servis içinde rapor sayfası özellikleri içindedir.

Şekil 1.2 : XSLT’i aktarmadan önce uyguluyoruz.

 

 

Ad Uzayı Problemi(Name Space) :

 

XML i rapor görünümünden aktırdığımız zaman kendisini varsayılan aduzayı ile ekler ama dönüştürme işlemi yapmadan önce aduzayını XSD içinde değiştirir ya da oluşturursak programmatik olarak değişmiş olduğunu göreceğiz.

 

       

        //XSD aduzayının atanması. 

        XmlDocument oXmlDocument = new XmlDocument();    

        try

        {

            oXmlDocument.Load("serverFileName");

            oXmlDocument.DocumentElement.SetAttribute("xmlns", "http://www.w3.org/2001/XMLSchema");

            oXmlDocument.Save("serverFileName");

        }catch{}

        oXmlDocument = null;

        GC.Collect();

        GC.WaitForPendingFinalizers();

 

 

Dönüştürme için MSWord kullanıyoruz:

 

 

   private Microsoft.Office.Interop.Word.ApplicationClass oWordApplic;

   // Word uygulamasını referans alıyoruz.

  

   private Microsoft.Office.Interop.Word.Document oDoc;

   // dökümanı referans olarak alıyoruz.

 

    objectmissing = System.Reflection.Missing.Value;

    oDoc = oWordApplic.Documents.Add(ref missing,refmissing,ref missing,ref missing);

          

    oDoc.Activate();

    oDoc.TransformDocument(filename,false);

    oDoc.Save();

 

    objectmissing = System.Reflection.Missing.Value;

    oWordApplic.Application.Quit(ref missing,refmissing,ref missing);

 

 

Word Dökümanı ve Veri Şeması :

 

  1. Yeni word dökümanı açaraktan görev penceresinden XML yapıyı seçiyoruz.

Şekil 1.3:Yeni Döküman Başlangıcı

 

  1. Şablon seçtikten sonra ve Link eklenmesi ile beraber Şema ekleme opsiyonları da gelmektedir.

 

Şekil 1.4:Şema Ayarları.

 

  1. Devam eden pencerede Şema Ekleme tıkladıktan sonra isim soracaktır ve sonrasında tamamlayarak dosya ya yeni şema eklemiş olacağız.

Şekil 1.5:Takma Adlı Şema Ayarları.

 

Şema da bazı ayarlar değiştirmek mümkünüdür bunun için yol => Templates and add-ins menüsü.

Şemayı ekledikten sonra dataların tüm elementleri sağ tarafta görev ekranında ulaşılır olacaktır.

Şema 1.6 : Şema eşleştirilmesi.

 

         Word dökümanı içindeki eşleştirilen veriyi seçmeye gerek vardır ve sol tarafta veri şemasının tıklanması gerekmektedir. Örneğin: revizyon numaraların seçilmesi ve sol menüden bu numaraları tıklıyoruz XML tag larını eklemek için.

 

Şekil 1.7 : Şema Eşleştirilmesi.

 

Eşleştirmeyi tamamladıktan sonra dosyayı XML formatta kaydediyoruz. XML formatta kaydetmek için File-Save as menüsü aracılığı yapıyoruz.

 

Şekil 1.8 : Kaydetme.

         Yukarıda gördüğümüz Kaydetme ekranında dikkat etmemiz gereken bir nokta vardır . Şu ki : görebileceğiniz gibi “Apply transform” ve “Save data only”  seçenekleri mevcuttur. Bunların tıklanmamış  olması gerekir. Şimdi ki yapacağımız iş ise XSLT dosyasını düzenlemek. Bunu WML2XSLT.EXE kullanarak yapacağız. Bu arac ı indirmek için makale sonunda link vermiş olacağım.

Dos ekranına geçip, klasör altına gittikten sonra şunu yazıyor olacağız :

WML2XSLT.EXE -o“BookOrderMAPPED.XML” –o “BookOrder.xslt”.    burada tabii ki ben kendi klasör isimlendirmesine göre dizin adı vermiş oldum sizde kendi klasör adına göre yazıyor olacaksınız.

Şimdi Word dosyası içinde XML dosyamızı açıyoruz. Aşağıda görüldüğü gibi.

Şekil 1.9 : Word ile açtığımız XML.

 

Şimdi görev planına yani sağ bölüme baktığımızda Word dosyası bize iki tane opsiyon vermiş olacaktır bunlar “Data Only” ve “Browse” seçenekleridir.Browse seçeneğini seçerekten istemiş olduğumuz XSLT çıktısını elde etmiş oluruz. Word dosyası içinde yani .doc uzantılı dosya da data eşleştirilmesinde değişiklik meydana gelmiş ya da data olmayan planlama alanı değişikliklerini tutmak için yeni XSLT ve daha öncekileri XML üzerinde meydana getirir.

 

Şekil 1.10: Sonuç ekranımız.

 

Makale de yapılmış olan örneği download link inden indirebilirsiniz.

 

Görüşmek dileği ile…

İyi günler…

metin.altuntas@gmail.com

 

Kaynaklar :

 

  • WML2XSLT.EXE Word ML process aracı indirmek için :

http://www.microsoft.com/downloads/details.aspx?FamilyID=2cb5b04e-61d9-4f16-9b18-223ec626080e