I dont know if it is really necessary to do it with a workflow.
My idea is to realize this with help of an Event Receiver.
I did something similiar in the past. Therefore I wrote an EventReceiver with the following Event:
public override void ItemAdded(SPItemEventProperties properties)
{
try
{
if(properties.ListItem.File.CheckOutType == SPFile.SPCheckOutType.None)
{
int listNameID = GetListNameID(properties.ListTitle, properties.WebUrl, properties.OpenSite());
if (listNameID != 0)
{
if (properties.ListItem.FileSystemObjectType != SPFileSystemObjectType.Folder &&
properties.ListItem.FileSystemObjectType != SPFileSystemObjectType.Invalid)
{
Classes.MailMetaData metaData = new Classes.MailMetaData();
metaData.EventType = "ADD";
metaData.DocumentLink = (string)properties.ListItem[SPBuiltInFieldId.EncodedAbsUrl];
metaData.TriggerTimestamp = DateTime.Now;
metaData.DocumentName = properties.ListItem.File.Name;
metaData.ListName = properties.ListTitle;
metaData.ChangeUserName = properties.UserDisplayName;
metaData.ItemID = properties.ListItemId;
metaData.WebURL = properties.WebUrl;
metaData.ListNameID = listNameID;
InsertDatabase(metaData, properties.OpenSite());
}
}
}
}
catch (Exception ex)
{
SendErrorMail(string.Format("Error while handling ADD for item with ID '{0}', FileName '{1}' under '{2}' from User '{3}'.", properties.ListItemId.ToString(), properties.ListItem.File.Name, properties.WebUrl, properties.UserDisplayName), ex);
}
base.ItemAdded(properties);
}
Where GetListeNameID
gets the ID of the list (custom method) and MailMetaData
is a custom class aswell.
My method InsertDatabase
will put the data into a database which will be chekced by a QuartzJob every 15 minutes. This job handles my sending of the E-Mail.
Of course, you can handle the sending of the e-mail directly in the event receiver. I just did it for SoC.
Hope it helps.