Logo Unity API (Lobject.dll)

Gönderen Konu: Logo Unity API (Lobject.dll)  (Okunma sayısı 6391 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı c1982

  • Yeni Kullanıcı
  • *
  • Karma: 1
Logo Unity API (Lobject.dll)
« : 24.01.2010, 05:31 »
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 burda 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.Error, err.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.Error, err.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, yasak, 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.
    * Döküman isteyin. Logo Object Kütüphane Referans Kitabı diye bir döküman var genelde çözüm ortaklarıda var ama bazısı bu döküman için para isteyebilir. Bu dökümanda işinize yarar açıklamalar bulaiblirsiniz ama kod örnekleri ve işin teknik tarafı pek bulunmuyor.

Kaynak : http://www.oguzhan.info/bak.asp?506/Logo+Unity+API+%28Lobject.dll%29

Çevrimdışı alkn17

  • Yeni Kullanıcı
  • *
  • Karma: 0
Ynt: Logo Unity API (Lobject.dll)
« Yanıtla #1 : 19.04.2011, 12:00 »
Merhaba,

Ben de benzer kodlari kullaniyorum. Unity App. baglantisi sagliyorum,sonrasinda user login de saglaniyor fakat company login de timeout aliyorum. Bir fikriniz var mi acaba bu konuda hata ne olabilir?