
You can hook SharePoint eventreceivers to lists and libraries to execute custom code whenever a new document is being uploaded to a document library. The ‘ItemAdding’ event fires when a user adds a new document to a library, but also whenever a new folder is created. However, due to the vast variety of ways to upload a document (one document, multi-document, WebDAV, Office, WebService, etc.), the event always seems to behave a little different.
Having a reliable way to check whether the user added a new document or created a new folder in a document library is key for a solid eventreceiver.
I have written a neat little extension method which will return the FileSystemObjectType of the new item:
public static class SPItemEventPropertiesExtensions { public static SPFileSystemObjectType FSOType(this SPItemEventProperties properties) { object filesizeObj = properties.AfterProperties["vti_filesize"]; if (filesizeObj != null) { int filesize = 0; if (Int32.TryParse(filesizeObj.ToString(), out filesize)) { return (filesize > 0) ? SPFileSystemObjectType.File : SPFileSystemObjectType.Folder; } } return SPFileSystemObjectType.Folder; } }
This extension method can be used in the ItemAdding event:
public override void ItemAdding(SPItemEventProperties properties) { base.ItemAdding(properties); if (properties.FSOType() == SPFileSystemObjectType.Folder) return; }
Or you can use this code:
string fileSystemObjectType = (string)properties.AfterProperties[“FileSystemObjectType”];
bool isFolder = fileSystemObjectType != null && fileSystemObjectType == “Folder”;