Create a console app with following configuration:
App.Config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="WebApplicationName" value="SharePoint - 80"/>
</appSettings>
</configuration>
Program.cs
using System;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Workflow;
using System.Configuration;
namespace RemoveAllRunningWorkflows
{
class Program
{
static void Main(string[] args)
{
string WebApp = ConfigurationSettings.AppSettings["WebApplicationName"];
SPServiceCollection services = SPFarm.Local.Services;
foreach (SPService curService in services)
{
if (curService is SPWebService)
{
SPWebService webService = (SPWebService)curService;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
foreach (SPWebApplication webApp in webService.WebApplications)
{
if (string.Equals(webApp.Name, WebApp, StringComparison.OrdinalIgnoreCase))
{
SPSiteCollection sites = webApp.Sites;
foreach (SPSite site in sites)
{
foreach (SPWeb oWeb in site.AllWebs)
{
if (site.Url.ToString().ToLower().Contains("/personal/") || site.Url.ToString().ToLower().Contains("/sites/help") || oWeb.WebTemplate.ToString().Equals("SPSMSITEHOST") || oWeb.WebTemplate.ToString().Equals("CENTRALADMIN"))
{
//Skip
}
else
{
int intC = oWeb.Lists.Count;
for (int i = intC - 1; i >= 0; i--)
{
SPList list = oWeb.Lists[i];
if (list.BaseTemplate.Equals(SPListTemplateType.Announcements) || list.BaseTemplate.Equals(SPListTemplateType.DocumentLibrary) || list.BaseTemplate.Equals(SPListTemplateType.GenericList))
{
foreach (SPListItem oItem in list.Items)
{
SPWorkflowCollection itemWorkflowCollection = oItem.Workflows;
foreach (SPWorkflow itemWorkflow in itemWorkflowCollection)
{
if (!itemWorkflow.IsCompleted && itemWorkflow.InternalState == SPWorkflowState.Running)
{
foreach (SPWorkflowTask taskWorkflow in itemWorkflow.Tasks)
{
if (taskWorkflow["PercentComplete"].ToString() != "1")
{
taskWorkflow["Status"] = "Canceled";
taskWorkflow["PercentComplete"] = 1;
oWeb.AllowUnsafeUpdates = true;
taskWorkflow.Update();
oWeb.AllowUnsafeUpdates = false;
}
}
Console.WriteLine("Workflow Cancelled --> WebURL: " + oWeb.Url + " List: " + list.Title + " ItemID: " + oItem.ID + " ItemTitle: " + oItem.Title);
SPWorkflowManager.CancelWorkflow(itemWorkflow);
}
}
}
//list.Update();
}
}
oWeb.Dispose();
}
}
site.Dispose();
}
}
}
});
}
}
Console.WriteLine("------------------ Exceution Finished: Press key to escape ------------------");
Console.ReadKey();
}
}
}
No comments:
Post a Comment