On a recent project I needed to write an Event Receiver for a document library which set item level security on the document library items. Given the nature of document content management and the various ways in which a document library can be configured (content types, approval, check-in/out, versioning etc) I needed to understand the lifecycle sequence and events a document may pass through.
In researching this I rediscovered a great post from Synergy which describes the semantics of BeforeProperties and AfterProperties. I also wrote a test EventReceiver which recorded events and item properties which together I used to build up a picture of a documents lifecycle from an EventReceivers point of view, based on various document library configurations.
The data I gathered and presented below is part of the story, but of course, not the whole story, but was sufficient for me to understand which item event receiver methods to implement and under what conditions I would change an items security permissions.
Note the difference when adding new documents to a document library using the “Upload” method, and the document library is managing content types – after the document is added to the document library, its metadata is updated after the user has selected the content type and filled out the properties in the UI, which causes the additional calls to ItemUpdating & ItemUpdated.
Document Library that is not Managing Content Types
| No Versioning or Major Versioning No Approval |
||
| New Document | ItemAdded | Item.File.Level = Published Item _ModerationStatus = 0 |
| Upload Document | ItemAdded | Item.File.Level = Published Item _ModerationStatus = 0 |
| Major/Minor Versioning No Approval |
||
| New Document | ItemAdded | Item.File.Level = Draft Item _ModerationStatus = 3 |
| > Publish Major Version | ItemUpdating | Item.File.Level = Draft Item _ModerationStatus = 3 |
| ItemUpdated | Item.File.Level = Published Item _ModerationStatus = 0 |
|
| Upload Document | ItemAdded | Item.File.Level = Draft Item _ModerationStatus = 3 |
| > Publish Major Version | ItemUpdating | Item.File.Level = Draft Item _ModerationStatus = 3 |
| ItemUpdated | Item.File.Level = Published Item _ModerationStatus = 0 |
|
| Major/Minor Versioning Approval |
||
| New Document | ItemAdded | Item.File.Level = Draft Item _ModerationStatus = 3 Item.ModerationInformation.Status = Draft |
| > Publish Major Version | ItemUpdating | Item.File.Level = Draft Item _ModerationStatus = 3 Item.ModerationInformation.Status = Draft |
| ItemUpdated | Item.File.Level = Draft Item _ModerationStatus = 2 Item.ModerationInformation.Status = Pending |
|
| > Approve | ItemUpdating | Item.File.Level = Draft Item _ModerationStatus = 2 Item.ModerationInformation.Status = Pending |
| ItemUpdated | Item.File.Level = Published Item _ModerationStatus = 0 Item.ModerationInformation.Status = Approved |
|
| Upload Document | ItemAdded | Item.File.Level = Draft Item _ModerationStatus = 3 Item.ModerationInformation.Status = Draft |
| > Publish Major Version | ItemUpdating | Item.File.Level = Draft Item _ModerationStatus = 3 Item.ModerationInformation.Status = Draft |
| ItemUpdated | Item.File.Level = Draft Item _ModerationStatus = 2 Item.ModerationInformation.Status = Pending |
|
| > Approve | ItemUpdating | Item.File.Level = Draft Item _ModerationStatus = 2 Item.ModerationInformation.Status = Pending |
| ItemUpdated | Item.File.Level = Published Item _ModerationStatus = 0 Item.ModerationInformation.Status = Approved |
Document Library that is Managing Content Types
| No Versioning or Major Versioning No Approval |
||
| New Document | ItemAdded | Item.File.Level = Published Item _ModerationStatus = 0 |
| Upload Document | ItemAdded | Item.File.Level = Published Item _ModerationStatus = 0 |
| ItemUpdating | Item.File.Level = Published Item _ModerationStatus = 0 |
|
| ItemUpdated | Item.File.Level = Published Item _ModerationStatus = 0 |
|
| Major/Minor Versioning No Approval |
||
| New Document | ItemAdded | Item.File.Level = Draft Item _ModerationStatus = 3 |
| > Publish Major Version | ItemUpdating | Item.File.Level = Draft Item _ModerationStatus = 3 |
| ItemUpdated | Item.File.Level = Published Item _ModerationStatus = 0 |
|
| Upload Document | ItemAdded | Item.File.Level = Draft Item _ModerationStatus = 3 |
| ItemUpdating | Item.File.Level = Draft Item _ModerationStatus = 3 |
|
| ItemUpdated | Item.File.Level = Draft Item _ModerationStatus = 3 |
|
| > Publish Major Version | ItemUpdating | Item.File.Level = Draft Item _ModerationStatus = 3 |
| ItemUpdated | Item.File.Level = Published Item _ModerationStatus = 0 |
|
| Major/Minor Versioning Approval |
||
| New Document | ItemAdded | Item.File.Level = Draft Item _ModerationStatus = 3 Item.ModerationInformation.Status = Draft |
| > Publish Major Version | ItemUpdating | Item.File.Level = Draft Item _ModerationStatus = 3 Item.ModerationInformation.Status = Draft |
| ItemUpdated | Item.File.Level = Draft Item _ModerationStatus = 2 Item.ModerationInformation.Status = Pending |
|
| > Approve | ItemUpdating | Item.File.Level = Draft Item _ModerationStatus = 2 Item.ModerationInformation.Status = Pending |
| ItemUpdated | Item.File.Level = Published Item _ModerationStatus = 0 Item.ModerationInformation.Status = Approved |
|
| Upload Document | ItemAdded | Item.File.Level = Draft Item _ModerationStatus = 3 Item.ModerationInformation.Status = Draft |
| ItemUpdating | Item.File.Level = Draft Item _ModerationStatus = 3 Item.ModerationInformation.Status = Draft |
|
| ItemUpdated | Item.File.Level = Draft Item _ModerationStatus = 3 Item.ModerationInformation.Status = Draft |
|
| > Publish Major Version | ItemUpdating | Item.File.Level = Draft Item _ModerationStatus = 3 Item.ModerationInformation.Status = Draft |
| ItemUpdated | Item.File.Level = Draft Item _ModerationStatus = 2 Item.ModerationInformation.Status = Pending |
|
| > Approve | ItemUpdating | Item.File.Level = Draft Item _ModerationStatus = 2 Item.ModerationInformation.Status = Pending |
| ItemUpdated | Item.File.Level = Published Item _ModerationStatus = 0 Item.ModerationInformation.Status = Approved |

January 5, 2012

Author Info
No comments yet... Be the first to leave a reply!