Makale Özeti

Bu makalemizde ASP.Net ile Dinamik vCalendar dosyalarının nasıl oluşturulduğuna değineceğiz. Oluşturduğumuz dosyaları Outlook içinde randevu dosyası olarak kullanabileceğiz. Böylelikle yapacağımız sitelerde kullanıcılara hatırlatma işlemlerinde büyük kolaylık sağlayacaktır. Ör. Bir etkinlik sisteminde, etkinlikleri tek tek kullanıcıların elle oluşturması yerine sistemin otomatik oluşturması kullanıcılara büyük kolaylık sağlayacaktır.

Makale

Bu makalemizde ASP.Net ile Dinamik vCalendar dosyalarının nasıl oluşturulduğuna değineceğiz. Oluşturduğumuz dosyaları Outlook içinde randevu dosyası olarak kullanabileceğiz. Böylelikle yapacağımız sitelerde kullanıcılara hatırlatma işlemlerinde büyük kolaylık sağlayacaktır. Ör. Bir etkinlik sisteminde, etkinlikleri tek tek kullanıcıların elle oluşturması yerine sistemin otomatik oluşturması kullanıcılara büyük kolaylık sağlayacaktır.

Gelelim geliştireceğimiz uygulamaya, açıklamada da belirttiğim gibi bir Etkinlik yayınlama sistemi oluşturacağız. Öncelikle kullanacağımız tabloyu oluşturalım.



 


EventID
,
Summary: Etkinlik başlığı için kullanacağız.
Description: Etkinlik açıklaması için kullanacağız.
StartDate: Etkinlik başlangıç tarihi.
EndDate: Etkinlik bitiş tarihi. 

 

Etkinlikleri göstermek için Repeater kullanacağız ve Dosyayı oluşturmak için de Repeater’ın ItemCommand eventı kullanacağız. Dikkat etmemiz gereken bir nokta daha var. ResponseEncodind özelliğini türkçe olarak yani “iso-8859-9” belirtmemiz gerekiyor. Aksi halde türkçe karakterlerde problem yaşayabilirsiniz.

Default.aspx


<%
@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" ResponseEncoding="iso-8859-9" %>
<html>
<head runat="server">
    <title></title>
</head>
<body style="font-family: Tahoma; font-size: 11px;">
    <form id="frmMain" runat="server">
        <div style="width: 600px;">
            <asp:Repeater ID="rptEvents" runat="server" OnItemCommand="rptEvents_ItemCommand">
                <ItemTemplate>
                    <b>
                        <asp:Label ID="lblSummary" runat="server" Text='<%#Eval("Summary") %>' ForeColor="Maroon"></asp:Label>
                    </b>
                    <hr style="color: #e8e8e8; border-style: dotted; height: 1px;" />
                    <asp:Label ID="lblDescription" runat="server" Text='<%#Eval("Description") %>'></asp:Label><br />
                    <br />
                    <em><b>Başlangıç Tarihi:</b>
                        <asp:Label ID="lblStartDate" runat="server" Text='<%#Eval("StartDate") %>'></asp:Label></em>
                    <br />
                    <em><b>Bitiş Tarihi:</b>
                        <asp:Label ID="lblEndDate" runat="server" Text='<%#Eval("EndDate") %>'></asp:Label></em>
                    <br />
                    <asp:LinkButton ID="lbCreateFile" runat="server" CommandName="CreateFile"> Takvime Ekle </asp:LinkButton>
                </ItemTemplate>
                <SeparatorTemplate>
                    <br />
                    <br />
                </SeparatorTemplate>
            </asp:Repeater>
        </div>
    </form>
</body>
</html>
 
 

Kod kısmına geçiyoruz...

Default.aspx.cs


protected
void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        //Veritabanı bağlantımızı kurup Etkinlikleri çekiyoruz, 
        //sonrasında bir DataSet'e eşitleyip Repeater kontrolüne dolduruyoruz...
        SqlConnection con = new SqlConnection("Server=.; Database=vCalendar; User Id=……….");
        SqlDataAdapter da = new SqlDataAdapter("Select * From Events Order By StartDate", con);
        DataSet ds = new DataSet();
        da.Fill(ds);
        rptEvents.DataSource = ds;
        rptEvents.DataBind();
    }
}

protected void rptEvents_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    //Repeater kontrolünden yakaladığımız Etkinliğin bilgilerini almaya başlıyoruz...
    if (e.CommandName == "CreateFile")
    {
        //Summary: Etkinlik başlığı için kullanacağız...
        string Summary = ((Label)e.Item.FindControl("lblSummary")).Text;
        //Description: Etkinlik açıklaması için kullanacağız...
        string Description = ((Label)e.Item.FindControl("lblDescription")).Text;
        //StartDate: Etkinlik başlangıç tarihi...
        string StartDate = Convert.ToDateTime(((Label)e.Item.FindControl("lblStartDate")).Text).ToString("yyyyMMddTHH0000");
        //EndDate: Etkinlik bitiş tarihi...
        string EndDate = Convert.ToDateTime(((Label)e.Item.FindControl("lblEndDate")).Text).ToString("yyyyMMddTHH0000");
        //UID: Tekilliği korumak için random bir metin oluşturuyoruz...
        string UID = Guid.NewGuid().ToString().Replace("-", ""); 
        //sbText ile etkinlik dosyamızın içeriğini oluşturaceğız ve adım adım gerekli alanları ekleyeceğiz...
        StringBuilder sbText = new StringBuilder();
        //BEGIN:VCALENDAR ile Calendar dosyanın başladığını belirtiyoruz...
        sbText.Append("BEGIN:VCALENDAR" + Environment.NewLine);
        //BEGIN:VEVENT ile Etkinliğin başladığını belirtiyoruz...
        sbText.Append("BEGIN:VEVENT" + Environment.NewLine);
        //DTSTART ile Etkinliğin başlangıç tarihini belirtiyoruz...
        sbText.Append("DTSTART:" + StartDate + Environment.NewLine);
        //DTEND ile Etkinliğin bitiş tarihini belirtiyoruz...
        sbText.Append("DTEND:" + EndDate + Environment.NewLine);
        //UID ile dosyanın tekilliğini belirtiyoruz...
        sbText.Append("UID:" + UID + Environment.NewLine);
        //DESCRIPTION ile Dosya ayrıntısını belirtiyoruz...
        sbText.Append("DESCRIPTION;ENCODING=QUOTED-PRINTABLE:" + Description + Environment.NewLine);
        //SUMMARY ile Dosya başlığını belirtiyoruz...
        sbText.Append("SUMMARY;ENCODING=QUOTED-PRINTABLE:" + Summary + Environment.NewLine);
        //END:VEVENT ile Etkinliğin bittiğini belirtiyoruz...
        sbText.Append("END:VEVENT" + Environment.NewLine);
        //END:VCALENDAR ile Calendar dosyanın bittiğini belirtiyoruz...
        sbText.Append("END:VCALENDAR");
        //Dosya içeriğini oluşturduktan sonra dosya tipini text/x-vCalendar olarak belirtiyoruz...
        Response.ContentType = "text/x-vCalendar";
        //Dosya ismini belirtiyoruz...
        Response.AddHeader("Content-Disposition", "filename=" + UID + ".vcs;");
        //ve ekrana çıktısını alarak dosyayı oluşturuyoruz...
        Response.Write(sbText.ToString());
        Response.End();
    }
}
 
 

Sayfalarımızı oluşturduktan sonra çalıştırıyoruz...



Yukarıdaki gibi bir ekran çıktısına erişiyoruz. Tabi bu arada siz tabloya birkaç veri girmeyi unutmayın
J Örnek verilere ve tabloya makale sonundaki linkten erişebilirsiniz. “Takvime Ekle” dediğimizde ise bize aşağıdaki gibi ekran sunacak...



Response.Write ile dosyayı oluşturup kullanıcıya sunmuş oluyoruz. Kullanıcı “Aç” butonunu kullanıp açabilir ya da kaydedp daha sonra işlemlerini yapabilir.



Son işlem kullanıcı açtığında Outlook ile entegrasyonunu tamamlayıp işlemleri gerçekleştirebilir.

Makale Dosyaları:
http://rapidshare.com/files/97946247/prjVCalendar.rar
(Not: Dosyanın direkt download özelliği vardır. Sağ tıklayıp “Farklı Kaydet“ seçeneği ile beklemeden, hızlı bir şekilde indirebilirsiniz.)

Başka bir makalemde görüşmek dileğiyle...

Gökhan BAĞCI
Microsoft Certified Professional
gokhanbagci.com