Biztalk
ile Dosya Dönüşümü
Biztalk
Server'ı, kurumsal şirketlerin teknik ekiplerinde çalışanlarımızın bir kısmının
daha önceden duyduğunu düşünüyorum. Biztalk'ı genel olarak ifade etmek
gerekirse bir firmada kullanılan yazılım sistemlerinin iletişimini sağlayan ve
bu süreci otomatize etmeye yarayan bir Microsoft ürünüdür.
Bu yazımda,
ürünü kullanmaya yeni başlayan meraklılar için ufak bir uygulama
gerçekleştireceğiz. Uygulama genel anlamda bir sistem tarafından
oluşturulduğunu düşündüğümüz xml formatındaki bir dosyayı bir folderdan
otomatik olarak alıp,başka bir sistemin kullanacağı bir folder'a içeriği biraz
manipule ederek txt formatında bırakacak.
Visual
Studio 2013 ile oluşturulan ilk Biztalk projesi ile,deployment için gerekli
konfigurasyon ayarlarını yapıp, receive-send port nasıl oluşturulur ona
bakacağız.
- Lab örneğini gerçeklemek için öncelikle ekteki dökümanı indirip bulunması kolay bir foldera kopyalamanız gerekmektedir.(Siradan indirme seçip birkaç saniye bekleyip ekrandaki kodu girmeniz yeterli)
- http://dfiles.eu/files/y9275ad78
- Bunun için labta kullanılacak dosyayı aşağıdaki foldera koydum.
- C:\Users\Ozge\Desktop\Projelerim\BIZTALK\Biztalk_Eğitim\Hands-on-Labs\Lab 1\Start
1.Adım:
Şema oluşturma
- Öncelikte BaşlatàTüm Programlar àVisual Studio 2013 açılır.
- File| New Project seçilerek yeni Biztalk projesinin adı ConsotoMessaging olarak tanımlanır.
- CàUsersàPCAdiàVisual Studio2013 klasörünün içinde BiztalkProjects onun içinde de Lab1 isimli bir folder oluşturulur.
- Location bilgisi olarak bu dizin girilir.(C:\Users\PCAdi\Documents\Visual Studio 2013\Projects\BiztalkProjects\Lab 1 )İsim ve location tanımı bittikten sonra OK diyebiliriz.
- Projemizi oluşturduktan sonra Add|Existing Items diyerek ilk adımda indirdiğimiz C:\Users\Ozge\Documents\Visual Studio 2013\Projects\BiztalkProjects\Lab 1\Start\ContosoMessaging dizinindeki CustomerOrderFlatFile.xsd dosyasına çift tıklayarak xsd uzantılı hazır şema dosyasını projeye eklemiş oluruz.
- Solution explorrerda CustomerOrderFlatFile.xsd dosyasına çift tıkladığımızda yüklediğimiz şemanın içeriğini görüntüleyebiliriz ayrıca solda bulunan şema ağacına sağ klik Expand Schema Node diyerek şemayı oluşturan elemanları da görüntüleyebiliriz.
- Halihazırdaki şemayı ekledikten sonra bir de Add|New Item diyerek kendi boş şemamızı oluşturalım. Şemanın adı Order.xsd olsun.
- Oluşturduğumuz şemanın içeriğinde herhangi bir eleman olmadığını görürüz.
- Root yazan alanı CustomerOrder şeklinde değiştirelim.
- CustomerOrder’a sağ klik Insert Schema Node | Child Record diyelim ve oluşturacağımız bu yeni kayda “CustomerInfo” adını verelim.
- Oluşturduğumuz “Customer Info”ya sağ klik Insert Schema Node | Child Field Element diyerek “First Name” adında yeni element ekleyelim. Aynı şekilde LastName,Phone elementlerinin de ekleyelim.
- CustomerOrder’a sağ klik Insert Schema Node | Child Record diyelim ve oluşturacağımız bu yeni düğüme “Order Details” adını verelim.
- Order.xsd’ye sağ klik yaparak Generate instance dersek oluşturduğumuz fieldları xml formatına getiririz.
- Output windowda çıkan linke Ctrl ile tıklarsak oluşan instance’ın xml formatındaki içeriğini görebiliriz.
2.Adım
Map ve Pipeline oluşturma
- Dışarıdan yüklediğimiz şema ile kendi oluşturduğumuz şemadaki alanları birbiriyle eşleştirme adımına artık geçebiliriz.
- Visual Studio Solution Explorer’dan ContosoMessaging projesine sağ tıklayıp Add | New Item diyelim.
- Seçeneklerin içinden Map template’ini seçerek MapOrderToCustomer.btm ismini verelim.
- Map açıldıktan sonra Open Source Schema linkine tıklayalım.
- Açılan pencerede Schemas düğümünü genişletelim ve ContosoMessage.Order şemasını seçelim. Bizim oluşturduğumuz Order şemasını kaynak olarak tanımlamış oluruz.
- Sonraki adımda da sağ tarafa tıklayarak Open Destination Schema diyip dışardan eklediğimiz ContosoMessaging.CustomerOrderFlatFile şemasını seçerek bu şemayı da hedef olarak tanımlamış oluruz.
- Şemaları tanımladıktan sonra map işlemine geçebiliriz. Source(kaynak) şemanın CustomerInfo düğümü altındaki Phone elementine mause ile tıklayıp destination(hedef) şemanın ContactNo alanına çektikten sonra boşluğa tıklayarak bir bağlantı oluştururuz.
- Sonrasında Toolbox’ta String Functoid adımından String Concatenate’e tıklayıp map’e sürükleyelim. Şekildeki gibi First Name ve Last Name alanının herbirinden String Concatenate’e birer bağlantı çekelim. String Concatenate’den Fullname’e giden bir bağlantı daha çekelim, boşluğa tıklayalım.
- String Concatenate’in üzerine tıklayalım açılan pencerede + butonuna tıklayalım. Burada First Name ve Last Name’i birleştirirken araya eklemek istemediğimiz bir karakterin ayarını yaparız. Boşluk karakteri olmasını istediğimizden sadece +’ya basıp Ok diyoruz.
·
Map
ayarlarını tamamladıktan sonra send pipeline oluşturacağız.Solution Explorerdan
ContosoMessaging projesine sağ tıklayıp Add | New Item diyelim.
·
Send
Pipeline template’ini
seçip adını FlatFileSendPipeline.btp verelim.
·
Toolboxtan
Flat file assembler seçip pipeline designer sayfasındaki Assemble alanının
altına sürükleyelim.Böylece send pipeline’a gidecek olan mesaj formatının Flat
File (text) olacağını söylemiş oluruz.
3.Adım:
Orchestration Oluşturma
Map işleminde doyaların içindeki dataların
ilişkilendirmesini tamamladık, Pipeline ile dosyalara format tanımladık şimdi
sırada Orchestration ile dosyaları birer mesaj gibi tanımlayıp onlara input
output özellikleri vereceğiz.
- ContosoMessaging projesine sağ klik Add | New Item diyelim.
- BizTalk Orchestration ‘ı seçip adına OrderProcessing.odx diyelim.
- Orchestration designer sayfası açıldıktan sonra Orchestration View penceresinin açıldığından emin olalım. (Açık değilse View menüsündeki Other Windows’tan açalım)
- Orchestration View penceresinde Messages alanına sağ klik Properties window’u da açalım.
- Messages alanına yeniden sağ klik New Message diyelim.
- Message_1’e tıklayıp properties penceresindeki Identifier alanına “OrderMessage” yazalım.
- Message Type alanını da Schemas’dan ConsotoMessagging.Order olan bizim hazırladığımız şemayı seçelim. Böylece alınacak input dosyayı mesaj olarak tanımlayıp kendi hazırladığımız Order.xsd şeması ile ilişkilendirmiş olduk.
· Aynı şekilde tekrardan Messages alanına yeniden
sağ klik New Message diyelim. Message_1’e tıklayıp properties
penceresindeki Identifier alanına “CustomerMessage” yazalım.
· Message
Type alanını da Schemas’dan ContosoMessaging.CustomerOrderFlatFile
olan dışardan eklediğimiz şemayı seçelim. Böylece çıkacak output dosyayı mesaj
olarak tanımlayıp dışardan eklediğimiz CustomerOrderFlatFile.xsd
şeması ile ilişkilendirmiş olduk.
· Design alanına toolboxtan şekildeki gibi bir adet Receive
shape,Transform shape,Send shape sürüklüyoruz.
· Receive_1
shape’ini seçip activation propertisini True yapalım.
· Message properties’ini OrderMessage (bizim
tanımladığımız dosyanın referansını tutan mesaj) yapalım. (Böylece Biztalk’a
bizim tanımladığımız order mesajını beklemesini ve mesaj geldiğinde yeni bir
orchestiration instance’ı aktive etmesi yada başlatması gerektiğini söylemiş
oluruz.)
· Send_1
shape’in Message properties’ini de CustomerMessage yapalım.
· Transform_1’i seçelim
Map Name properties’ine tıklayalım.
· Açılan Transform Configuration penceresinde
Existing Map radio buttonuna tıklayalım.
· Daha önce veri dönüşümlerini tanımlamak için
oluşturduğumuz ContosoMessaging.MapOrderToCustomer mapini dropdowndan
seçelim.
· Source’a
tıklayalım Variable Name kolonundan OrderMessage’yi seçelim.
· Destination’a
tıklayalım Variable Name kolonundan CustomerName’i seçelim.
· OK diyelim ve transform configuration penceresini
kapayalım.
· Orchestiraction adımında şuana kadar gelen giden
mesajları oluşturup onları şemalarla ilişkilendirdik ve bir map haritası
üzerinden hangi mesajının receive hangisinin send edileceğinin tanımını
gerçekleştirdik.
· Şimdi sıra bu mesajları send ve receive edecek logical
port tanımlarını orchestiration üzerinde tanımlamaya geldi.
· Toolboxtan bir port alıp map ekranının solundaki Port
Surface alanına sürükleyip bırakalım.
· İlk açılan Port Configuration Wizard penceresine next
diyelim.
· Port adına OrderPort diyerek,next diyelim.
· Sonraki adımda Port Type Name’e OrderPortType
ismini verelim.Diğer tüm ayarları default değerlerinde bırakıp sonraki adıma
geçelim.
· Port Binding sayfasında OrderPort’u receive port
olacağı için ayarları olduğu gibi bırakıp next diyoruz. Finish diyerek wizard’ı
kapıyoruz.
- Aynı ayarları aşağıdaki değerler için send portu için de yapıyoruz. Orchestration ekranının sağına toolboxtan port sürükleyip aşağıdaki ayarları gerçekleştiriyoruz
- Wizard PagePropertyValuePort PropertiesNameCustomerPortSelect a port typePort Type NameCustomerPortTypePort bindingPort direction of communicationI’ll always be sending message on this port.
- Tüm bu ayarlar bittikten sonra solution’u build ediyoruz.
4.Adım
Solution’u deploy etme
· Solution Explorer ContosoMessagging projesine sağ klik
ile Properties açılır.Signing tabı açılır.
· Sign the assembly kutusuna tıklanır. Beliren dropdowndan new seçilerek
yeni bir güçlü anahtar oluşturulur. Böylece oluşturulan projenin assembly’si
GAC(Global Assembly Cache)’e kaydolur.
· Key oluşturmadan sonra Application adı alında Lab1
yazalım.
· Bu arada Server alanına “.” yazarsak, proje dosyasını
herhangi bir development serverda ya da lokal serverımızda çalışması için
taşınabilir hale getirmiş oluruz.
· ContosoMessage
projesine sağ klik diyerek Deploy Solution diyebiliriz.
· Output penceresini izleyip developmentın başarılı
olduğundan emin olmalıyız. Ekranın altında Deploy Succeeded yazısı belirir.
·
5.Adım:
Mesaj portlarını konfigüre etme
Visual
Studio tarafında Orchestration adımında logical portları tanımlamıştık.
Bu portları fiziksel portlarla Biztalk Server’ın admin konsolunda ilişkilendireceğiz.
· Admin konsolunu StartàAll
ProgramsàBiztalk Server Administrator’dan açalım.
· Application düğümüne tıklayayıp Lab1’i açalım.
· Lab1’in içindeki componentlerden Receive Ports’a
sağ klik ile New | One-way receive port seçelim.
· Açılan pencerede receive portun adını OrderReceivePort
verelim.
(Receive
port,bir ya da daha fazla receive locationun bulunduğu bir logical giriş
noktasıdır.Bu logical giriş noktası birkaç farklı fiziksel giriş noktasına izin
verir)
· ReceivePort’un
üzerine tıklayıp açılan sayfada OrderReceivePort’a sağ klik ile New |
Receive Location diyerek fiziksel giriş noktası ayarını yapalım.
· İsim alanına CustomerOrder_FILE adını verelim.
· Type FILE seçelim.
· Receive pipeline XML receive seçelim.(yalnızca xml
formatındaki dosyaları kabul et diyoruz)
· Fiziksel Receive locationu belirlemek için Configure
butonuna tıklayalım ve browse’dan lokasyonu seçelim. (Bunun için C:\BiztalkFolders\Labs\Lab1\Messaging\Receive
şeklinde C’nin altında içiçe boş folderlar oluşturdum. Siz de herhangi bir
yerde Receive adında boş bir folder oluşturup bunu dosya yolu olarak
verebilirsiniz.)
· Ok deyip send location’ı tamamladıktan sonra,busefer
aynı administor consolunda Lab1’in altındaki componentlerden SendPort’a sağ
tıklayarak ,send portun fiziksel dosya yolunun ayarlarını yapıyoruz.
· İsim alanına CustomerSendPort yazıyoruz.
· Type FILE seçiyoruz.
· Send Pipeline FlatFileSendPipeline seçiyoruz.(Böylece
çıkan dosya formatı text olsun demiş oluyoruz)
· Configure
butonuna tıkladıktan sonra browse’dan Send pipeline folderını belirliyoruz.
· Ben
C:\BiztalkFolders\Labs\Lab1\Messaging\Send şeklinde içiçe boş folderlar oluşturup
belirledim.
· Filename alanındaki %MessageID%.xml’i txt’ye çevirelim. Çünkü ilk sayfada send
folderına atılacak dosya tipinin flatfile olduğunu söylemiştik.
· OK diyip administrator consola geri dönüyoruz.
· Bu adımda şimdi tanımlamış olduğumuz fiziksel
receive,send folderlarını Biztalk applicationun Orchestration aşamasında tanımladığımız
logical receive,send portlarla ilişkilendireceğiz.
· Bunun için Lab1’e yine sağ tıklayıp Configure
diyoruz.
· Configure ekranınının solunda logical port isimlerine
karşılık gelen,fiziksel portları aynı şekildeki gibi seçiyoruz.Apply diyoruz.
Port konfigurasyonu da bitti artık Biztalk uygulaması tarafında yaptığımız veri
işlemlerinin folderlarda otomatik gerçekleşecek şekilde ayarını yapmış olduk.
- Şimdi sıra uygulamayı start etmeye geldi.Admin console’dan Lab1’e sağ klik diyip Start diyelim.Hazırladığımız Biztalk uygulaması şuan çalışır durumdadır.
· Artık oluşturduğumuz receive folderına xml formatıyla
dosya bırakıp,send folderından aynı dosyanın text formatında oluşup
oluşmayacağını test edeceğiz.
· Örnek folder oluşturmak için biztalk projedeki
Order.xsd’ye sağ klik create instance dersek altta çıkan linke ctrl-clik ile
tıklayıp receive edilecek dosyanın örnek bir xml içeriğini oluştururuz.Bu xml
içeriği kopyalayıp masaüstüne xml formatında,yeni text dokumanı oluşturup
test.xml adı vererek kaydedelim.
- Test.xml in içeriği
- Daha sonra bu text.xml’i C:\BiztalkFolders\Labs\Lab1\Messaging\Receive adresindeki foldera atalım.
· Birkaç saniye içerisinde dosyanın yok olduğunu
göreceksiniz çünkü admin consoleda start ettiğimiz application onu receive
porttan alarak visual studio’da oluşturduğumuz ConsotoMessagging’i çalıştırıp dosyanın
içindeki datalarda birtakım düzenlemeler yaparak Send folderına txt formatında
bırakır.
· Oluşan txt dosya aşağıdaki gibidir.
Tüm bu
yaptıklarımızla xml formatındaki dosyayı bir folderdan otomatik alıp txt
formatına çevirip başka foldera otomotik atılmasını sağlamış olduk. Bu işlem
için bukadar orchestration ayarına,konfigürasyon tanımına ne gerek vardı ben
yazacağım iki satır kodla xml'den txtye çevirirdim otomatize etmek için de
servis yazardım diyebilirsiniz. Ancak büyük çaplı uygulamalarda birden fazla
receive locationdan birden fazla sistemler dinlenip veri alınıp onları
birleştirmek gerekebilir ve bu sistemlerin herbirinin değişikliğinde sizin kendi
yazdığınız uygulamayı tekrar tekrar düzenlemeniz gerekecektir ama Biztalk'ın şu
konfigurasyon ayarlarına iyi alışırsanız sistem değişikliklerinde
entegrasyonlar daha hızlı çözümlenir.Ayrıca Biztalk servisin diğer önemli
özelliği aktarılacak dosyaları queue'da tutarak veri kaybını önlemesidir.
Hiç yorum yok:
Yorum Gönder