TurkProgrammers.NeT
Ana sayfa Ana Sayfa | Ana sayfanız yapın | Sık kullanılanlara ekle | Rss/Rdf Besleme| JavaScript
Bölümler
Arşiv
paz sa ça cu cum pa
123456
78910111213
14151617181920
21222324252627
28293031

Mailinizi ekleyin
Haberlere abone olun:

anket: Sayfamızda En çok hangi bölüm ilginizi çekmekte
Sayfamızda En çok hangi bölüm yani programlama dili ve makaleleri ilginizi çekmekte?
PHP
C / C++ / C#
Asp ve .NET
JS / Ajax / DHTML /HTML
SQL
Visual Basic
Güvenlik
Action Script
Diğer
Anket sonuçları | Eski Anketler


email Arkadaşınızın maili | print Yazıcı versionu | comment Yanıtlar (0 Gönder)

Saat kontrollü Windows Servis

by Mr. CanaWar on Ocak 06,2011

image

Kodaman dan bir arkadaşımızın yazdığı bu kod ; Windows Servis ve 30 dk da bir alt yöneticiye, 40 dk da bir de üst yöneticiye mail atıyor. Bu mail'i atma nedeni, bu projede Teknik Servis'e gelen taleplerin 30 dk içersinde karşılanmaması durumunda müdahale etmektir.

Aşağıdaki kodu Visual Studio'da gerekli yerleri değiştirerek rahatça çalıştırabilirsiniz. Veritabanı adı kısmı ve mail gönderecek olan server adresini değiştirmeniz durumunda bir sorun çıkmayacaktır.

Kod bloğunda da zaman zaman açıklama satırları eklemeye çalıştım. 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Timers;
using System.Data.SqlClient;
using System.Net.Mail;
using System.Net;

namespace MailAtanWindowsServis
{
    public partial class MailAtanServis : ServiceBase
    {
        Timer Zamanlayici;
        SqlConnection conn;
        public MailAtanServis()
        {
            InitializeComponent();
            Zamanlayici = new Timer(30000);
            conn = new SqlConnection(@"data source=GIFTED\SQLEXPRESS;initial catalog = Ticket; integrated security = true");

        }

        protected override void OnStart(string[] args)
        {
            // Servisimiz start oldugu zaman zamanlayıcı adını verdigimiz timer nesnemizi start edelim.

            Zamanlayici.Start();
            Zamanlayici.Elapsed += new ElapsedEventHandler(Zamanlayici_Elapsed);

        }

        void Zamanlayici_Elapsed(object sender, ElapsedEventArgs e)
        {
            //Bu kısımda veritanından okuyan kısmı yapıcaz. Yani gidip kontrol edecek ve 2 saat ise mail atacak
            //Veritabanında bir onay duruma bakarız. Kullanıcı onayı (0,1,2) olmaması lazım. Ayrıca işlem başlangıç zamanına 120 dk ekleriz. Hala çözülmemişse ///mail at.

            SqlConnection conn = new SqlConnection(@"data source=GIFTED\SQLEXPRESS;integrated security=sspi;initial catalog=Ticket");
            SqlCommand comm = new SqlCommand("SELECT S.ISLEM_BASLANGIC_ZAMAN,S.ONAY_DURUM,S.PERSONEL_ID,P.PERSONEL_BIRIM FROM SORUN_TABLOSU AS S INNER JOIN PERSONEL AS P ON P.PERSONEL_ID=S.PERSONEL_ID WHERE S.ONAY_DURUM=0 OR S.ONAY_DURUM=1", conn);
            DataTable dt = new DataTable();
            try
            {
                conn.Open();
                dt.Load(comm.ExecuteReader());

                // string dakika = baslangicTarih.ToString().Substring(10, 2);


                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    string personelBirim = dt.Rows[i][3].ToString();
                    int personelID = Convert.ToInt32(dt.Rows[i][2].ToString());
                    double baslangicTarih = Convert.ToDouble(dt.Rows[i][0].ToString());

                    double sonTarih = baslangicTarih + 30;
                    double sonTarih1 = baslangicTarih + 40;

                    //Bunu alt yönetici için kullanıcaz

                    if (Convert.ToDouble(DateTime.Now.ToString("yyyyMMddHHmm")) == sonTarih1)
                    {

                        SqlCommand mailAl1 = new SqlCommand("SELECT PERSONEL_MAIL FROM PERSONEL WHERE PERSONEL_BIRIM='" + personelBirim + "' AND PERSONEL_YETKI= 1", conn);
                        SqlCommand comm3 = new SqlCommand("SELECT P.PERSONEL_ADI,P.PERSONEL_BIRIM,S.SORUN_ID,S.ACIKLAMA,DBO.FNK_TARIHI_FORMATLA(S.BASLANGIC_ZAMAN),DBO.FNK_TARIHI_FORMATLA(S.ISLEM_BASLANGIC_ZAMAN),SOR.KATEGORI_ADI,ONAY_ACIKLAMA FROM PERSONEL AS P INNER JOIN SORUN_TABLOSU AS S ON S.PERSONEL_ID=P.PERSONEL_ID INNER JOIN SORUN_KATEGORI_TABLOSU AS SOR ON S.KATEGORI_ID=SOR.KATEGORI_ID INNER JOIN ONAY_TABLOSU AS O ON O.ONAY_DURUM=S.ONAY_DURUM AND (S.ONAY_DURUM=0 OR S.ONAY_DURUM=1) AND P.PERSONEL_ID=" + personelID + "", conn);
                        DataTable dt3 = new DataTable();

                        string mail1 = mailAl1.ExecuteScalar().ToString();
                        dt3.Load(comm3.ExecuteReader());
                        string konu1 = "Bildiren Personel : " + dt3.Rows[0][0].ToString() + "\n" + " Personel Birimi : " + dt3.Rows[0][1].ToString() + "\n" + "Sorun Id : " + dt3.Rows[0][2].ToString() + "\n" + "Açıklama : " + dt3.Rows[0][3].ToString() + "\n" + "Bildirim Zamanı : " + dt3.Rows[0][4].ToString() + "\n" + "İşlem Başlangıç Zamanı : " + dt3.Rows[0][5].ToString() + "\n" + "Kategorisi : " + dt3.Rows[0][6].ToString() + "\n" + "Onay Durumu : " + dt3.Rows[0][7].ToString();

                        mailGonder(mail1, "xxx@xxx.com.tr", "1234", konu1, dt3.Rows[0][2].ToString() + ". Id Nolu Problem - " + dt3.Rows[0][1]);

                    }


                    //Bunu üst yönetici için kullanıcaz.

                    if (Convert.ToDouble(DateTime.Now.ToString("yyyyMMddHHmm")) == sonTarih)
                    {

                        SqlCommand mailAl = new SqlCommand("SELECT PERSONEL_MAIL FROM PERSONEL WHERE PERSONEL_BIRIM='" + personelBirim + "' AND PERSONEL_YETKI= 2", conn);
                        SqlCommand comm2 = new SqlCommand("SELECT P.PERSONEL_ADI,P.PERSONEL_BIRIM,S.SORUN_ID,S.ACIKLAMA,DBO.FNK_TARIHI_FORMATLA(S.BASLANGIC_ZAMAN),DBO.FNK_TARIHI_FORMATLA(S.ISLEM_BASLANGIC_ZAMAN),SOR.KATEGORI_ADI,ONAY_ACIKLAMA FROM PERSONEL AS P INNER JOIN SORUN_TABLOSU AS S ON S.PERSONEL_ID=P.PERSONEL_ID INNER JOIN SORUN_KATEGORI_TABLOSU AS SOR ON S.KATEGORI_ID=SOR.KATEGORI_ID INNER JOIN ONAY_TABLOSU AS O ON O.ONAY_DURUM=S.ONAY_DURUM AND (S.ONAY_DURUM=0 OR S.ONAY_DURUM=1) AND P.PERSONEL_ID=" + personelID + "", conn);
                        DataTable dt2 = new DataTable();

                        string mail = mailAl.ExecuteScalar().ToString();
                        dt2.Load(comm2.ExecuteReader());
                        string konu = "Bildiren Personel : " + dt2.Rows[0][0].ToString() + "\n" + " Personel Birimi : " + dt2.Rows[0][1].ToString() + "\n" + "Sorun Id : " + dt2.Rows[0][2].ToString() + "\n" + "Açıklama : " + dt2.Rows[0][3].ToString() + "\n" + "Bildirim Zamanı : " + dt2.Rows[0][4].ToString() + "\n" + "İşlem Başlangıç Zamanı : " + dt2.Rows[0][5].ToString() + "\n" + "Kategorisi : " + dt2.Rows[0][6].ToString() + "\n" + "Onay Durumu : " + dt2.Rows[0][7].ToString();

                        mailGonder(mail, "xxx@xxx.com.tr", "1234", konu, dt2.Rows[0][2].ToString() + ". Id Nolu Problem - " + dt2.Rows[0][1]);



                    }





                }
            }
            catch (Exception ex)
            {


            }
            finally
            {
                conn.Close();
            }






        }

        private void mailGonder(string kime, string kullaniciAdi, string sifre, string konu, string baslik)
        {
            MailMessage mail = new MailMessage();
            mail.From = new MailAddress(kullaniciAdi);
            mail.Priority = MailPriority.High;
            mail.To.Add(new MailAddress(kime));
            mail.Body = konu;
            mail.Subject = baslik;

            NetworkCredential sad = new NetworkCredential();
            sad.UserName = kullaniciAdi;
            sad.Password = sifre;

            SmtpClient sc = new SmtpClient();
            sc.Host = "mail.gvg.com.tr";
            sc.Port = 587;
            sc.Credentials = sad;
            sc.Send(mail);
        }


        protected override void OnStop()
        {
            Zamanlayici.Stop();
        }

        protected override void OnContinue()
        {

            // Pause olayından tekrar resume butonuna basıldıgında zamanlayıcımızı start edelim .

            Zamanlayici.Start();

        }

    }
}


474 Kere okundu

Bu makaleyi beyendinizmi ?

1 2 3 4 5 Rating: 2.45Rating: 2.45Rating: 2.45 (Toplam 44 Oylar)
comment Yanıtlar (0 Gönder)
Çok okunanlar
En Çok Yorumlananlar
Yazarlar