Sharepoint - Best method for sending a reminder based on expiry date
In my view, The best way to do with a daily timer job.
Over the period if you have many documents(say 1000+), the corresponding queued workflows may cause a performance hit.
Workflows seem like the right way to do it. This should work no matter how far the expiry date is.
One question is whether the expiry date can be modified later after the workflow has started. If it is the case, you'll need to have two branches in parallel in your workflow: one that will wait for the expiry date, and the other that will force the workflow to stop and restart if the item is changed.
Update: some more detailed explanations can be found here:
http://markeev.com/Articles/item-expiration-reminders-in-sharepoint-using-workflow.aspx
You can always set Information Management Policy for your documents.
Take a look at : Policy Features in SharePoint Server
Microsoft SharePoint Server 2007/2010 includes four information management policy features to help you manage your content: expiration, auditing, document labels, and document bar codes.
Expiration policy is thing you need:
After the document expires, you can determine the actions that the policy control takes. For example, the policy can delete the document, or define a workflow task to have SharePoint Server 2007/2010 route the document for permission to destroy it. In addition, the expiration policy feature provides the capability for you to build and use a custom plug-in action to be performed on the item after it reaches its expiration date.
Some links with more details:
- How to configure Document expiration policy (2010)
- Records Management Feature: Expiration Policies (2007)
IMHO you should avoid any solution that requires development of long running workflows (they are unstable and not flexible) and if you go with custom solution for this task develop daily timer job like @AmitKumawat suggested.