18 Mart 2009 Çarşamba
30 Haziran 2008 Pazartesi
B2B .NET
İlk yazımda .Net platformunda SAP, Netsis Logo gibi ERP yazılımları ile yapılan entegrasyon tecrübelerimi sizlerle paylaşmaya çalışacağım.Temelde yazılım mimarilerinde kullandığımız yöntemleri ve gerçek hayat projelerinde yaşanan ortak sorunlara, sizlerinde yaklaşımları ile reel çözümler oluşturmayı hedefliyoruz.
İstemci/sunucu uygulamalardan sunucu tabanlı intranet ve internet uyglamalarına kadar bir çok platformda veri alışverişinin kaçınılmaz bir gereksinim olduğunu biliyoruz.Burada bahsedilen hiçbir yöntem alternatifsiz olmadığı gibi değişime açık olduğu kabul edilmelidir.
Genellikle ticari faaliyet yürüten kurumlar ürün yada hizmet ekseninde hareket ettikleri için stok,malzeme,hizmet,ürün ana kayıtları sistemler arasında vazgeçilmez olarak transfer edilen bilgilerdir.
Sektörel ya da ticari faaliyet penetrasyonuna paralel olarak bu ana kayıtların, her iki yönlü olarakda içeri yada dışarı aktarımı söz konusu olabilmektedir.
Stok ana kayıtlarının yanı sıra, cari ana kayıtları , guruplama bilgileri,risk bilgileri ve doküman tabanlı fatura ,sipariş bilgileri,ödeme hareket kayıtları, vs.. gibi verilerin transferi söz konusu olabilmektedir.
Genellikle ERP sistemleri veri alışverişlerinin standardize edilmesi ve sürüm bağımsız hale dönüştürülebilmesi için belirli araçlar sunmaktadır.Örneğin Logo için LogoObjects.dll ,Netsisde Netopenx , SAP de ise SAP.NET Connector gibi araçlar yaygın olarak kullanılmaktadır.
Bu araçların kullanım detayları ile ilgili olarak kod örnekleri internet üzerinde mevcuttur.
Birkaç basit örnek gösterilmesi gerekir ise;
- LOGO
· Malzeme bilgilerine erişim
Dim Query As Variant
Dim RES As Boolean
Dim QueryString As String
Dim QueryFields1 As Variant
Dim QueryFields2 As Variant
Dim QueryFields3 As Variant
Set Query = UnityApp.NewQuery
QueryString = "SELECT * FROM LG_001_ITEMS WHERE CARDTYPE <> 22 ORDER BY CODE"
Query.Statement = QueryString
If Query.OpenDirect Then
RES = Query.First
Do While RES
QueryFields1 = Query.QueryFields.Item(0).Value
QueryFields2 = Query.QueryFields.Item(1).Value
QueryFields3 = Query.QueryFields.Item(2).Value
RES = Query.Next
Loop
Else
MsgBox "Error occured. Error Nr : " & CStr(Query.Error)
End If
Query.Close
Query = Empty
- NETSIS
Sub StokOku()
Dim Kernel As New NetOpenX.Kernel
Dim Sirket As NetOpenX.Sirket
Dim Stok As NetOpenX.Stok
Dim StokTemel As NetOpenX.StokTemelBilgi
Dim StokEk As NetOpenX.StokEkBilgi
Set Sirket = Kernel.yeniSirket(vtOracle, "YAZ30", "FUSION30", "", "NETSIS", "", 32767)
Set Stok = Kernel.yeniStok(Sirket)
Set StokTemel = Stok.TemelBilgi
Set StokEk = Stok.EkBilgi
If Stok.kayitOku(otAc, " stsabit.STOK_KODU LIKE 'de%'") Then
'MsgBox "kayit açıldı"
Stok.kayitOku (otIlk)
'MsgBox Stok.TemelBilgi.Stok_Kodu & " --- " &Stok.TemelBilgi.Stok_Adi & "--" & Stok.TemelBilgi.Satis_Fiat1 & "--" & Stok.EkBilgi.Stok_Kodu & "--" & Stok.EkBilgi.Birim_Maliyet
Stok.kayitOku (otSonraki)
End If
Set Sirket = Nothing
Set Stok = Nothing
Set StokTemel = Nothing
Set StokEk = Nothing
Call Kernel.FreeNetsisLibrary
Set Kernel = Nothing
End Sub
- SAP
SAP üzerinde ise durum biraz farklıdır.Öncelikle SAP sistemine erişmek için SAP.Net Connector ile SAPProxy geçidi yaratmalısınız.Sap üzerinde public ifade edilmiş metodlar yaratabilir ve proxy ile bu metodlara erişim sağlayabilirsiniz.ABAP kodları ile Dataset sınıfını genişleten özel nesnelerinizi okuyabilir yada istemciye döndürebilirsiniz.
İlk iki ERP sisteminde kodlardan da görülebileceği üzere dll referansı ile metodlara erişim sağlayabilir, okuma ve yazma kodlarınızı çalıştırabilirsiniz.Her üç ERP de sistem kullanıcıları ile yetki kontrolü yaparak işlemler gerçekleştirilir.
Teorik olarak her sistemden veri okunması basit bir uygulama olarak görünse de gerçekde o kadar kolay olmayabilir.Bunun nedenleri ise;
- Erişim araçlarının yoğun istek-cevap performansı sağlamalarında yaşanan güçlükler,
- Ağ trafiğinin artışı
- Dağıtık veri tabanları üzerindeki veri tutarlılığının sağlanamaması
olarak karşımıza çıkar.
Bir örnek ile açıklamak gerekir ise stok kartında çok sık eklenti yada değişklik yapıldığı düşünelim.Bu değişklik fiyat yada stok koşulları ile ilgili olabilir.Bu durumda ERP den bu bilgileri download etmesi gereken istemci sistem sürekli veri değişikliğini denetlemek durumundadır.Eklem yapılan stok kartı var mı? Güncelleme va mı yada silinmiş kayıt varmı? Sağlıklı senkronizasyonun sağlanması, her sistemin verilerinin minimum zaman gecikmesi ile doğru olarak aktarılmasını gerektirir.
Alternatif olarak MSSQL için DTS mekanizması düşünülebilir.Ancak aktarım yapılan tablo sahalarında yapılan her değişiklikde DTS paketinin yeniden derlenmesi gerekecektir.DTS sisteminin artı yanı ise veritabanı düzeyinde veri transferi gerçekleştirdiği için çok kayıtlı aktarımların daha performanslı olmasını ve MSDTC sayesinde veri tutarlılığının korunmasını sağlayacaktır.
Yapılan projeler ışığında, veri aktarımlarının ERP den istemci siteme doğru gerçekleştiği durumlarda , DTS paketlerinin ya da TSQL tabanlı seçeneklerin tercih edilmesi performans açısından çok daha verimli olduğu görülmüştür.
ERP ve istemci sistem açısından aktarılan verilerin bazıları değişime yada dönüşüme uğraması gerekecektir.Örneğin sipariş bilgilerinde sipariş tipi,alıcı yada satıcı siparişi olarak farklı nümerik tiplerde tutulabilir.Aktarım sisteminde ise tamamen farklı bir kod ile ifade edilebilir.Bu durumda veri aktarımı sırasında bu çevrim bilgilerinin taşıyan bir dönüşüm tablosu açılmalıdır.Böylece yapılan entegrasyon DTS paketi farklı projelerde değişikliğe uğramadan ya da minimum değişiklikle kullanılabilir.
Veri aktarımı sırasında yapılan her aktarımın loglanması hata ya da problrm takibi açısından oldukça faydalı olmakla beraber, veritabanı büyüklüğünü arttırması açısından bir olumsuzluk olarak karşımıza çıkar.Bu konuda loglamayı sistem event loglarında yapmak daha sağlıklı bir metod oluşturabilir.Ayrıca bu log kalyıtları sistem akışını izlememize de olanak sağlayacaktır.