17 Şubat 2015 Salı

Biztalk ile Uygulama Geliştirme


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 Page
    Property
    Value
    Port Properties
    Name
    CustomerPort
    Select a port type
    Port Type Name
    CustomerPortType
    Port binding
    Port direction of communication
    I’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.