3 Mart 2011 Perşembe

Biztalk 2009 WCF Oracle Adapter - Part 3


2. INSERT :

Insert işlemi select ile aynı mantıktadır. TBL_PERSON.xsd 'deki insert fotmatlı bir xml yollucaz, ve geri dönüş değeri olarak başarılı veya başarısız olduğunu belli eden bir xml dönücek.

İlk önce yollayacağımız xml'yi hazırlayalım, bunu da daha önce select işlemi sırasında yaptığımız gibi TBL_PERSON.xsd schema'sına sağ tıklayıp Generate Instance yapıcaz. Fakat bu şekilde bize en üstteki tipi olan select xml örneğini üretir. insert'i elde etmek için projenin klasör halinde bir kopyasını oluşturun, bu kopyada insert ve insertResponse haricindeki schema'daki tüm xml yapılarını silin. Şimdi Generate Instance dediğimizde insert xml örneğini output kısmında gösterecektir. Benim insert xml aşağıdaki gibidir. Bu xml'yi bi yere kaydedelim. Ve eski projeye geri dönelim. Burda hiç bişey silinmemişti.

<ns0:Insert xmlns:ns0="http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON">
 <ns0:RECORDSET>
  <ns0:PERSONRECORDINSERT>
   <ns0:RECID InlineValue="InlineValue_0">RECID_0</ns0:RECID>
   <ns0:NAME InlineValue="InlineValue_0">NAME_0</ns0:NAME>
   <ns0:CREATEDATE InlineValue="InlineValue_0">1999-05-31T13:20:00.000-05:00</ns0:CREATEDATE>
   <ns0:TYPE InlineValue="InlineValue_0">TYPE_0</ns0:TYPE>
  </ns0:PERSONRECORDINSERT>
 <ns0:COLUMN_NAMES>COLUMN_NAMES_0</ns0:COLUMN_NAMES>
 <ns0:QUERY>QUERY_0</ns0:QUERY>
</ns0:Insert>
Şimdi bu aşamada projemizi biraz geliştiriyoruz. Select işleminde dışarıdan select formatlı bir xml gelmişti ve işleme sokulmuştu, fakat insert formatlı bir xml yollarsak hata verecektir, çünkü PortRcv'a Select xml' tipi mesaj alacağını söylemiştik. Yapacağımız işem şu. Dışarıdan System.Xml.XmlDocument formatlı herhangi bir

xml gelsin, bunun tipine bakalım. Select ise select işlemine, Insert ise Insert işlemine değilse işlem terminate etsin. Bu aşamada Decide Shape'ini kullanacağız, tip kontrolü burada olacak. Tip kontrolüne göre uygun yola devam eden PortRcv'den gelen System.Xml.XmlDocument tipli mesaj ConstructMessage Shape'de uygun mesaja çevrilecek, oracle'a yollanacak ve oracle'dan dönen mesaj da System.Xml.XmlDocument tipli MsgSnd'e atanacak. Bu şekilde System.Xml.XmlDocument tipli mesaj gelmiş ve System.Xml.XmlDocument tipli mesaj çıkmış olacak.

Aşağıdaki resime uygun orchestration'u düzenleyelim. Orchestration View bölümünde mesajların altıya çıktığını görebiliriz, MsgRcv ve MsgSnd mesajları System.Xml.XmlDocument tiplerinde, MsgInsertReq ve MsgInsertRes mesajları sırasıyla BizTalkTest1.TBL_PERSON.Insert ve BizTalkTest1.TBL_PERSON.InsertResponse tiplerinde. Siz projenizde uygun isimdekileri almalısınız.






Projede kullanılan kodlamaları gösterelim.

OraSelect Decide:
MsgRcv(BTS.MessageType) == "http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON#Select"

OraInsert Decide :
MsgRcv(BTS.MessageType) == "http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON#Insert"

OraUpdate Decide :
MsgRcv(BTS.MessageType) == "http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON#Update"

ConstructMessage_1
MsgSelecetReq = MsgRcv;

ConstructMessage_2
MsgInsertReq = MsgRcv;

ConstructMessage_3
MsgSnd = MsgSelecetRes;

ConstructMessage_4
MsgSnd = MsgInsertRes;

ConstructMessage_5
MsgSnd = MsgRcv;

Expression_1
System.Diagnostics.EventLog.WriteEntry("BizTalktest1", "unknown xml");

Terminate_1
"terminated";

BizTalk Server Administration'da projemizi full stop ediyor ve Visual Studio'da projeyi deploy ediyoruz. BizTalk Server Administration'da projemizde sadece 1 yerde değişiklik yapıcaz. Select işleminde oluşturduğumuz Send Ports'daki PortOracleSelect portunun ismini PortOracle yapalım. Çünkü bu porttan oracle'daki tüm işlemlerimizi halledebiliriz, isminin global olması daha okunur olur. ve bu prottan insert işleminin de yapılmasını sağlayacağız.

Yeni SOAP Action bu şekilde olacak


<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" />
  <Operation Name="OpInsert" Action="http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON/Insert" />
</BtsActionMapping>







Bu haliyle portları enable yapıyoruz ve projeyi start ediyoruz. Ardından Platform Setting altında olan Host Instances'de BiztalkServerApplication'u restart edelim.

Şimdi IN klasöre daha önce daha önceki makalede olduğu gibi select xml'sini atıyoruz. OUT klasörüne sonucu gelmesi gerek. Insert Xml'inin işlemi ise aşadağaki şekilde

IN :

<ns0:Insert xmlns:ns0="http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON">
 <ns0:RECORDSET>
  <ns0:PERSONRECORDINSERT>
   <ns0:RECID>4</ns0:RECID>
   <ns0:NAME>GURHAN</ns0:NAME>
   <ns0:CREATEDATE InlineValue="SYSDATE"></ns0:CREATEDATE>
   <ns0:TYPE>C</ns0:TYPE>
  </ns0:PERSONRECORDINSERT>
 </ns0:RECORDSET>
</ns0:Insert>
OUT:

<?xml version="1.0" encoding="utf-8"?>
<InsertResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/ACTPRD/Table/PERSON">
 <InsertResult>1</InsertResult>
</InsertResponse>

Hiç yorum yok:

Yorum Gönder