SPItemEventReceiver İçerisindeki BeforeProperties ve AfterProperties

0
123

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
Örnek olması açısından yukarı yazdığımız kodu bir de list item için yazmak istiyorum.
 public override void ItemUpdating(SPItemEventProperties properties)  
 {  
    if (properties.ListItem["column"] != properties.AfterProperties["column"])  
   {  
     properties.Cancel = true;  
     properties.ErrorMessage = "This column cannot be changed";  
   }  
 } 
Gördüğünüz gibi sharepoint document library ve list göre eventreceiver içerisinde farklı davranmaktadır.
Umarım yararlı olmuştur, okuduğunuz için teşekkür ederim 🙂

CEVAP VER

Please enter your comment!
Please enter your name here