When you enable the Require Check Out option for a document library in Microsoft Windows SharePoint Services 3.0, the ItemUpdated event or the ItemUpdating event occurs two times. This occurs when the document library is updated. The same problem happens when you upload a document into a document library with a required column if this column is not filled in the document.
By design, Windows SharePoint Services 3.0 works in this manner. When you check out a document in a document library, a local copy of that document is created. Changes that you make to that document are saved to the local copy. When you check in the document, the operation occurs in two separate steps. The local copy is first saved to the server. This save operation occurs even if you do not make any changes to the document. Then, a separate request is performed to check in the document. Therefore, the ItemUpdating event or the ItemUpdated event occurs two times.
To work around this behavior, examine the vti_sourcecontrolcheckedoutby property inside an event receiver. If the vti_sourcecontrolcheckedoutby property exits in the BeforeProperties property but not in the AfterProperties property, the event was caused by checking in a document. The following sample code shows you how to do this.
if (properties.AfterProperties["vti_sourcecontrolcheckedoutby"] == null && properties.BeforeProperties["vti_sourcecontrolcheckedoutby"] != null)
//This is when the update event is triggered by check-in.
//This is triggered by events other than check-in action.
Article ID: 939307 - Last Review: Mar 4, 2009 - Revision: 1