Guid siteId = new Guid("siteIdGuid");
using (SPSite site = new SPSite(siteId))
{
foreach (SPWeb web in site.AllWebs)
{
// Only iterate through document libraries since this content type is associated with documents
foreach (SPList list in web.GetListsOfType(SPBaseType.DocumentLibrary))
{
// Make certain the content type exists in the library so you don't waste cycles stepping through a document library that doesn't contain it
SPContentType ctEntDoc = list.ContentTypes["Enterprise Document"];
if (ctEntDoc != null)
{
foreach (SPListItem item in list.Items)
{
// Only cancel active workflows that are associated with items of this content type
if (item.ContentType.Name == "Enterprise Document")
{
SPWorkflowManager mgr = site.WorkflowManager;
SPWorkflowCollection activeWFs = mgr.GetItemActiveWorkflows(item);
foreach (SPWorkflow activeWF in activeWFs)
{
SPWorkflowManager.CancelWorkflow(activeWF);
}
}
}
}
}
}
}
Wednesday, October 17, 2012
Programmatically locating and cancelling running workflows associated with a content type
If you're looking for a way to programmatically cancel all running workflows associated with a specific content type (i.e. a custom content type called "Enterprise Document" is highlighted in this example) across all of the document libraries contained within a given site collection, I've put together some code that can do this as follows:
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.