Merhaba arkadaşlar. Bu dersimizde C# projelerimize bildirim sistemi ekleme işlemini göreceğiz. Bu konu mail ortamında bir soru olarak gelmişti. Bende eğitim setimde bu konuda bir içerik olmadığı için bu dersi eklemeye karar verdim. C# Bildirim Sistemi Hazırlamak işleminin nasıl yapılacağını bu dersimizde ayrıntılı bir şekilde anlatacağım.
C# Bildirim Sistemi Hazırlamak
SQL Bildirim Tablosunu Hazırlama
Bahsettiğimiz bildirim sistemini hazırlamak için MSSQL kullanacağız. Database üzerinde bildirimleri saklayacağımız bir tablo tanımlayacağız. Örnek bir tablo create’i aşağıdaki gibidir.
CREATE TABLE [dbo].[BILDIRIMLER]( [bld_RECno] [int] IDENTITY(1,1) NOT NULL, [bld_Kimden] [int] NOT NULL, [bld_Kime] [int] NOT NULL, [bld_Bildirim] [nvarchar](500) NULL, [bld_Tarih] [datetime] NULL, [bld_Goruldu] [bit] NULL, [bld_GorulmeTarih] [datetime] NULL)
- Her zaman tablolarımda yukarıda gördüğünüz gibi, ilk 3 yada 4 harfi tablo simgesi olarak kullanırım. Örneğin KULLANICILAR tablosunda bu simge kul_ şeklinde olur.
- Tablo adlarını her zaman büyük harfler ile yazarım.
- Bu zamana kadar hiç ID kolon adını kullanmadım. Otomatik artan Identity kolonum her zaman RECno (Record No = Kayıt No) yani olarak isimlendiririm.
- Ben burada Kimden ve Kime kısımları için her zaman int olarak tuttuğum kullanıcı kodunu yazmayı seçtim. Her zaman bu yöntemi kullanırım. Kullanıcı adı değişebilir ama kullanıcı kodu her zaman sabit kalmak zorunda. Örneğin kullanıcının adını yanlış yazdınız yada o kullanıcıyı başka biri kullanmaya başladı. Her yerde kullanıcı adını kullanırsanız, kullanıcı adı değiştiğinde, yaptığı eski işlemleri göremeyecektir. Ancak kod olarak tutarsanız isim değişse bile kod değişmeyeceğinden o kişinin yaptığı eski işlemleri görebilirsiniz. Bir yerde kullanıcı adını göstermek isterseniz iç içe select kullanarak gösterebilirsiniz. İç İçe Select Kullanımı buradan ilgili derse gidebilirsiniz.
C# Bildirimleri Kaydetme
Şimdi ilk aşamayı tamamladıktan sonra C# üzerinde bu tabloya çeşitli işlemlerden sonra insert yapmak için bir metod hazırlayacağım. Ben EntitiyFramework (Model) hiç kullanmadım. Tüm insert select vs kodlarımı elle hazırlarım.
public static void BildirimKaydet(int Kimden, int Kime, string Bildirim) { sql.CommScalar("Insert Into BILDIRIMLER (" + " [bld_Kimden]" + " , [bld_Kime]" + " , [bld_Bildirim]" + " , [bld_Tarih]" + " , [bld_Goruldu]" + " , [bld_GorulmeTarih]" + " ) Values (" + " " + Kimden + " " + " , " + Kime + " " + " , '" + Bildirim + "' " + " , getdate() " + " , 0 " + " '18991231' " + ")"); }
İnsert kodlarımızda yukarıdaki gibidir. Buradaki kodları açıklamam gerekiyor.
- sql.ComScalar olarak gördüğünüz kısım benim hazırladığım sql işlemleri class’ımdan gelen metoddur. Gönderdiği sorguyu sqlde çalıştırır. Bu class’ı hiç bir şekilde paylaşmıyorum. Bu class’ı kendiniz hazırlamalısınız. Yani sizin hazırlayabilmenizi isterim.
- SQL ‘de Getdate() komutu SQL Server’in kurulu olduğu sistemin tarihini saatini alır.
- bld_Goruldu ‘yu direk 0 olarak kayıt ediyoruz çünkü bildirim ilk kayıt edildiğinde görülmemiş olacak.
- bld_GorulmeTarih’i de 1899 12 31 olarak kaydettim. Bunun sebebi SQL ‘de datetime kolonları NULL olduğunda bilgileri çekerken ve bir yerde göstermek isterken sorun yaşayabiliyoruz. 1899 tarihi aslında boş anlamına geliyor. İnt kolonlarda 0 olması, nvarchar(*) alanlarda ” olması gibi.
- Veri tipi Bit olan kolona 0 ve 1 olarak değer gönderebilirsiniz.0 False, 1 True olarak gidecektir.
Şimdi bu metodumuzu bildirim verilmesini istediğimiz işlemlerin hemen altına koyacağız. Örneğin, bir satın alma talebi girildiğinde satın alma personeline bildirim gitmesini istedik. Satın alma Talebi kayıt işlemimizden hemen sonra bu metodu kullanacağız. Veya bir arıza kaydı girildiğinde teknik ekibe kontrol etmeleri için bildirim vermek istedik. Arıza kaydını kaydettiğimiz kodların hemen altında bu metodu ekleyeceğiz. Ayrıca gönderilen bildirimin kim tarafından gönderildiğini de bileceğiz.
C# Bildirimleri Gösterme
Bildirimi de kaydettiğimizde göre şimdi sırada bu bildirimleri kullanıcılara göstermeye geldi… Bu gösterim içim Timer nesnesi kullanacağız. C# Timer Kullanımı dersimden Timer nesnesinin kullanımına bakabilirsiniz.
AnaMenü’ye bir timer ekliyoruz. Bu timer sürekli olarak Tabloyu kontrol edecek ve gösterilmemiş bildirimleri kontrol edecek. Bu sebeple Timer nesnesinin Interval’ini çok kısa ayarlamamamız gerekiyor. Yoksa programda kasma sorunu yaşarız. SQL sürekli meşgul kalacağından sql serverin cevap verme hızını da düşürecektir. Kullanıcı sayısı çok ise 5 dakika bir, kullanıcı sayısı az ise 1 dakikada bir kontrol ettirebiliriz.
Timer’in Tick eventine geliyoruz ve kontrolerimizi yapıyoruz.
Bir int değişken tanımlıyoruz, kullanıcı kodu 25 olan kullanıcıya gönderilen ve görülmemiş bildirimlerin sayısına bakıyoruz. Eğer 0’dan büyük ise bildirim var demektir.
int kontrol = Convert.ToInt16(Bt.sql.CommScalar("SELECT count(*) FROM [BILDIRIMLER] where bld_Kime = 25 and [bld_Goruldu] = 0 "));
Eğer bildirim var ise bildirimi göstereceğiz. Ancak gelin bu kısmı biraz daha hoş bir şekle sokalım. Yani basit bir MessageBox kullanmayalım.
Öncelikle bir form ekleyelim ve adına BildirimGoster diyelim. Sonrasında bu forma 1 gridview ve 8 tane label ekleyelim. Gridiview’de bildirimler göstereceğiz ve girdview’de çift tıklanılan satırdaki bilgileri bu labellerde göstereceğiz. Örnek ekran görüntüsü aşağıdaki gibidir.
Bu formu da hazırladıktan sonra ana menü de istediğiniz bir noktaya bir buton ekleyerek text özelliğine, yukarıdaki verdiğim kontrol sorgusundan dönen sayıyı bir parantez içerisinde Okunmamış Bildirimler olarak gösterebilirsiniz. Bu butonun Click eventine gelelim ve bildirim formumuzu çağıralım. (Form çağırmayı biliyor olduğunuzu düşünüyorum. ;) )
Yukarıdaki formumuzun load eventinde aşağıdaki sorgu ile kullanıcı kodu 25 olan kullanıcıya gelen görülmemiş bildirimleri listeleyelim. Ben sadece sorguyu vereceğim.
SELECT [bld_RECno] as [Kayıt No] ,[bld_Tarih] as [Bildirim Tarihi] ,[bld_Kimden] as [Kimden] ,[bld_Bildirim] as [Bildirim] FROM [BILDIRIMLER] where bld_Kime = 25 and [bld_Goruldu] = 0
Gridview üzerinde bir satıra çift tıkladığımızda bildirim içeriğini alt kısımdaki labellerde detaylıca gösterelim. Bu işlemi C# DataGridView Seçilen Satırları Textbox da Gösterme dersimde bulabilirsiniz.
C# Bildirimleri Görüldü Yapmak
Son olarak görülen bildirimleri görüldü olarak update etmemiz gerekiyor.
NOT: Burada, bu form açıldığı anda da tüm görülmemiş bildirimleri görüldü olarak update edebilirsiniz yada çift tıklama esnasında, çift tıklanan satırdaki Kayıt No bilgisini alarak sadece o satırı görüldü olarak update edebilirsiniz.
Nota istinaden ikisi içinde gerekli update sorguları vereyim.
Bu sorgu kullanıcı kodu 25 olan kullanıcıya gelen tüm görülmemiş bildirimleri görüldü olarak günceller.
UPDATE [BILDIRIMLER] SET [bld_Goruldu] = 1 ,[bld_GorulmeTarih] = getdate() WHERE bld_Kime = 25 and [bld_Goruldu] = 0
Bu sorgu ise sadece çift tıklandığında Kayıt No’su alınan bildirimi görüldü olarak günceller.
UPDATE [BILDIRIMLER] SET [bld_Goruldu] = 1 ,[bld_GorulmeTarih] = getdate() WHERE bld_RECno = 5
C# Bildirim Sistemi Hazırlamak dersimde bu kadar arkadaşlar. Umarım sizler için faydalı bir ders olmuştur ve umarım yeterince açık bir şekilde anlatabilmişimdir. Yukarıda en basit şekilde bir bildirim siteminin nasıl hazırlanacağını anlattım. Sizler daha güzel ve efektif şeyler ortaya çıkarabilirsiniz. Ben bu sistemi bir çok projemde kullandım. Hatta bu sistemin bir üst seviyesi basit bir chat sistemine dönüşebilir. Artık gerisi sizde.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…
Takipte ve Sağlıcakla kalın.
Proje şeklinde paylaşmanız mümkün mü
Merhaba,
Yoğunluğumdan dolayı maalesef yakın zamanda mümkün değil.
Kardeşim eline sağlık da onu bildiğinizi varsayıyorum, bunu bildiğinizi varsayıyorum diye diye önemli yerleri belirtmemişsin. E bilmiyoruz işte. Form çağırmayı biliyoruz ama sqlcomsqalar dediğin şeyde neyi kasettiğini anlayamadım. Yeni tablo oluşturdum vs vs.
Merhaba,
CommScalar kendi oluşturduğum bir class içerisindeki bir fonksiyon. Zaten koda baktığınızda bir insert yapıldığını görebiliyorsunuz. Burada yapmanız gereken şey sql’e bir insert atmak. Siz nasıl yapıyorsanız, nasıl biliyorsanız o şekilde bir insert yapabilirsiniz. Yada bir Select vermişim. Aynı şekilde siz kendi bildiğiniz şekilde select yapabilirsiniz.
Bunlar bir kenara sitemdeki arama alanından arama yapsanız ilgili class’ın yazısına da ulaşabilirsiniz.
https://mustafabukulmez.com/c-sharp-egitim-seti-erp-programlama/
C# ile ilgili tüm yazılarım bu sayfada duruyor.