En son geliştirdiğim CMS projesinde web üzerinden gerçekleşen olayların
(sipariş, kredi kartı işlemi, yeni kullanıcı gibi) Logo programına
aktarılması özelliğini eklerken Logo ile tanıştım.
Gayet güzel, belirli disiplinlere göre yazılmış bir ERP programı Logo.
Logo’da ki belirli modüllere nasıl verileri aktarırız diye düşünürken Logo’nun COM+ olarak dağıtılan API’sinin olduğunu keşfettik ve projemize logo entegrasyonunu
bu API ile gerçekleştirmeye karar verik. Gerçi başka şansımızda yoktu hani ;)
API’yi kullanmaya karar verdikten
sonra yaşadığımız ilk sıkıntı döküman ve kullanım ile ilgili çeşitli
örneklerin çok kısıtlı olması oldu. Bu duruma hayret ederken meğerse
işin görünmeyen kısımlarınında var olduğunu öğrendik. Logo bu API’yi
sadece çözüm ortaklarına veriyormuş ve çözüm ortağı olabilmek içinde
Logo tarafından verilen API eğitimini alıp, eğitim sonunda yapılacak
sınavdan’da en az 70 (Kesin bir bilgi değil bir çözüm ortağından
duydum.) almanız gerekiyormuş. Daha sonra bu API’yi kullanmaya hak
kazanıyormuşuz.
Birde işin Lisanslama tarafı var. Logo paketine API’nin kullanılması için ek bir lisans alınması gerekiyormuş. Ayrıca bu API’yi kullanarak bir yazılım geliştiriyorsan birde Geliştirme Lisansı alıyormuşsun (sanırım 500$ civarındaydı) ve sonra yasal olarak bu API’yi kullanabiliyorsun.
Başka bir enteresan nokta ise Logo API sadece logo’nun çalıştığı makina üzerinde iş görüyor ve logo’ya bağlantı sağlıyor. Başka bir sunucu üzerinde çalıştıramıyorsunuz. Biz tasarlarken internet üzerindeki ki sunucumuzda bu api’yi kullanıp uzaktaki logo’ya api ile bağlanıp kullanırız diye düşünmüştük ama olmadı.. (Gerçi teknik olarak
başka bir makina üzerinde ‘de çalıştırabiliyorsun gerekli düzenlemeleri
yaptıktan sonra ama biraz illegal oluyor.)
API son derece başarılı ve kullanımı kolay (Yazının ilerleyen kısımlarıda bir kaç
örnek değineceğim) bir Nesne olarak tasarlanmış ve full xml desteği
var, ayrıca veritabanından bağımsız olarak çalışıyor ve API’deki
gerekli nesneleri kullanırsanız sizin yazdığınız programınızda
veritabanı bağımsız çalışmış oluyor.
Benim burada dikkatimi çeken ve hoşuma gitmeyen şey ise Çözüm Ortaklarının (Tabi hepsi değil benim karşılaştıklarım) bu API’ye bir öcü gibi bakması ve herhangi bir API
yardımında işi abartıp faiş fiyatlar istemesiydi. Kim’den yardım
istesek ya yanlış yönlendirildik ya da yardımcı olmak istemediler.
Sonuc olarak Logo API’si programcıya teknik açıdan her işinizi görebileceğiniz bir
programlama arayüzü sunuyor fakat kullanabilmeniz için bir sürü
brokratik işlerle uğraşmanız gerekiyor.
Şimdi gelelim örneklere. Logo’ya bağlanmak, yeni cari açmak için örnek vereceğim.
Projemize COM tabındaki UnityObjects Library referansını ekleyelim.
COM tabında UnityObject’i göremediyseniz büyük ihtimal sisteme register edilmemiştir.
Logo’nun çalışma klasörü içindeki Lobject.dll’i bulup Regsvr32 komutu ile register etmelisiniz (Başlat > Çalıştır > Regsvr32 lobject.dll)
Logo API ile Logo’ya Bağlantı:
UnityApplication giris = new UnityApplication(); if (giris.Connect()) { if (giris.UserLogin("kullanici", "sifre")) { if (giris.CompanyLogin(1)) //Logo şirket numarası { //Logoya bağlanıldı giris.CompanyLogout(); } giris.UserLogout(); } giris.Disconnect(); }
Logo API ile Yeni Cari Kartı:
Data ek = unity.NewDataObject(DataObjectType.doAccountsRP); ek.New(); ek.DataFields.FieldByName("ACCOUNT_TYPE").Value = 3; ek.DataFields.FieldByName("CODE").Value = "Firma Kodu"; ek.DataFields.FieldByName("TITLE").Value = "Firma Adı"; ek.DataFields.FieldByName("ADDRESS1").Value = "Adres 1"; ek.DataFields.FieldByName("ADDRESS2").Value = "Adres 2"; ek.DataFields.FieldByName("DISTRICT").Value = "Mahalle"; ek.DataFields.FieldByName("TOWN").Value = "İlçe"; ek.DataFields.FieldByName("CITY").Value = "Şehir"; ek.DataFields.FieldByName("COUNTRY").Value = "Ülke"; ek.DataFields.FieldByName("POSTAL_CODE").Value = "Posta Kodu"; ek.DataFields.FieldByName("TELEPHONE1").Value = "Telefon 1"; ek.DataFields.FieldByName("TELEPHONE2").Value = "Telefon 2"; ek.DataFields.FieldByName("FAX").Value = "Fax"; ek.DataFields.FieldByName("TAX_ID").Value = "Vergi No"; ek.DataFields.FieldByName("TAX_OFFICE").Value = "Vergi Dairesi"; ek.DataFields.FieldByName("TAX_OFFICE_CODE").Value = "Veri Dairesi Kodu"; ek.DataFields.FieldByName("CONTACT").Value = "İsim Soyisim"; ek.DataFields.FieldByName("E_MAIL").Value = "E- Posta"; ek.DataFields.FieldByName("WEB_URL").Value = "www web sitesi"; ek.DataFields.FieldByName("GL_CODE").Value = "Muhasebe Numarası"; ek.DataFields.FieldByName("SUBSCRIBER_EXT").Value = "Ekstra bilgi"; ek.DataFields.FieldByName("LOGOID").Value = "Firma Kodu"; ValidateErrors err = ek.ValidateErrors; if (ek.Post()) { Console.WriteLine("{0} firması eklendi.", "Firma Adı"); } else { Console.WriteLine("{0} firması eklenemedi.", "Firma Adı"); for (int i = 0; i < err.Count; i++) { Console.WriteLine("{0} - {1};", err[i].Error, err[i].ID); } }
Logo API ile Sipariş Girişi:
Data siparis = unity.NewDataObject(DataObjectType.doSalesOrderSlip); siparis.New(); siparis.DataFields.FieldByName("NUMBER").Value = "Sipariş No"; siparis.DataFields.FieldByName("DATE").Value = "Tarih"; siparis.DataFields.FieldByName("TIME").Value = "Zaman"; siparis.DataFields.FieldByName("ARP_CODE").Value = "Firma Kodu"; siparis.DataFields.FieldByName("TOTAL_NET").Value = "Toplam Tutar"; siparis.DataFields.FieldByName("SALESMAN_CODE").Value = "Satıcı Kodu"; siparis.DataFields.FieldByName("NOTES1").Value = "Not 1"; siparis.DataFields.FieldByName("NOTES2").Value = "Not 2"; siparis.DataFields.FieldByName("NOTES3").Value = "Not 3"; siparis.DataFields.FieldByName("NOTES4").Value = "Not 4"; siparis.DataFields.FieldByName("ORDER_STATUS").Value = 4; //ÖDeme siparis.DataFields.FieldByName("WITH_PAYMENT").Value = 1 ; //ÖDeme Lines detay = siparis.DataFields.FieldByName("TRANSACTIONS").Lines; if (detay.AppendLine()) { detay[0].FieldByName("TYPE").Value = 4; // Hizmet detay[0].FieldByName("MASTER_CODE").Value = "Ürün Kodu"; detay[0].FieldByName("QUANTITY").Value = "Sayıs"; detay[0].FieldByName("PRICE").Value = "Tutar"; detay[0].FieldByName("TOTAL").Value = "Toplam Tutar"; detay[0].FieldByName("UNIT_CODE").Value = "Adet"; detay[0].FieldByName("PC_PRICE").Value = "Tutar"; detay[0].FieldByName("TOTAL_NET").Value = "Toplam Tutar"; detay[0].FieldByName("VAT_RATE").Value = "KDV"; detay[0].FieldByName("VAT_INCLUDED").Value = 1; //KDV Dahil } siparis.DataFields.FieldByName("ITEXT").Value = "Ekstra bilgi alanı"; ValidateErrors err = siparis.ValidateErrors; if (siparis.Post()) { Console.WriteLine("Sipariş Eklendi"); } else { Console.WriteLine("Sipariş Eklenemedi"); for (int i = 0; i < err.Count; i++) { Console.WriteLine("{0} - {1};", err[i].Error, err[i].ID); } }
Bir Kaç Tavsiye
- Nesnelere ulaşırken kesinlikle FieldByName metodunu kullanın bu size veritabanından bağımsızlık sağlar. (FieldByName metodu XML isimlerinden veritabanına ilişki kurar)
- FieldByName(“TRANSACTIONS”).Lines mantığını kavrayın. Tablo bağlantıları bu nesne üzerinden dönüyor.
- INSERT,
UPDATE, DELETe, SELECT işlemlerinde SQLClause nesnesini kullanın bu
size veritabanından bağımsızlık ve veritabanını bozmamanızı sağlar. (Biraz iş yükü getirir ama!) - Field isimlerini öğrenmek için XML şablonlarına başvurun. XML şablonlarını Logo programındaki Araçlar > Veri Aktarımı (dışarı) menüsünden öğrenebilirsiniz.
- Doküman isteyin. Logo Object Kütüphane Referans Kitabı diye bir doküman var genelde çözüm ortakları da var ama bazısı bu doküman için para isteyebilir. Bu dokümanda işinize yarar açıklamalar bulabilirsiniz ama kod örnekleri ve işin teknik tarafı pek bulunmuyor.
merhabalar.
acaba bu konu ile ilgili birkaç örnek daha paylaşır mısınız? örneğin benim fatura aktarımına ihtiyacım var ancak elimde herhangi bir dökümantasyon olmadığından bu zor oluyor. aslında XML verilerini de inceledim ancak hangi alanlar gerekli hangileri gereksiz hangi alanlar başka tablolar ile ilişkili bunu kestiremedim. yardımlarınızı rica ediyorum.
Selam Lobject.dll kullanımı ile ilgili yardımcı olabilir misiniz.
.net yeni öğrenmeye başladım
[email protected]
Teşekkürler.
merhaba ;
şimdiden vereceğiniz bilgilerden dolayı teşekkür ederim.
biz logo üzerinde c# ile sipariş yazdırmaya çalışıyoruz.
sipariş kaydı sırasında banka ve kredi kartı kaydı yapmamız gerekiyor.
bize banka kaydı ve kredi kartı kaydı ile object örneği lazım.
yardımcı olursanız sevinirim.
Merhaba,
Öncelikle bilgiler için çok teşekkür. Sizin yaşadıklarınızı yaşıyorum şuan :)
LOBJECTS.dll son güncel halini nereden bulabilirim.
Merhaba, verdiginiz bilgiler icin tesekkur ederim.
ozer arkadisiminiz sordugu soruya cevap verecek misiniz.
yardimci olabilir misiniz bana.
oğzuhan bey merhaba kişisel bilgimi paylaşmısım lütfen silebilir misiniz yorumu.
Oguzhan Bey merhaba,
Logo için belirtilen tüm işlemleri yaptım. Login işlemleri başarılı olmasına rağmen .SQLClause işlemlerini kullanarak veri çekmiyorum. unity.OpenDirect() dediğimde sürekli false dönüyor. Konuyla ilgili yardımcı olabilir misiniz ?
Bir önceki soruma istinaden yazıyorum,
Veri çekmeye çalıştığım tablo LG_099_ITEMS ve hata mesajı olarak geçersiz nesne adı diyor. Ama tablo mevcut.
arkadaşlar veri çekerken veri tabanından direk select sorgusu kullanabilirsiniz update içinde normal sadece kayıt eklerken lobject dll kullanmanız zorunludur.
Merhaba;
Logo’ya senet girmek için bu dll kullanılabilir mi? kullanılırsa DataObjectType.’den sonra hangisini kullanmam gerekir?
Teşekkürler.
merhaba ilhan sorunun cevabını buldun mu?
ayrıca bana nakit- kredi kart-çek-senet için gerekli olan DataObjectType bilgiside lazım yardımcı olurmusun
buldum ama çok zaman geçmiş hocam. yardım hala lazımsa mail adresi bırak
İyi Günler İlhan Bey
nakit- kredi kart-çek-senet için gerekli olan DataObjectType leri nelerdir acaba şimdiden teşekkürler
ilhan bey bu senet olayını cozdunuzmu
Dostum sene her yer de rastlamak ne güzel :)
Selamlar, oguzhan bey güncel hali varsa benimlede paylasırsanız cok sevinirim
[email protected]
Merhaba, bu dll ile başka sunucudan veritabanına nasıl bağlanılıyor? Mümkün yazmışsınız da :)
Merhaba Bir Sorun ile karşılaştım İade Sipariş faturasına indirim satırı eklediğimde – Bağlantılı malzeme hareketi bulunamadı (iade/fiyat farkı) – hatayı veriyor sizce neden satış ta çalışıyor aynı kodlar iadede çalışmıyor harici bi kaç bilgi dahamı göndermek gerekli ?
Sorunuzun cevabını bulmuşmuydunuz ?
Aynı problemle uğraşıyorum. ama ne yazık halen çözmüş değilim.
Biz bu problemi iade faturası satırlarındaki RET_COST_TYPE parametresini hizmet türü için 4 e eşitleyerek çözdük. Sanırım indirim için 2, malzeme satırı için 0 olmalı değer. Belki birilerine gerekir.
Merhabalar
c# ta bir Banka Fişi (Gelen Havale kaydetmeye çalışıyorum). Nasıl yapabilirim yardım olabilecek bir arkadaşımız var mı?
Şimdiden teşekkürler
[email protected]
allah razı olsun gardaş:) ne diim..
Önceden girilmiş satış siparişne yeni bir satırı nasıl ekleyebiliriz?
hocam merhabalar
logoTigerPlus la uğraşıyorum wep üzerinde sipariş-kredi katı-nakit girme gibi işlemleri yapmak istiyorum bu konuda yardımcı olursanız sevinirim. birde object.dll dokokuanı var mı? varsa paylaşırsanız sevinirim
Selam, Ben 004 şirketindeki ServiceCard ları 006 şirketine Id leriyle birlikte kaydetmek istiyorum. Normal SQL de set Identity_Insert ON gibi ancak bunu Lobject üzerinden yapabilmem mümkün mü?
Merhaba,
Delphi ile object.dll kullanımı hkkında örneğiniz var mı?
Benim soruşturduğum bir konu cevabını buraya da yazayım . Fiş numaralandırma şablonunu logo tarafından kontrolünü sağlaması için numara şablonuna ~ işareti koyulması gerekiyor . Yani fiş eklemelerinde vereceğimiz bir numara sistemde var mı yok mu kontrolü kendimiz yapmamız çok zor .. aşağıda ki kod ile aktarım yapıldığında logo içinde ki fiş numara şablonunu kullanmakta.
irsaliye.DataFields.FieldByName(“NUMBER”).Value = “~”;
Bunun dışında yine benim takıldığım ve nette araştırarak bulduğum bir çözümü paylaşayım . Fişlerde 2.3 satır eklemenin nasıl olduğunu bulamamıştım o da şöyle ;
detay.AppendLine()
detay[0].FieldByName(“TYPE”).Value = 0; // Hizmet
detay[0].FieldByName(“MASTER_CODE”).Value = “PARFUM200ML”;
detay[0].FieldByName(“UNIT_CODE”).Value = “ADET”;
detay[0].FieldByName(“QUANTITY”).Value = “2”;
detay[0].FieldByName(“PRICE”).Value = “23”;
detay.AppendLine();
detay[1].FieldByName(“TYPE”).Value = 0; // Hizmet
detay[1].FieldByName(“MASTER_CODE”).Value = “PARFUM200ML”;
detay[1].FieldByName(“UNIT_CODE”).Value = “ADET”;
detay[1].FieldByName(“QUANTITY”).Value = “3”;
detay[1].FieldByName(“PRICE”).Value = “23”;
—————–
Appendline ile yeni bir satır açıp detay[verilecek numara index numarası olarak takip ediliyor] ile devam etmekte..
Hocam ,Delphi ile aktarım sağlıyorum,aktarım sırasında bazen doğru firmaya aktarıyor bazende bu irsaliye faturalandırılmıştır diye diğer firmadan kontrol ediyor ve yazmıyor. neden olabilir
Kardeş bende delphi yapmaya çalışıyorum kütüphaneyi nasıl ekledin bilgi verebilir misin ?
Merhaba
https://docs.logo.com.tr/pages/viewpage.action?pageId=2850944 adresinden logo tiger uyarlama araçları hakkında yararlı bilgilere ulaşabilirsiniz.
iyi günler.
Merhabalar,
projeye com’dan lobject ekliyorum, visual studio da çalışıyor sorun ama iis servera attığımda zaman access denied hatası alıyorum.
İnternetten bulduğum kadarıyla dcomcnfg den yetki ayarlarını kontrol edin diyorlar ama dcomcnfg de object kaydını veya hata veren uzun id si ile bulamıyorum maalesef. Defalarda regester edip serverı başlattım ama başaramadım bir türlü.
IIS her zaman COM nesneleri için bir dert. Yetki işlemleri baş ağrıtıcı. IIS ve işletim sistemi güvenlik güncellemelerinden de etkileniyor. Tekrar tekrar aynı yetkilendirmeler üzerinden geçmeniz gerekebiliyor. Sizin probleminizin çözümü şu forum konusunda olabilir;
http://forum.logo.com.tr/index.php?page=details&konu={72db412a-6bf5-4920-a002-2aac679951df}-clsid-hatasi
Ben, yeni bir web projesine başlayacağınız zaman Logo’nun REST Servisini öneririm.
http://docs.logo.com.tr/public/wua/logo-objects-rest-servis
Lisanslama mantığı ve her adıma para yaklaşımı, “Api” mantığına çok ters değil mi ayrıca Api derken öyle harika bir OOP Apide değil; Sql sorgusu gibi bir yaklaşım!
Ayıp etmişler.
Merhaba,
LOBJECT dll i ile fatura kaydetmeye çalışıyorum, dll’e login olabiliyorum ama UnityObjects.IData.New(); dediğim zaman accessviolation deyip programı kapatıyor.
Logo versiyonu : Logo tiger plus
Yardımlarınızı bekliyorum.
Siparis := LogoBaglantisi.NewDataObject(doSalesOrderSlip);
Siparis.New;
bende de aynı hata siparis.new; kısmında access violation ‘ntdll.dll’ hatası veriyor.
Yardım edecek yok mu lütfen?
Merhabalar. Logo Lobject ile toplu veri girişi yapıyorum. fakat işlemler çok uzun sürüyor. mesela 100 adet veri eklediğimde 2 dk da ekleme yapıyor. bunun sebebi nedir
merhabalar;
Logo Go Plus programı için;
VB6 iel mevcutta kullandığımız yazılımımız üzerinden kasaları logo go plusa LOBJECT aracılığıyla kullanmak ve kasaları işlemek mümkünmü ? ben sadece tiger dan yapılıyor ve go 3 den yapılabiliyor diye duydum fakat go plus için olurmu olmazmı hiçbir fikrim yok.
Merhaba,
Fatura girişi yaparken. Satır bazlı projekodu aktarmak istiyorum. Malzeme kalemlerinde fatura projekodu seçilmeden satıra ekleme yapılmıyor.Lobject ile fatura için projekodu girdiğimde satıraları aynısını yazıyor satırı farklı giremiyorum. Aynı logo xml manuel içeri aktarım yaptığımız da sıkıntı olmuyor.Lobject ile aktardığımda yukardaki sorun var. Hizmet kalemlerinde bir sıkıntı yok ama.
Acaba lobject dll mi bi ayar yapılarak mı aktarmak lazım?
Cevap yazarsanız sevinirim.
Merhabalar
Yazmış olduğumuz logo object projesinin iss te çalışması için nasıl bir ayar yapmamız gerekiyor. konu ile ilgili yardımcı olurmusunuz ?
Oğuzhan Yılmaz merhaba,
Paylaştığınız bilgiler için teşekkürler.
Merhaba, çok yıllar geçmiş ama banada kredi kartı, nakit ödeme ve muhasebe kaydının açılmasıyla ilgili örnek lazım, sipariş ve cari kaydını yapıyorum ama ilk belirttiklerimi halen yapamadım.
Basit bir örnek banada gönderirseniz çok sevinirim.
[email protected]