3 Mart 2011 Perşembe

Biztalk 2009 WCF Oracle Adapter - Part 2


1. SELECT :
Örneğe başlamadan önce işleyişi kısaca özetlemek istiyorum. Klasöre bir xml dosyası geldiği anda ki bu dosya sorgu dosyamız olacak ve sorgu mesaj tipiyle aynı olacak, process başlayacak. Bu mesaj SndSelectOracle ile sorguya yollanacak, RcvSelectOracle ile sorgu sonucunu alacağız. PortSnd ile de farklı bi klasöre sorgu sonucunu yazacağız.

Bir Biztalk projesi yaratıyoruz ve sağdaki resimde görültüğü gibi orkestrayı yaratıyoruz.

Bizim için önemli olan kısım PortOracleSelect portu. Bu port iki yönlü olacak, bir mesaj yollayacağız ve o bir mesaj geri dönecek. Bu portun tanımlamasını yaparken Request-Response seçilmeli, sonraki adımda "I'll be sending a request and receiving a response" ve "Specifiy later" seçilmelidir. SndSelectOracle ve RcvSelectOracle için mesajlarının tipini belirmek üzere oracle tablosunun schema'sını oluşturmamız gerek. Bu schema'daki xml tiplerini mesaj tiplerine atayacağız.




Schema oluşturma adımları
1. Proje ismine sağ tıklıyoruz Add> Add Generated Items> Add Adapter Metadata seçip add diyoruz.
2. WCF-OracleDB'yi seçip Next diyoruz.
3. Consume Adapter Service gelicek karşımıza resimdeki gibi. Configure butonuna basıyoruz.
3.1. Security tab'ında Client crendential type: Username seçiyoruz, User name ve Password'u giriyoruz. ( benim için ACTPRD - ACTPRD)
3.2. URI Properties tab'ında Service Type : DataSourceName kısmına database adını adını yazıyoruz. (benim için DBPRD)
3.3. Binding Properties tab'ında EnablebizTalkCompatibilityMode kısmını True ve UseAmbientTransaction kısmını False Yapıyoruz.
3.4. OK butonuna basıyoruz ve daha sonra Connect butonuna basıyoruz.





Eğer connection bilgilerini doğru girdiysek karşımıza resimde görüldüğü gibi Schema üzerindeki tablolar gelecektir. İstediğimiz tabloyu seçiyoruz ve yapacağımız operasyonları Add butonu ile alttaki kutuya ekliyoruz. Filename Prefix alanına TBL yazıyorum kısa bir adla başlasın diye. OK butonuna bastıktan sonra şemalar projeye eklenecektir. Yanına bir orchestration daha oluşacaktır, onu silebiliriz. Benim tablomun adı PERSON idi ve schema adı olarak TBL_PERSON olarak yaratıldı. Çift tıklarsak içindeki xml yapısını görebiliriz. Select işleminde Select ve SelectResponse mesaj tiplerini kullanacağız.

Şimdi Orchestration View kısmındaki Messages kısmından SndSelectOracle ve RcvSelectOracle'ye atamak üzere mesaj yaratmamız gerek. Tiplerini de oluşturduğumuz Schema'daki tipleri kullanarak belirteceğiz.
1. Oracle Select için mesaj yaratma : Messages'e sağ tıklıyoruz ve New Message diyoruz. İdentifier'den ismini MsgSelecetReq yapalım ve MessageType olarak Schemas'tan ben BizTalkTest1.TBL_PERSON.Select'i seçiyorum, sizin projenizde sonunda Select olanı seçin.
2. Oracle Select Response için mesaj yaratma : Messages'e sağ tıklıyoruz ve New Message diyoruz. İdentifier'den ismini MsgSelecetRes yapalım ve MessageType olarak Schemas'tan ben BizTalkTest1.TBL_PERSON.SelectResponse'i seçiyorum, sizin projenizde sonunda SelectResponse olanı seçin.


Oluşturduğumuz mesajları SndSelectOracle ve RcvSelectOracle kutularına atmamız gerek. SndSelectOracle için Porperties'de Message değerini MsgSelectReq seçiyoruz. RcvSelectOracle için ise MsgSelectRes'i seçiyoruz. Bu şekilde kutulara sorgulamada kullanılacak mesaj tiplerini de göstermiş olduk. Daha sonra SndSelectOracle ve RcvSelectOracle kutularını PortOracleSelect portuna bağlıyoruz. Rcv'nin mesaj tipini MsgSelecetReq, Snd'nin mesaj tipini MsgSelecetRes yapıyoruz ve onu da portlar ile ki portların request tipleri de mesajlara uygun olmak zorunda, bağlıyoruz.


Proje kısmında yapacaklarımız bu kadar. Projeye sağ tıklayıp build dediğimizde sorunsuz build olması gerek. Şimdi projeyi deploy edeceğiz fakat ondan önce projeye sağ tıklayıp Properties kısmına gelelim. Deploy sırasında hata gelmemesi için signing kısmından bi key yaratıyoruz ve Deploymen kısmında Application Name'a proje ismini verelim ( benim proje adım BiztalkTest1), Server kısmına .(nokta=localhost) yazalım. Şimdi Projeye sağ tıklayıp Deploy diyoruz. BizTalk Server Administration'a projemiz gelmiş olacaktır.

Şimdi, BizTalk Server Administration'da projemizi buluyoruz ve daha önce "Specifiy later" dediğimiz port tanımlamalarını yapmaya başlıyoruz. Bilgisayarın C dizininde BiztalkTest diye bi klasör oluşturalım, onun içine de IN ve OUT adında klasörler daha yaratalım. Port tanımlamalarını Orchestrations üzerinden yapacağız. Orchestrations'a tıklıyoruz ve sağda çıkan ekrandaki orchestration'a sağ tıklıyoruz, Properties'i seçiyoruz, ordan Bindings'i seçiyoruz.

1. PortRcv ve PortSnd kısımlarını tanımlıyoruz. Konunun uzamaması için anlatmıyorum.
2. PortOracleSelect kısmı bizim için önemli : New port diyoruz ve makalenin başında bahsettiğim Type kısmında OracleDB'yi seçiyoruz. Configuration'a tıklıyoruz.
2.1. General kısmında configure'ya tıklıyoruz, DataSourceName = DBPRD yazıyoruz.
2.2. Binging kısmında EnablebizTalkCompatibilityMode kısmını True ve UseAmbientTransaction kısmını False Yapıyoruz.
2.3. Credentials kısmında Do not user Single Sing-On kısmına User name ve Password'u giriyoruz. ( benim için ACTPRD - ACTPRD)
2.4. OK dedikten sonra SOAP Action header kısmını tanımlayacağız. Bu kısımda projedeki oluşturduğumuz schema'dan yararlanmamız gerek. Hangi operasyonun hangi işlemi yapacağını tanımlayacağız porta.







Aslında SOAP Action Header'i tanımlarken IN klasörüne gelecek olan xml formatını da burdan öğreneceğiz. Projeye gelelim. Benim projemde TBL_PERSON.xsd olarak gözüken schema'ya sağ tıklayıp Generate Instance diyoruz. bu bize o tipe uygun bir xml dosyası yaratacaktır. Output kısmındaki linke tıklarsanız xml'i göreceğiz. Benim xml formatı bu şekilde:

<ns0:Select xmlns:ns0="http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON">
<ns0:COLUMN_NAMES>COLUMN_NAMES_0</ns0:COLUMN_NAMES>
<ns0:FILTER>FILTER_0</ns0:FILTER>
</ns0:Select>
Bu xml bizim sorgu yapacak SndSelectOracle portu ile yollayacağımız xml. bunu bir yere kaydedelim. SOAP Action ise aşağıdaki şekilde olacak. Name kısmı projedeki port operation name ismi olmak zorunda. Action bilgisi ise yukarıdaki xml'i inceleyerek nasıl yarattığıma bakın. ns0 bilgisinin sonuna /Select'i ekledim.

<BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Operation Name="OpSelect" Action="http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON/Select" />
</BtsActionMapping>
bu şekilde projeyi tamamlamış olduk, portları enable yapıyoruz ve projeyi start ediyoruz. Ardından Platform Setting altında olan Host Instances'de BiztalkServerApplication'u restart edelim. Bunu projede her değişiklik yaptıktan sonra yapmamız gerek, yoksa değişiklikler yansımaz.

Test'e başlayalım.
içeriği aşağıda olan test.xml dosyasını IN klasörüne atıyorum ve OUT klasörüne onun da altındaki xml dosyası oluşuyor.

IN :

<ns0:Select xmlns:ns0="http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON">
<ns0:COLUMN_NAMES>NAME,TYPE</ns0:COLUMN_NAMES>
<ns0:FILTER>recid=2</ns0:FILTER>
</ns0:Select>


OUT:

<?xml version="1.0" encoding="utf-8"?>
<SelectResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON">
<SelectResult>
<PERSONRECORDSELECT>
<NAME>OMER</NAME>
<TYPE>C</TYPE>
</PERSONRECORDSELECT>
</SelectResult>
</SelectResponse>

2. INSERT : yakında

3. UPDATE : yakında

Hiç yorum yok:

Yorum Gönder