Sharepoint üzerinde eventreceiver, list, library, webpart, workflow, app vs gibi konulara ileride projeler ile birlikte daha detaylı olarak anlatıyor olacağım.
Kısaca bahsedecek olursam evetreceiver, sharepoint içerisinde eventleri yakalamak için en çok kullanılan bir yöntemdir. List event, web event, list item event vs gibi bir çok tipi vardır ve ItemAdding, ItemAdded, FieldAdding, FieldAdding… gibi handle edebildiği çok sayıda event bulunmaktadır.
Bir event tetiklendiğinde önce (synchronous) ve sonra (asynchronous) çalışarak hayatına devam eder. Bunu yaparken de metodların sonuna “ing” (örn: ItemAdding) ve “ed” (örn:ItemAdded) takılarını ekleyerek before ve after eventlerini çağırmaktadır.
Şimdi ItemUpdating eventi içerisinde istediğimiz bir fieldın değişip değişmediğini kontrol edip ve değişmedi ise güncelleme işlemini engellenmesini sağlayalım.
public override void ItemUpdating(SPItemEventProperties properties)
{
if (properties.BeforeProperties["column"] != properties.AfterProperties["column"])
{
properties.Cancel = true;
properties.ErrorMessage = "This column cannot be changed";
}
}
Yukarıdaki örneğimiz document library (doküman kütüphanesi) için çalışacaktır. Fakat list içerisinde kullanmak istediğimizde aynı sonucu alamıyoruz maalesef. List için kullandığımızda BeforeProperties hash table değer getirmiyor olacaktır. Daha detaylı bilgi için linketıklayarak ulaşabilirsiniz. List ve library eventreceiver arasındaki farklılıkları aşağıdaki tablodan ulaşabilirsiniz.
List | BeforeProperties | AfterProperties | properties.ListItem |
ItemAdding | No value | New value | Null |
ItemAdded | No value | New value | New value |
ItemUpdating | No value | Changed value | Original value |
ItemUpdated | No value | Changed value | Changed value |
ItemDeleting | No value | No value | Original value |
ItemDeleted | No value | No value | Null |
Library | BeforeProperties | AfterProperties | properties.ListItem |
ItemAdding | No value | No value | Null |
ItemAdded | No value | No value | New value |
ItemUpdating | Original value | Changed value | Original value |
ItemUpdated | Original value | Changed value | Changed value |
ItemDeleting | No value | No value | Original value |
ItemDeleted | No value | No value | Null |
public override void ItemUpdating(SPItemEventProperties properties)
{
if (properties.ListItem["column"] != properties.AfterProperties["column"])
{
properties.Cancel = true;
properties.ErrorMessage = "This column cannot be changed";
}
}