HighCode B2C Project

by Suat TUNCER 12. December 2009 11:35

Merhabalar,

HighCode B2C Projesinin startını vermiş bulunmaktayız. Proje ilk haliyle standart bir e-ticaret portalı ve yönetim arayüzünden oluşmaktadır. Öne çıkan yeteneklerini sıralamak gerekirse;

  • Ürün Yönetimi (Kategori, özellik, stok durumu, alış-satış fiyatları vergi oranları vs..)
  • Kullanıcılar ürünler hakkında yorumlar ve değerlendirmelerde bulunabilir. Tüm bu yorumlar yönetim panelinden yönetilebilir.
  • Üye/Kullanıcı Yönetimi.
  • Üye listeleri oluşturabilme. (Fiyat alarm listesi, stok alarm listesi,alış veriş listesi)
  • Sipariş Yönetimi. Yönetim panelenden, siparişleri durumu anlık olarak takip edilebilir, düzenlenebilir ve iptal edilebilir.
  • Kargo Yönetimi.
  • Marka Yönetimi.
  • Vitrin Düzenleme. Anasayfa, kategori sayfaları, gelecek ürünler, özel ürünler ye gelen ürünler için vitrin ürünleri seçebilme.
  • İndirim Tanımlama. Belirli tarih aralıkları için, yüzde, indirim tutarı veya indirimli fiyat biçiminde indirim tanımlayabilme.
  • Reklam Yönetimi. Kategoriye özgü reklam tanımlayabilme.
  • Sanal POS Yönetimi. Kullanılan her banka için ödeme noktası tanımlayabilme. Bir banka için birden fazla ödeme noktası tanımlayabilme.
  • Taksit/Peşin fiyatına taksit, sınırsız taksti ve vade oranları tanımlayabilme.
  • Banka ve Banka Hesapları Yönetimi
  • Çoklu para birimi desteği.Otomatik doviz kuru güncelleme.
  • Kategoriye göre, çok satan ürünler,
  • Kategoriye göre,en çok ziyaret edilen ürünler
  • Rastgele ürün gösterme.
  • Mini sepet.
  • Tema Desteği
  • Sayfa üzerinde görünen tüm panellerin yönetimi.
  • Panel yerleşim yerlerini, görünür görünmez durumlarını düzenleyebilme.

 HighCode B2C projesinde kullanılan teknolojiler ve öne çıkan özellikleri şunlardır ;

  • Projesinin geliştirilmesinde 3rd Party hiç bir tool kullanılmamıştır. Kullanılan tüm araçlar HighCode geliştrme araçlarıdır.
  • Microsoft .Net Framwork 3.5 ile kodlanmıştır.
  • WEB Teknolojisi olarak Asp.Net ve AJAX tercih edilmiştir.
  • Veritabanı bağımsız çalışmaktadır. İstenilen veritabanı üzernde çalıştırılabilmektedir. (Varsayılan Microsoft SQL Server 2005'dir) 
  • HighCode Framework V2.0 kullanılmıştır.
  • HighCode Oobo O/RM Framework V2.0 kullanılmıştır.
  • HighCode Web Control Library 1.0 kütüphanesinde yer alan ve tamamen performans için tasarlanmış görsel araçlar kullanılmıştır.

Bu haliyle HighCode B2C yeni güncellemelerle birlikte farklı ERP yazılımlarının entegrasyonuna da olanak verecektir.

canlı demo için http://store.highcode.org adresini ziyaret edebilrisiniz.


Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , , , ,

HighCode

İstanbul için iftar vakti

by Suat TUNCER 24. August 2009 09:17

 

İstanbul Bayrampaşa viyadüğü ve yolda parmakla sayılacak kadar az araç var. istanbulda böyle bir manzara görmek yılda bir kaç defa nasip olur. bu zamanlardan en şaşmazı da iftar vakti olsa gerek. Saat 19:55 iftara 5 dakika kala İstanbul'da trafikten eser yoktur ve Şişli-Bağcılar arası sadece 10 dakika sürmüştür.

 

 

Herkese hayırlı iftarlar :-).

 

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

General

Generic IsDBNull Function

by Suat TUNCER 11. August 2009 16:42

Geçenlerde bir öğrencimden mail aldım, mailde bir konudan yakınıyordu, diyordu ki;

"Merhaba Hocam,

Küçük bir projeye başladım ve bu projede ORM araçlarını kullanmak yerine ADO.Net ile yazmak istedim fakat DataReader ile veri okurken verinin null olup olmadığını kontrol etmekten uygun tiplere dönüştürmekten sıkıldım bu işin pratik bir yolu var mıdır?"


.Net ile heleki C# ile uygulama geliştiriyorsanız, mutlaka her şeyin bir pratik yolu vardır, şöyleki;

static bir sınıf içerisine aşağıdaki gibi bir methodu ekleyin.

        public T ReadField<T>(OracleDataReader reader, string columnName) {
            object value = reader[columnName];
            Type targetType = typeof(T);
            if (Convert.IsDBNull(value)) {
                if (targetType == typeof(string))
                    return (T)Convert.ChangeType(String.Empty, typeof(string));
                return default(T);
            }
            else {
                targetType = Nullable.GetUnderlyingType(targetType);
                if (targetType == null)
                    targetType = typeof(T);
                return (T)Convert.ChangeType(value, targetType);
            }
        }



çağırırken ise, aşağıdaki gibi kullanmak yetecektir.


            OracleConnection connection = new OracleConnection("ConnectionString");
            OracleCommand command = connection.CreateCommand();
            command.CommandText = "SELECT * FROM SourceTable";
            command.Connection.Open();
            OracleDataReader reader = command.ExecuteReader();
            IList<Product> list = new List<Product>();
            Product item = null;
            while (reader.Read()) {
                item = new Products();
                item.ID = ReadField<int>(reader, "ID");
                item.Quantity = ReadField<string>(reader, "Quantity");
                item.UnitPrice = ReadField<decimal>(reader, "UnitPrice");
                item.Description = ReadField<string>(reader, "Description");
            }
            command.Connection.Close();



NOT : beklenmeyen tip dönüşümlerinde kodun çatlamasını istemiyorsanız try catch kullanabilirsiniz.

Edit : Method Nullable tiplerle de çalışacak şekilde güncellendi.

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , ,

C#

Oracle'da Silinen Tabloyu Geri Getirmek

by Suat TUNCER 31. July 2009 12:24

Bir veritabanı nesnesini yanlışlıkla sildiğinizi düşünün, bunun farkına fardığınız ilk beş saniye ağzınız açık gözleriniz irice açılmış bir şekilde ekrana bakakalırsınız. Ardından geçen iki saniye de okkalı bir ha...tir çekersiniz acı bir nidayla. Ardından içerdiği dataları düşünür, müşteriyi düşünür sonrada oluk oluk terlemeye başlarsınız. Ama bu durum Oracle'da başınıza geldiyse bu kadar sıkıntı yapmaya gerek yok, oldukça kolay bir şekilde geri alabilirsiniz. Silinen nesneler DBA_RECYCLEBIN ve USER_RECYCLEBIN tablolarında tutular, burayı sorgulayarak korkularımızla yüzleşiriz.

SELECT OBJECT_NAME, ORIGINAL_NAME FROM USER_RECYCLEBIN sorgusunu çalıştırdığınızda ORIGINAL_NAME sütününde sildiğiniz nesnenin adını görüyorsanız rahat bir nefes alın artık :).

Nesnenizin yanında bulunan OBJECT_NAME değerini aşağıdaki gibi sorulayıp datalarınızı görebilirsiniz.

SELECT * FROM "BIN$b/yFhnhEQCzgQ6wWAQtALA==$0"

tablonuzu geri almak için FLASHBACK TABLE [tablo_adi] TO BEFORE DROP sorgusunu çalıştırdığınızda tablonuz ve datalarınız geri gelecektir.

 

Hadi geçmiş olsun.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , ,

Database

WPF and CAS (Code Access Security)

by Suat TUNCER 2. April 2009 08:34

Merhaba,

Uzun zaman önceydi .Net Framework ilk sunulduğunda yaygın güvenlik senaryolarından farklı olarak CAS (Code Access Security) adında bir güvenlik modeli ile karşılaşmıştık ve o zaman pek de önemsenmemişti. Daha sonra .Net Framework 2.0 ile biraz daha önemine değinilmiş fakat geliştiriciler yine de kullanmayı pek tercih etmemiş tercih edenlerde kısıtlı bir grup olarak kalmıştı. Şimdi 2009 yılındayız ve CAS, WPF ile Browser uygulamaları geliştiriken iyice farkediliyor artık. Düşünün ki bir browser application içerisinde, standart bir Windows Form instance'ı aldığınız anda bile StackWalk'lar ardı ardına tetikleniyor ve özel bir ayrıcalık verilmediyse doğrudan securtiy exception fırlatılıyor.  Microsoft, "kendim yazdım kendime" tadında bir deyişle SilverLight ve WPF için geliştirdiği Security SandBox'ı önemli ölçüde CAS ile modellemiş durumda. Bu haliyle bakınca olabildiğine CAS'lı bir WPF application duruyor karşımızda.

CAS'in bir diğer güzelliği de WPF veya herhangi bir .Net uygulamasında kendinize özel Security SandBox'lar geliştirebilmenizi sağlamasıdır. CAS detayları için için buraya bakabilirsiniz.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , ,

Security

Dependency Property

by Suat TUNCER 28. March 2009 11:26

Merhabalar,

Son zamanlarda "Dependency Property" çok fazla kullanmaya başladım ve bu zamana kadar kullanmadığım için kızdım kendime. Özellikle WPF ile birlikte bir nesnenin hemen hemen bütün özellikleri "Dependency Property" olarak tanımlandığı için ve bazı özel noktalarda eventlara ihtiyaç duyduğumuzda imdadımıza yetişmektedirler. Aşağıya basit bir kod örneği ekliyeyim de tam olsun.

    private void Page_Loaded(object sender, RoutedEventArgs e)
    {
        DependencyPropertyDescriptor dc; // bizim için bağlamayı çekecek olan nesne ;-)
        dc = DependencyPropertyDescriptor.FromProperty(
            Button.IsMouseOverProperty, // durumuna bağlanmak istediğimiz özellik
            typeof(Button));            // bağlama çekilecek tip

        dc.AddValueChanged(             // nesne ve method ilişkilendiriliyor
            button1,                    // IsMouseOver özelliği kullanılacak nesne
            Button_MouseOver);          // IsMouseOver özelliği değiştiğine çalışacak method
    }


    void Button_MouseOver(object sender, EventArgs e)
    {
        /*
           method tetiklendiğinde eğer;
           IsMouseOver true ise arkaplan kırmızı yapılıyor
           IsMouseOver false ise arkaplan sarı yapılıyor.
        */

        Button senderButton = sender as Button;
        if (senderButton.IsMouseOver)
            senderButton.Background = Brushes.Red;
        else
            senderButton.Background = Brushes.Yellow;
        // böylece galatasaray selam gönderilmiş oluyor :-)
    }

istenirse foreach döngüsü kullanılarak, bir control collectionın tamamına da uygulanabilir.

i love .net

 

Currently rated 2.0 by 2 people

  • Currently 2/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , ,

C#

AÖF 2008 Vize Soruları

by Suat TUNCER 23. March 2009 15:13

Merhabalar

Daha öncede belirtmiştimdir belki. Anadolu üniversitesinin e-öğrenme portalını oldukça başarılı bulurum. Malum 6 senedir AÖF'de okuyunca bolca kullanımış oluyor insan. Bu sene artık son sınıfdayım ve bitirmeye niyetliyim. Bu yüzden fırsat buldukça çözmek için sınav sorularını indirmiştim. Belki başkasınında işine yarar diye linkleri veriyorum. Sorular PDF formatındadır. Açmak için sisteminizde Adobe Acrobat yüklü olmalıdır ama benim tercihim Foxit PDF Reader'dan yanadır.
 


Not : Yazdırmadan önce bir kez daha düşünün illa yazıdaracaksanız da bir A4 sayfasına önlü-arkalı olmak üzere 4 sayfayı sığdıra da bilirsiniz yada kafaniza göre taklın Wink.

Currently rated 5.0 by 2 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

General

Yeni Blog

by Suat TUNCER 15. March 2009 00:20

Merhabalar,

Uzun zamandır http://suattuncer.blogcu.com adresinde yazmıyordum, bunun sebebi biraz da blogu taşımak isteyişimdi. Gelin görün ki blogcu.com yönetiminden istememe rağmen bana ait dataların bir yedeğini alamadığım için henüz buraya aktaramadım. Burayı daha fazla boş bırakmak istemediğimden ilk postumuda atmış olayım dedim. Eski adresimi ziyaret edenler oranın şu anda harap bir halde olduğunu göreceklerdir, CSS ile oynayıp dataları uygun bir şekilde almak için o hale getirdim :-). ilk fırsatta 2005'den buyana tüm yazılarımı yorumlarıyla birlikte buraya taşıyacağım.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

General

Bayramlar yaşardık...

by Suat TUNCER 15. December 2008 08:14
Bayramlar yaşardık hep birlikte,
en büyüğümüzden en küçüğümüze bir arada.
Bir bayram daha yaşadık
                      ama en büyüğümüz bizden uzakta
                                                     hem de çok uzakta.
"Dade"miz,
kendi dilimizde annemiz,
masmavi gözleriyle, son bir gülümseyerek ayrıldı aramızdan.

Mekanın cennet olsun güzel ninem.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

General

Neden Herşey Sıfırdan Başlar

by Suat TUNCER 30. May 2007 12:00

Hiç düşündünüz mü, neden dizilerde indexler sıfırdan başlar ?

Aslında oldukça basit; int tipinde 5 elemanlı bir dizinin elemanlarını dolaşmak için genellikle aşağıdaki kod kullanılır

int main(){ 
     int rakamlar[5]; 
     for(int i=0;i<5;i++){
          // birşeyler yap   
     } 
     return 0;
}

 

Yukarıdaki dizinin herhangi bir elemanına erişmek demek, aslında dizinin o elemanının RAM'deki adresine erişmek demekdir şöyleki ;
     int rakamlar[5];  //int tipi bellekte 4 Byte yer tutar
RAM'de bu diznin yerleşimini şöyle olacaktır 

1. Eleman [0] 80100 data
80101 data
80102 data
80103 data
2. Eleman [1] 80104 data
80105 data
80106 data
80107 data
3. Eleman [2] 80108 data
80109 data
80110 data
80111 data
4.Eleman [3] 80112 data
80113 data
80114 data
80115 data
5.Eleman [4] 80116 data
80117 data
80118 data
80119 data

rakamlar  dizisi için örnek RAM yerleşimi.

 

Dizinin 4. Elemanına erişmek için 3 nolu index kullanılır, buda bizi 3 nolu elemanın RAM'de saklandığı bloğun başlangıç adresine erişmek edemektir. Hemen hesaplayalım.


dizinin başlangıç adresi + (dizi tipinin adres büyüklüğü * erişilmek istenilen indeks)

yani :
80100 + (4*3) = 80112 > yani 4. elemanın (3 indeks numaralı elemanın) başlangıç adresi

 

şimdi 0'dan başlamadığını düşünüp hesaplayın, hiç bir zaman ilk elemana erişilemezdi :-).

 

 

 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , ,

LLP

Powered by BlogEngine.NET 1.4.5.0
Theme by Mads Kristensen