29 Mart 2010 Pazartesi

Windows Server 2008 üzerinde Global Assembly Cache(GAC)'a assembly yüklenmesi

Window Server 2003 üzerinde Global Assembly Cache(GAC)'a ilgili dll dosyasını sürekleyip bıraktığımızda GAC'a assembly yüklenmiş oluyordu.
Window Server 2008 ile aynı işlemi yapmak istediğimizde yükleme başarız oluyor ve aşağıdaki mesajı alıyoruz.
Eğer böyle bir hata ile sizde karşılaşırsanız yapmanız gerekenleri aşağıda belirtmekteyim.
  • Administrator olarak "command prompt" ekranını açıyoruz.
  • GAC'a yükleyeceğimiz dll'in bulunduğu klasörü açıyoruz. (explorer d:\projects\myApp)
  • Global Assembly Cache açıyoruz. (explorer c:\windows\assembly)
Administrator olarak iki klasörü de açtıktan sonra ilgili assembly'i GAC'a yükleyebiliriz.

Not: Window Server 2008 Enterprise service pack 2 üzerinde çalışılmıştır.

Sharepoint 2010 Web Part Connections

Bu yazımda Sharepoint 2010 ile ileri seviye web part geliştirmeye göz atarak web partlar arası bağlantıya değineceğim.
Örnek bir uygulama yaparak uygulamayı paylaşacağım.
2 Web Part (wp) geliştirerek biri veriyi gönderen diğeri ise veriyi alan wp olacak.

Deploy edeceğimiz site url yazarak visual web part projesi oluşturduktan sonra projemize VisualProvider ve VisualConsumer adları ile 2 wp ekliyoruz.

WebPartlarımıza textbox ve button ekliyoruz.

Ardından webpartlarımızı bağlayacağımız interface ekliyoruz.
Visual webpartlarımıza gönderdiğimiz datayı ekranda göstereceğimiz methodları yazıyoruz.
Daha sonrasında provider webpartımıza interface implement edip bağlantıyı oluşturuyoruz.
Consumer webpartında da bağlantı oluşturup gelen veriyi visualwebpartımıza gönderiyoruz.
Buradaki önemli nokta gelen verinin null kontrolü yapılmasıdır.
Projemiz deploy edip webpartlarımızı sayfaya ekledikten sonra provider ve consumer webpartlarımızı birbirine bağlıyoruz.
Vee bağlantı kuruldu :) Resmin üzerine tıklayarak açılan sayfada webpartlar arasındaki bağlantı görülebilir.

Örnek projeyi buradan indirebilirsiniz.

24 Mart 2010 Çarşamba

Sharepoint 2010 Event Handler ve Hata Sayfası


SP2007'de göstermek istediğimiz hata mesajını aşağıdaki şekilde yapıyorken

properties.ErrorMessage = "Hata Oluştu";
properties.Cancel = true;

artık Sharepoint 2010 ile birlikte daha düzenli ve kullanıcı dostu şekilde hata mesajını gösterebiliriz.

Öncelikle projemize EventReceiver ekliyoruz.


Ardından göstermek istediğimiz sayfayı "Application Page" olarak projemize ekliyoruz.


Sayfa eklendikten sonra içerisine uygun hata mesajımızı yazabiliriz.

EventReceiver'da kontrolümüzü yaptıktan sonra

properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl;
properties.RedirectUrl = "/_layouts/MyApp/ErrorPage.aspx";

oluşturduğumuz "Application Page" linkini hata oluşunca yönlenecek sayfa olarak belirtiyoruz.

16 Mart 2010 Salı

Exchange Server 2007 sp1 Sanal Makine


Exchange Web Servisleri ile ilgili çalışmaları yapabileceğiniz sanal makineyi bu adresten indirebilirisiniz.

Microsoft Exchange Server 2007 SP1 VHD


15 Mart 2010 Pazartesi

Sharepoint 2010 Taxonomy Referans Ekleme Sorunu


14\ISAPI altında Microsoft.SharePoint.Taxonomy dll referans olarak projemize eklemek istediğimiz zaman bize aşağıdaki gibi hata mesajı vermekte ve projemizi başarıyla build edememektedir.


Sharepoint 2010 beta ile gelen bu sorunu çözebilmek için önce
C:\Program Files (x86)\Microsoft Chart Controls\Assemblies\System.Web.DataVisualization.dll
referans olarak eklemeli ardından Microsoft.SharePoint.Taxonomy.dll ini projemize referans olarak eklemeliyiz.

Sharepoint Developer blogunda ve technetde de konu ile ilgili soru ve cevaba ulaşabilirsiniz.


Exchange Web Services (EWS) ile kullanıcının maillerini okuma


aşağıdaki kod ile litwareinc.com da hesabı buluna Adil'in
Inbox'ndaki emaillerin başlıklarını listeliyoruz.

private void GetEmails()
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);

ServicePointManager.ServerCertificateValidationCallback =
delegate(Object obj, X509Certificate certificate,
X509Chain chain, SslPolicyErrors errors)
{
return true;
};
System.Net.WebProxy proxyObject = new System.Net.WebProxy();
proxyObject.Credentials = CredentialCache.DefaultCredentials;
service.Url = new Uri("https://domain/ews/exchange.asmx");
service.UseDefaultCredentials = true;
Mailbox mb = new Mailbox("Adil@litwareinc.com");
FolderId fid1 = new FolderId(WellKnownFolderName.Inbox, mb);
FindItemsResults<Item> findResults = service.FindItems(fid1,
new ItemView(int.MaxValue));
foreach (var item in findResults)
Response.Write(item.Subject + "<br />");

}


Exchange Web Services (EWS) ile toplantı odalarını listeleme


Bir önceki yazımda gelen kullanıcının bulunduğu toplantıları listelemiştik. Bu yazımda ise yalnızca kullanıcı ile kısıtlı kalmayarak bütün toplantı odalarını ve dolu olan saatleri listeleyeceğiz. Ben burada ayrı ayrı yazacağım siz kullanacağınız yere göre değiştirir veya bir araya getirsiniz.
İlk önce toplantı odalarının adı ve eposta adreslerini listeyeceğim.
using System.DirectoryServices;
ekledikten sonra toplandı odasının adını ve eposta adresini tutacağım class yazıyoruz.

public class RoomMailbox
{
public string Email { get; set; }
public string DisplayName { get; set; }
}

ardından da örnek kod aşağıda.
private List<RoomMailbox> GetRooms()
{
List<RoomMailbox> listRoomMailbox = new List<RoomMailbox>();
string sqSearchQuery = "(&(&(&(mailNickname=*)(objectcategory=person)(objectclass=user)(msExchRecipientDisplayType=7))))";
SearchResultCollection srSearchResults;
string roRootDSE = "ldap bağlantı adresi";
DirectoryEntry deDirectoryEntry = new DirectoryEntry(roRootDSE);
DirectorySearcher dsDirectorySearcher = new DirectorySearcher(deDirectoryEntry);
dsDirectorySearcher.SearchScope = SearchScope.Subtree;
dsDirectorySearcher.Filter = sqSearchQuery;
dsDirectorySearcher.PropertiesToLoad.Add("mail");
dsDirectorySearcher.PropertiesToLoad.Add("displayName");
srSearchResults = dsDirectorySearcher.FindAll();
foreach (SearchResult srSearchResult in srSearchResults)
{
listRoomMailbox.Add(new RoomMailbox
{
DisplayName = srSearchResult.Properties["displayName"][0].ToString(),
Email = srSearchResult.Properties["mail"][0].ToString()
}
);
}
return listRoomMailbox;
}


msExchRecipientDisplayType=7 toplantı odalarını getirmek için 7 yazdık.
"ldap bağlantı adresi" kısmına ldap adresiniz yazmanız gerekmekte.
Aşadağıda da gelen kullanıcın yetkileri ile Exchange Web Servislerini kullanarak
ilgili toplantı odasının dolu olan saatlerini listeleyelim.
Ben burada örnek olarak 1 adet toplantı odasının(Akdeniz) dolu olan saatlerini getiriyorum.
Ancak siz yukarıdaki kod ile birleştirerek bütün toplantı odalarının dolu olan saatlerini getirebilirsiniz.

Web servisine bağlanabilmemiz tüm sertifika izinleri için gerekli namespaceleri eklemeyi unutmayalım.

using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;


private void GetCalendarByMailBox()
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);

ServicePointManager.ServerCertificateValidationCallback =
delegate(Object obj, X509Certificate certificate,
X509Chain chain, SslPolicyErrors errors)
{
return true;
};

System.Net.WebProxy proxyObject = new System.Net.WebProxy();
proxyObject.Credentials = CredentialCache.DefaultCredentials;
service.UseDefaultCredentials = true;
service.Url = new Uri("https://domain/ews/exchange.asmx");

Mailbox mb = new Mailbox("Akdeniz@litwareinc.com");
FolderId fid1 = new FolderId(WellKnownFolderName.Calendar, mb);
FindItemsResults<Appointment> findResults = service.FindAppointments(fid1,
new CalendarView(DateTime.Now.AddDays(-5), DateTime.Now.AddDays(5)));

foreach (Appointment appointment in findResults)
{
if ((appointment.AppointmentState & 4) != 4)
Response.Write(appointment.Subject + "<br />");
}

}

yukarıdaki kodda bulunan önemli bir nokta da

if ((appointment.AppointmentState & 4) != 4)

kontrolü yapmamızdır. Bu kontrol ile cancel edilmiş toplantı odalarını getirmiyoruz.
Buradaki makalede açıklamasını bulabilirsiniz.

Exchange Web Services (EWS)

Bu yazımda Exchange 2007'de Exchange Web Servisleri ile toplantı odalarını getirme örneği paylaşacağım.

İlk önce burada bulunan Exchange Web Services Managed API indiriyoruz ve %programfiles%\Microsoft\Exchange\Web Services\1.0 klasörü altındaki Microsoft.Exchange.WebServices.dll referans olarak projemize ekliyoruz.
using Microsoft.Exchange.WebServices.Data;
ekledikten sonra aşağıdaki örnek kod ile Exchange 2007 üzerinde bulunan toplantı odalarının ilgili kişi ile ilişkili dolu olan saatlerini gösterebiliriz.

private void GetCalendarByUser()
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);

ServicePointManager.ServerCertificateValidationCallback =
delegate(Object obj, X509Certificate certificate,
X509Chain chain, SslPolicyErrors errors)
{
return true;
};

System.Net.WebProxy proxyObject = new System.Net.WebProxy();
proxyObject.Credentials = CredentialCache.DefaultCredentials;
service.Credentials = new WebCredentials("username", "password", "domain");
service.Url = new Uri("https://domain/ews/exchange.asmx");

CalendarFolder myCalendar = CalendarFolder.Bind(service, WellKnownFolderName.Calendar);
FindItemsResults myAppointments = myCalendar.FindAppointments(new CalendarView(DateTime.Now.AddDays(-5), DateTime.Now.AddDays(5)));
foreach (Appointment appointment in myAppointments)
Response.Write(appointment.Subject + ", ");
}