SSIS Web Service Task Kullanımı
Merhabalar bu yazımda sizlere SSIS üzerinde Web Service Task kullanımını bir örnek üzerinden aktarmaya çalışacağım.Veri tabanında müşterinizle ilgili ad,soyad,doğum tarihi ve TC kimlik numarası gibi bilgileri tutuyorsunuz.Bu bilgilerin doğru olması sizin için çok kritikse eğer ilgili verileri doğrulamanız gerekir.Bunları verilerin akış sağladığı uygulama üzerinden de denetleyebilirsiniz ama o uygulamanın dışında da veri akışı sağlanması söz konusu olabilir.Bizim senaryomuz içerisinde ETL tarafından akan bir veri akışında bu kontrolü nasıl sağlayabileceğimizle ilgili olacak.Elimizde aşağıdaki gibi verilerin bulunduğu bir tablo olsun.
Bu kişilerin gerçek bir tüzel kişi mi yoksa sahte bilgilerle sisteme giriş yapmış bir kişi olup olmadığını anlamak için bir SSIS paketi hazırlayacağız.
İlgili SSIS paketimizin akışı yukarıdaki gibidir.Şimdi her bir adımın detaylı olarak neler yaptığına bakabiliriz.İlk baştaki “Execute SQL Task” işlemini anlatmadan önce bir değişken oluşturmamız gerekli.Çünkü “Execute SQL Task” içerisinde Resim 1’de bulunan tablodaki tüm verileri okuyup veri tipi object olan değişkene atamamız gerekli bunu yapmamızın sebebi her bir müşteri bilgisi teker teker “Foreach Loop Container” girip ayrı ayrı sorgulanması.İlgili değişkenimizi oluşturmak için paket içerisinde boş bir yerde sağa tıklayarak açılan sekmede “Variables” kısmını seçmemiz yeterlidir.
Variables kısmına geldikten sonra “Variable” adında veri tipi object olan bir değişken oluşturuyoruz.
Bu işlemleri gerçekleştirdikten sonra ilk adımımız olan “Execute SQL Task” işlemine daha detaylı bakabiliriz.Bu aşamada ADO.NET bağlantı tipini kullanarak ilgili tablodaki verileri okuyup oluşturduğumuz değişkene atıyoruz.Verileri okurken parametre almayan sadece SELECT * FROM Müsteri sorgusunu döndüren bir stored procedure aracılığı ile bu işlemi gerçekleştiriyoruz.
Resim 5’de görüldüğü üzere sonuçlar bize “Full Result Set” olarak dönüyor.İlgili sonuç kümesini “Result Set” kısmına gelerek oluşturduğumuz değişkene atıyoruz.
Böylece ilk aşamamızı bitirmiş oluyoruz.Şimdi ise değişkene atanmış olan verilerin satır satır işleme sokulması için “Foreach Loop Container” kısmında değişiklik yapacağız.
“Collection” sekmesine gelerek Resim 7’de görmüş olduğumuz ayarlı yapıyoruz.”Enumerator” olarak Foreach ADO Enumerator seçeneğini belirtiyoruz.Daha sonra “ADO object source variable” kısmında ilk kısımda dönen sonuç kümesini atamış olduğumuz değişken olan “User::Variable” seçiyoruz.”Enumeration mode” kısmında da Rows in all the tables kısmına seçerek sonuç kümesindeki verileri satır satır yakalamış olacağız.Son olarak dönen bu satırlardan kolon bazlı bilgide yakalamak istediğimiz için tablodaki kolon isimleriyle uyuşacak şekilde değişkenler oluşturup “Variable Mappings” kısmında dönen verileri bu değişkenlere aktarıyoruz.
Burada tablodaki kolon isimleriyle aynı olacak şekilde değişken isimleri atamanızı öneririm.
Tablodaki kolon sıralamasını dikkate alarak değişkenleri ilgili indekslere atıyoruz ve Foreach Loop Container kısmındaki ayarlanması gereken kısımları bitirmiş oluyoruz.Şimdi ise satır satır yakalamış olduğumuz bu verileri “Web Service Task” kullanarak gerçek bir tüzel kişi mi yoksa sahte bir kişi mi onu tespit edeceğimiz kısıma geliyoruz.Bu sorgulamayı yaparken kullanacağımız servise https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx? adresinden ulaşabilirsiniz.Web Service Task kısmında ilk olarak HTTP Connection Manager oluşturuyoruz.
Resim 10’da gözüktüğü üzere HTTP bağlantısı oluşturmuş oluyoruz.
Web Service Task kısmının başarılı şekilde çalışması için HTTP tarafından gelecek olan wsdl dosyasının lokal’e indirilmesi gereklidir.Bunun için ben C diskinin altındaki “Wsdl” klasörünün altına manuel olarak “Tckimliknosorgulama” adında bir wsdl dosyası oluşturdum.Daha sonra “Download WSDL” butonuna tıklayarak indirme işlemini gerçekleştiriyoruz.
Daha sonra “Input” sekmesine gelerek Service ve Method kısımlarını belirliyoruz.Biz ilgili senaryomuz için “TCKimlikNoDogrula” metodunu kullanacağız.Alt tarafta bizden istediği bilgileri görmekteyiz.Bizden TCKimlikNo,Ad,Soyad ve DogumYili bilgileri istemektedir.Biz bunların hepsini değişken olarak vereceğimiz için Variable kısmında kutucukların hepsini işaretliyoruz ve istenen ilgili bilgi için uygun değişkenleri eşleştiriyoruz.Son olarak bu işlem bize True veya False olarak bir sonuç döndürecek.Bu bilgiyide almak için manuel şekilde oluşturduğumuz wsdl dosyasının bulunduğu dizine birde result adında bir xml dosya oluşturuyoruz.
Dönecek olan sonucuda “Output” sekmesinde oluşturduğumuz result.xml’e atmasını istiyoruz.Böylece Web Servise Task kısmındaki işlemlerimizide bitirmiş oluyoruz.Şimdi ise Execute SQL Task işlemini kullanarak bize sonuç döndüren xml dosyasını okuyarak ilgili kişinin bilgileri doğrulandı mı doğrulanmadı mı onu yakalayacağız.
Resim 14’deki sorgu da T-SQL’in gücüne kullanarak xml türünde sonuç dönen dosyamızı okuyoruz ve ilgili kişinin bilgilerinin doğrulanıp doğrulanmadığını “@IsFake” değişkenine atıyoruz.Xml dosyasında bilgisi doğrulanmayan kişiler için 0 doğrulanan kişiler için 1 dönmektedir ancak biz içerde tam tersi olarak bunu tutacağımız için IF-ELSE döngüsünde bunu düzeltiyoruz.
Resim 14’deki sorguyu “Execute SQL Task” işlemindeki SQLStatement kısmına kopyalıyoruz.Daha sonra sorgudan dönen “@IsFake” değişkenini SSIS üzerinde oluşturacağımız “IsFake” değişkenine atıyoruz.Bu işlemi “Result Set” sekmesine gelerek gerçekleştiriyoruz.
Şimdi senaryomuzun son aşaması olan tablodaki IsFake kolonunu güncellemek olacak.Resim 16’da IsFake değişkeniyle bu değeri ilgili kişi için yakalamış olduk zaten.Data Flow Task aşamasında da bu değerle IsFake kolonunu güncelleyeceğiz.
Data Flow Task işleminin içerisine girdiğimizde Resim 17’deki gibi bir akış görmekteyiz.Burada “OLE DB Source” kısmında yukarıda atamış olduğumuz Ad,SoyAd,TCKimlikNo ve DogumYili değişkenlerini kullanarak ilgili kişiyi yakalıyoruz.Daha sonra “Conditional Split” işleminde kişinin IsFake değişkenine atanmış değer eğer 1 olarak dönüyorsa Fake bacağına eğer 0 olarakdönüyorsa NotFake bacağına düşerek güncelleme işlemi gerçekleşecektir.
“OLE DB Source Editor” kısmındaki ilgili kişiyi yakalamak için TcKimlikNo,Ad,SoyAd ve DogumYili bilgisini parametre olarak vereceğiz bu yüzden o kısımların değerlerini “?” olarak belirliyoruz.Sonra da Paramaters butonuna tıklayarak where koşulundaki sıralamaya göre değişkenleri atıyoruz.
“Conditional Split” aşamasında ise kişinin bilgilerinin doğru olup olmadığını tutan IsFake değişkenine göre update işlemine tabi tutuluyor.
Detaylı olarak bakmak gerekirse Resim 20’de de görüldüğü üzere IsFake bize True yani 1 dönüyorsa Fake bacağındaki Update koşuluna eğer False yani 0 dönüyorsa NotFake bacağındaki Update koşuluna yönlendiriliyor.Update koşullarından NotFake bacağındaki kısmına bakacak olursak Resim 21’deki gibi ilgili kişinin bilgileri doğrulandığı için IsFake kolonu 0 olarak güncellenmektedir.
where koşulunda yine ilgili sorgunun parametre aldığını görmekteyiz.Bu işlemde de “Columns Mapping” sekmesine gelerek yine where koşulundaki sıralamaya göre parametreleri atıyoruz(Resim 22).
Senaryomuzdaki tüm işlemleri tamamladıktan sonra şimdi paketimizi çalıştırarak ilgili işlemlerin başarılı bir şekilde çalışıp çalışmadığını görelim.
Resim 23’de görüldüğü üzere paketimiz başarılı şekilde çalıştı.Bir de ilgili tablomuza bakarak IsFake kolonlarının beklediğimiz şekilde dolup dolmadığına bakalım.
Tabloya da baktığımızda gerçekten tüzel olmayan kişileri yakalamış olduk.Elimden geldiğince Web Service Task kullanımı güzel bir örnekle anlatmaya çalıştım.Umarım faydalı olmuştur.