19 Şubat 2017 Pazar

DevExpress XAF ' a bir bakış

Merhaba yazılıma gönül vermiş dostlarım :)

Bugün sizlerle zevkli olduğunu düşündüğüm bir konuya giriş yapalım diyorum :)

İçinizde uygulama geliştirirken 'yok mu böyle süslü bi grid bulsam da onu kullansam' gibi serzenişte bulunanlar elbet olmuştur.

İşte bu isteklerimizi karşılaması için 3.parti componentler kullanabiliriz.DevExpress,Telerik gibi...

Ben de bunlardan DevExpress'i kendi projelerimde kullanırken çalıştığım firmada XAF diye bir muhabbetle karşılaştım.

İşe yeni başladığım sıralar biz XAF isimli bir framework kullanıyoruz demişti sevdiğim bir yazılımcı abim :)

Biraz araştırayım dedim,en başta biraz karmaşık gelse de sonrasında yazılımcıyı ve firmayı çok rahatlatabildiğini farkettim.

Dürüst olalım arkadaşlar ülkemizde yazılım firması kurmak en kaliteli yazılımları yapma hayaliyle ortaya çıkan bir durum değil malesef :) çok sevmesem de piyasada doğru olan bi ifade;En iyi yazılım çalışan yazılımdır.

Hem patronunuz hem de müşteri yaptığınız uygulamanın hangi kodlama standartlarına uyup uymadığını çok önemsemez.Siz belki de arka tarafta bir sanat icra etmişsinizdir ancak onlar için butona basıldığında çalışıp çalışmadığı,istediği sonucu verip vermediği ve de belki de en mühimi ne kadar zamanda yetiştiği önemlidir.

Framework leri genel olarak zamanda tasarruf amaçlı kullanırız zaten.Düşünsenize sizin için kod kısmında tasarladığınız veri tabanını oluşturan,oluşturduğu veri tabanındaki CRUD işlemlerini tanımlayan ve bunları çok kısa zamanda sizin için gerçekleştiren bir asistanınız var :)

Yine daldım muhabbete,kısa kesip asıl konuya geliyorum arkadaşlar :)

İşte XAF(Xpress Application Framework) da DevExpress'in developerlar için sunduğu çok güzel bir nimet :))

Bunu kullanmak için tabi ki DevExpress'i yüklemeniz gerekir öncelikle.

Devexpress 'i yükledikten hemen sonra Visual Studio muzda yeni bir proje açalım.












Gördüğünüz gibi Visual c# altında DevExpress XAF isimli bir sekme mevcut.Buradan projemizi açıyoruz arkadaşlar ve açmak istediğimizde direkt olarak bizi bir ekran karşılıyor.


















O da nesi,uygulamamızı hangi platformda yazacağımızı seçtiriyor bize,yani yazacağımız uygulamayı bize hem web hem masaüstü hem de mobil olarak sunabileceğini söylüyor.

Ben her üçünü de oluşturmak istediğimi söylüyorum.Ardından next diyerek ilerliyorum.


















Bu ekrandan bize ORM seçmemizi söylüyor tabi mobile uygulama yaptığımız için sadece XPO yu seçebiliyoruz.Ancak mobile seçmemiş olsaydık entity framework kullanmamıza da müsaade edecekti.
Fazla uzatmadan devam ediyorum dostlar :)


















Ardından çıkan bu ekranlarda bize güvenlik için bir ayarlama yapayım mı ve eklemek istediğin bir modül var mı diye soruyor ancak bu kısımlara sonradan değineceğimiz içi hiçbir değişiklik yapmadan finish diyoruz.



Yukarıdaki resimden de anlaşılacağı üzere XAF bizim için projelerimizi katmanlarla hazırlamış bulunmakta arkadaşlar :) gözünüz korkmuş olabilir ancak emin olun o kadar korkulacak bir durum yok ortada.

Şimdi uygulamamızda bi class oluşturalım di mi.Veri tabanında da bu class'ın bir tablosu olsun tabi.

Bunun için XAFExample.Module projesinde değişiklik yapmamız gerekiyor arkadaşlar.

XAFExample.Module içerisindeki BusinessObjects klasörüne gelip sağ tıklayarak Add DevExpress Item sekmesine gelelim.Ardından da XPO Business Object 'i seçerek Business Objectimize bir isim verelim.

Ben Business Objectime Product ismini verdim.



Eğer karşınıza bu ekran gelmiş ise tebrikler ilk Business Object'inizi başarıyla oluşturdunuz arkadaşlar :)

Şimdi gelelim bu class'ımız içerisinde propertylerimizi tanımlamaya.
Property tanımlamayı elbette biliyorsunuzdur ancak XPO da ufak bazı farklılıklar var.

















Evet arkadaşlar gördüğünüz şekilde propertylerimizi tanımlamış olduk.
Şimdi sıra geldi uygulamamızı çalıştırmaya :)

Bunun için ben Win uygulamasını tercih edeceğim.

SolutionExplorer dan XAFExample.Win isimli uygulamaya giderek App.config dosyasını açıyorum. ve içerideki ConnectionString i kendi veritabanı bilgilerime göre güncelliyorum.














Ve ardından uygulamamı çalıştırıyorum :)



Eğer buraya kadar herşeyi doğru şekilde yapmışsak uygulamamız ekrandaki gibi çalışmış olacaktır arkadaşlar :) gördüğünüz gibi biz sadece bir proje açıp bir class oluşturduk ancak XAF bizim için bir veritabanı oluşturup hazır bir template üzerinde class'ımızı da oluşturdu.Böylelikle sıkıcı ve uzun bir çok işlemden kurtulmuş olduk :)

Şimdilik burada bırakalım,bu arada sizler de kurcalayın bakalım XAF'ı biraz bozun projelerinizi,unutmayın ki bozmazsanız tamir etmeyi de öğrenemezsiniz.Bir yazılımcı olarak yedeğini aldığınız sürece bozmaktan asla korkmayın.

Hepinize bol kodlu günler :)

18 Şubat 2017 Cumartesi

C# ADO.NET ile MSSQL işlemleri

Merhabalar dostlar,bugsız günler geçirdiğinizi umarak (mümkünmüş gibi :) ) iyi olduğunuzu düşünüyorum ve hal hatır sorma muhabbetlerini geçerek konumuza geliyorum.

Bugün sizlerle ADO.NET 'in ne olduğunu nasıl kullanıldığını öğreneceğiz.

Öncelikle nedir bu ADO.NET derseniz uygulama ile Veritabanı arasındaki bir köprüdür diyebiliriz.Uygulama geliştirirken ister istemez verilerimizi saklamak için bir kaynağa ihtiyaç duymuşuzdur. Bu kaynağı .txt uzantılı bir dosyada tutmak istemiyorsanız ( ki istemeyeceğinizden eminim) veritabanı sizler için güzel bir kaynak olabilir.

Ben bu yazımda MSSQL kullanacağım,neden diye soracak olursanız,sormayın.
Programlama dillerinde olduğu gibi veritabanında da milliyetçilik yapılmasından hoşlanmam,canım öyle istedi diyelim :)

Şimdi girizgahı geçtiğimize göre gelelim kodlamaya.

Öncelikle bağlanmamız için elimizde bir veritabanı olmalı.Bunun için ben Deneme isimli bir veritabanı oluşturdum ve içerisinde de bir adet şirin mi şirin "Product" tablom var.
























Bu "Product" tablom üzerinde yapabileceğim işlemlere gelirsek şimdilik CRUD(Create-Read-Update-Delete) olarak tanımlanan ekleme-silme-güncelleme ve okuma işlemlerini yapacağız.

Heyecanlandıysanız başlayalım :)

Visual Studio içerisinde bir Console Application açalım.
Ardından açtığımız uygulamaya Product isimli bir class ekleyelim.
Şimdiiiiii, hadi gelin veritabanımızdaki Product tablomuzu bu class içerisinde örnekleyelim.




















Evvet şu an tablomuzun bir örneğini de uygulamamız içerisinde oluşturmuş olduk :)

Şimdi sıra geldi kuru fasülyenin faydalarına dostlar.

MSSQL ile uygulamamızı birbirine bağlayalım artık di mi,bunun için ihtiyacımız olan bir dll var.
System.Data.SqlClient dll ini class ımıza import etmemiz gerekiyor.










Bunu da hallettikten sonra gelelim Veri tabanına kayıt ekleme metodumuza :)













Evvet dostlarım şimdi gelelim açıklamalara.Satır satır gidelim dilerseniz.

İlk olarak Insert isminde Product tipinde parametre alan bir metod tanımladık.
sonrasında App.config dosyasında tanımladığımız bir bağlantı cümlesini burada config dosyasından okuduk.
config dosyası nedir derseniz uygulama içerisinde kullanacağınız parametreleri dinamik olarak tuttuğunuz yer diyerek şimdilik kısaca geçip bir başka yazıda daha detaylıca anlatalım :)
Devam edelim,bağlantı cümlesini alıyoruz demiştik en son.
Bağlantı cümlesi(connection string) sizin bilgisayarınızda bulunan MSSQL i tanıtan cümledir.Bunu nasıl bulacağım derseniz https://www.connectionstrings.com/ adresinden faydalanabilirsiniz.

Gelelim ikinci satıra.İkinci satırda MSSQL üzerinde çalışacak olan komutumuzu tanımlıyoruz burada kullandığımız '@' işaretleri parametre olarak bu değerleri set edeceğimizi gösterir.

Ardından using içerisinde bir SQL bağlantı nesnesi oluşturuyoruz.bu bağlantı nesnesinin constructorlarından birinde sizden parametre olarak bağlantı cümlesini istiyor.Biz de parametre olarak bağlantı cümlemizi veriyoruz ve hemen altındaki satırda Open() metodu ile bağlantımızı açıyoruz.

Bağlantımızı başarıyla açmış bulunmaktayız.Şimdi sıra geldi komutumuzu oluşturmaya.
yine using içerisinde yeni bir  SQL komutu oluşturuyoruz ve bu sefer de parametre olarak 'bana çalıştıracağım komut cümlem ile bu komutu çalıştırmam için gerekli bağlantıyı ver' diyor.

Biz de kendisinin isteğini yerine getiriyoruz ve hemen sonrasında sıra geliyor parametreleri eklemeye.
Sırayla alt alta metodumuza parametre olarak gelen ürünümüzü komutumuza ekliyoruz.
Ardından da ExecuteNonQuery() metodu ile son kılıç hamlesini vurarak komutumuzu çalıştırıyoruz.

Evet dostlar biliyorum biraz uzun oldu açıklama ama merak etmeyin diğer metodlar böyle olmayacak :) artık bağlantı mantığını öğrendiğinize göre geçelim güncelleme işlemine :)


Kod üzerinden görebileceğiniz gibi Insert işleminden çok da farklı bir iş yapmadık sevgili dostlarım o yüzden açıklama yapmakla vakit kaybetmeden silme işlemine geçiyorum :)











Evet dostlarım buradaki fark metodumuzun parametre olarak id'yi alması.Neden diyecek olursanız veritabanında her kaydın eşsiz(guid) olan değeri id si olduğundan diğer kolon bilgilerine ihtiyacımız yok.Tabi bu sizin uygulamanızda kuracağınız senaryoya göre de değişiklik gösterebilir.

Son olarak gelelim Okuma işlemine
















Çok uzadı di mi dostlar merak etmeyin hemen bitiriyorum.

Okuma işleminde okuduğumuz her bir satırı bir ürün olarak düşünüyor ve bu ürünleri Product tipinde bir listede tutuyoruz.

Okuma işlemi için kullandığımız class ise SqlDataReader adından da anlaşılacağı üzere okuyucumuz.
komut nesnemizi okuyucu olarak çalıştırdığımızda bize SqlDataReader tipinde dönüş yapıyor. Biz de while döngüsü içerisinde her okuduğu satırı bir ürün olarak görüp listemize ekliyoruz.

Satırı okurken gelen değerin boş olup olmadığını kontrol etmeyi de elbet unutmuyoruz :)

Evet sevgili dostlar uzun bir yazı oldu farkındayım,umarım sizleri çok sıkmamışımdır.
Video olarak anlatmadığımdan sadece nokta atışı yaparak belirli noktalara değindim ancak sorularınız olursa yorum kısmına yazabilirsiniz.

Bir sonraki yazıda görüşmek dileğiyle şimdilik hoşçakalın.

12 Şubat 2017 Pazar

C# Code Snippet oluşturma

Merhaba dostlar gelin bugün sizlerle kendi snippet'ımızı oluşturalım.

Öncelikle nedir bu Code Snippet derseniz hepinizin yakından tanıdığını düşündüğüm bir olay aslında.
Örneğin prop (tab tab) dediğimizde kısa yoldan property tanımlamak gibi.


İşte aynen böyle biz de kendi kısaltılmış kod parçacıklarımızı kolaylıkla oluşturabiliriz.

Öncelikle Visual Studio içerisinden yeni bir Console Application açalım. Sonrasında projemize bi xml dosyası ekleyelim.

Ardından oluşturduğumuz xml dosyasına sağ tıklayıp Insert Snippet->Snippets->Snippet seçeneğine tıklayalım.



Karşımıza gelen ekranda bilgileri dolduralım.



Burada
Title:Oluşturulan snippet'ın başlığı
Author: Snippet'ı oluşturan kişi(Gururla kendi adınızı yazabilirsiniz) :)
Shortcut:örnekteki prop gibi kullanacağınız kısaltma
Description:Oluşturulan Snippet'ın açıklaması
Code Language kısmında XML 'i silerek CSharp yazmanız gerekiyor.
ardından da gri yazılı olan kısma oluşturmak istediğiniz kod parçacığını girebilirsiniz.




Ben kendim için bir örnek oluşturdum dilerseniz bu örnekten de yardım alabilirsiniz.

Bu yazımızın da burada sonuna geldik. Umarım faydalı olmuştur.Bir sonraki yazıda görüşmek dileğiyle :)

C# ile Outlook Appointment oluşturma



Merhaba yazılım sever dostlarım.

Bugün projelerinizde ihtiyaç duyabileceğinizi düşündüğüm bir konuya değineceğim.Benim üzerinde çalışmakta olduğum bir  projede bu konu hakkında bir istek aldım. Araştırmalarım neticesinde bunu bir Windows Form uygulamasında COM component kullanarak kolaylıkla yapılabileceğini gördüm ancak üzerinde çalıştığım uygulama Web tabanlı bir uygulama olduğundan bu noktada işler biraz daha farklı hale geliyordu.

Sizi çok sıkmadan özet geçeyim.Bildiğiniz gibi Web uygulamalarında yazdığımız c# kodları server tarafında çalışır.Öyle olduğu için de Appointment oluştururken çalışacak olan kodlar uygulamanızı yayınladığınız server daki Outlook'a ulaşmaya çalışacaktır.

Server daki değil de client üzerindeki Outlook a ulaşmak istiyorsanız bunun için benim size önereceğim 2 farklı çözüm yolu olacak.

1-) Javascript kullanmak
2-).ics uzantılı dosya kullanmak

1. yöntem sizi daha hızlı çözüme ulaştıracaktır.Ancak aşağıda verdiğim javascript kodlarının çalışabilmesi için Tarayıcınızda ActiveX bileşenlerinin çalıştırılması için gerekli izinleri ayarlamanız gerekmektedir.
Bu da güvenlik açısından bazı sorunlara yol açabilmektedir.
















2.Yol ise .ics uzantılı bir dosya oluşturmak olacaktır.
Şimdi .ics uzantısı da nedir diyecek olursanız .ics uzantılı dosyalar iCalendar dosyalarıdır.Yani bir exe gibi çift tıklayıp çalıştırdığınızda içerisindeki parametrelerle yeni bir appointment oluşturma ekranını sizin için açacaktır.
Bu yolda bizim yapacağımız işlem de elimizdeki bilgilerle yeni bir .ics uzantılı dosya oluştumak olacak.
Aşağıda vereceğim örnek kod parçasında bu dosyanın içeriğinin nasıl oluşturulacağını basit bir şekilde anlatmaya çalıştım.

















İçeriği yukarıdaki gibi olan .ics uzantılı bir dosya oluşturduğunuzda işlem tamamlanmış olacaktır.

Faydalı olacağını umarak bir başka yazıda buluşmak dileğiyle hepinize Bug'sız günler diliyorum :)