Uzun bir aradan sonra tekrar yazmaya başlamanın heyecanıyla yeni yazımıza başlıyoruz, yazımızın konusu Exchange Server üzerinde bulunan takvim verilerinin C# ile çekilmesidir.
Programı yazmaya başlamadan önce Exchange Web Services (EWS) kütüphanesini projemize eklememiz gerekmektedir.
Kod dosyamızın isim uzayları tanımları şöyledir,
using System;
using System.Collections.Generic;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Windows.Forms;
using Microsoft.Exchange.WebServices.Data;
Server ile bağlantı kurulurken kullanılıyorsa SSL sertifika hatası almamak için aşağıdaki kodu sunucuya bağlanmadan önce çalıştırmak gerekmektedir.
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
Exchange Server ile bağlantıyı oluşturacak olan metodumuzun kodu,
public ExchangeService GetBinding()
{
// Create the binding.
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
service.Url = new Uri("https://{Exchange Server Adresi}/EWS/Exchange.asmx", UriKind.Absolute);
// Define credentials.
service.Credentials = new WebCredentials("kullanıcı_adı", "Şifre", "domain");
return service;
}
Server üzerinden takvim etkinliklerini çekecek olan metodumuzun kodu,
void GetCalendarItems(ExchangeService service)
{
int CalendarItems = 0;
// Bir arama kriteri ekliyoruz. Örnek kriterde başlama tarihi: 1.7.2015'ten büyük olanlar getiriliyor
List<SearchFilter> searchFilterCollection = new List<SearchFilter>();
searchFilterCollection.Add(new SearchFilter.IsGreaterThan(AppointmentSchema.Start, new DateTime(2015, 7, 1)));
// Arama filtresi oluşturuluyor
SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, searchFilterCollection.ToArray());
// 50 sayfalık bir etkinlik görüntüsü oluşturuluyor
ItemView view = new ItemView(50);
// alınacak veriler seçiliyor
view.PropertySet = new PropertySet(BasePropertySet.IdOnly, AppointmentSchema.Subject, AppointmentSchema.Start);
// Etkinlikler başlama tarihlerine göre artan sırada sıralanıyor
view.OrderBy.Add(AppointmentSchema.Start, SortDirection.Descending);
view.Traversal = ItemTraversal.Shallow;
// sonuçlar sorgulanıyor.
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Calendar, searchFilter, view);
//Dönen sonuçlar işleme alınıyor
dataGridView1.DataSource = findResults.Items;
}