Yes, most of them forget or don't remember the values for BeforeProperties and AfterProperties on SPItemEventReceiver like me. Already so many posts available for this, but i would like to consolidate some of the posts which i read.
Post 1 : SynergyOnline
In this post Randy Williams, provided clear explanation about this. Some basic details about Event Receivers got from this post
Event receivers are a great way to hook into various SharePoint events. These can apply to Feature events such as FeatureActivated, List events such as FieldAdded, and many others. The most common set of receivers used, however, are part of SPItemEventReceiver which let you wire your code up to a number of events that can occur to items on a list or library.
When working with events, you’ll quickly find that before (synchronous) and after (asynchronous) events exist, and the method suffix such as “ing” (e.g. ItemAdding) and “ed” (e.g. ItemAdded) will tell you whether it gets invoked before or after the actual change is made. Basic stuff.
Comparison table of Before and After properties in SPEventReceiver for list and document library
No value means that column value in the hash table was not available.
New value means that the correct value for the column was available.
Changed value means that the correct updated value was available.
Original value means that the correct original value was available.
Here is the same test against a document library:
Here Randy Williams denoted BeforeProperties of SPEventReceiver contains "No Value" for lists. Also given explanation for that. So its good and I got better idea of how before and after events work for both lists and libraries from this post.
But i didn't stop my analyze on this, i continue with few more posts, then i identified following post
Post 2 : http://www.sharepointalex.co.uk/index.php/2010/06/beforepropertiesafterproperties-in-event-receivers-i-always-forget-this/
Note : This is untested one, check at your end once before implementing in production.
In this post Alex, also referred SynergyOnline post.But i got something different and more important thing about the Item Updating event from the comment given by Ray Proffitt, he given some more interesting thing about SPEventReceivers in http://blog.ray1.net/2011/06/getting-beforeproperties-and.html
here he introduced a new option to us, which is defining Synchronization property in the elements.xml file of event receiver solution.
Points to be noted:
Anyway the proper way of doing things is real simple, and I stumbled upon it using Powershell to check my event receivers.
SPEventReceiverDefinition has a Synchronization property.
An Asynchronous event passes the objects to another thread and you lose the BeforeProperties and AfterProperties.
A Synchronous event keeps the thread and you can access the BeforeProperties and AfterProperties.
In my case after specifying the event receiver as Synchronous I was able to compare existing values with values in properties.AfterProperties on an Receiver Type = ItemUpdating.
So to set a Receiver as Synchronous, just add Synchronous to your definition (elements.xml) or in code set the Synchronization property.
Eg:
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Receivers>
<Receiver> ... ...
<Synchronization>Synchronous</Synchronization>
</Receiver>
</Receivers>
</Elements>
Conclusion : In our Software Development world, everything has limitation at the same time everything is possible, the only thing required is good analyses. I am also running on the track to analyze things good.
Hope this helps people like me !!!!!!!!!!
Post 1 : SynergyOnline
In this post Randy Williams, provided clear explanation about this. Some basic details about Event Receivers got from this post
Event receivers are a great way to hook into various SharePoint events. These can apply to Feature events such as FeatureActivated, List events such as FieldAdded, and many others. The most common set of receivers used, however, are part of SPItemEventReceiver which let you wire your code up to a number of events that can occur to items on a list or library.
When working with events, you’ll quickly find that before (synchronous) and after (asynchronous) events exist, and the method suffix such as “ing” (e.g. ItemAdding) and “ed” (e.g. ItemAdded) will tell you whether it gets invoked before or after the actual change is made. Basic stuff.
Comparison table of Before and After properties in SPEventReceiver for list and document library
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 |
New value means that the correct value for the column was available.
Changed value means that the correct updated value was available.
Original value means that the correct original value was available.
Here is the same test against a document library:
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 |
Here Randy Williams denoted BeforeProperties of SPEventReceiver contains "No Value" for lists. Also given explanation for that. So its good and I got better idea of how before and after events work for both lists and libraries from this post.
But i didn't stop my analyze on this, i continue with few more posts, then i identified following post
Post 2 : http://www.sharepointalex.co.uk/index.php/2010/06/beforepropertiesafterproperties-in-event-receivers-i-always-forget-this/
Note : This is untested one, check at your end once before implementing in production.
In this post Alex, also referred SynergyOnline post.But i got something different and more important thing about the Item Updating event from the comment given by Ray Proffitt, he given some more interesting thing about SPEventReceivers in http://blog.ray1.net/2011/06/getting-beforeproperties-and.html
here he introduced a new option to us, which is defining Synchronization property in the elements.xml file of event receiver solution.
Points to be noted:
Anyway the proper way of doing things is real simple, and I stumbled upon it using Powershell to check my event receivers.
SPEventReceiverDefinition has a Synchronization property.
An Asynchronous event passes the objects to another thread and you lose the BeforeProperties and AfterProperties.
A Synchronous event keeps the thread and you can access the BeforeProperties and AfterProperties.
In my case after specifying the event receiver as Synchronous I was able to compare existing values with values in properties.AfterProperties on an Receiver Type = ItemUpdating.
So to set a Receiver as Synchronous, just add Synchronous to your definition (elements.xml) or in code set the Synchronization property.
Eg:
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Receivers>
<Receiver> ... ...
<Synchronization>Synchronous</Synchronization>
</Receiver>
</Receivers>
</Elements>
Conclusion : In our Software Development world, everything has limitation at the same time everything is possible, the only thing required is good analyses. I am also running on the track to analyze things good.
Hope this helps people like me !!!!!!!!!!
No comments:
Post a Comment