samedi 1 septembre 2012

Sharepoint get all active workflows and active task for a specified listitem

int numberOfActiveWF = 0;
int numberOfActiveTasks = 0;
//SPWorkflowManager myWFMgr = new SPWorkflowManager();
using (SPSite objSite = new SPSite(ConstSite.SiteName))
{
    SPWeb objWeb = objSite.OpenWeb();
    SPList myList = objWeb.Lists[listName];

    SPQuery oQuery = new SPQuery();
    oQuery.Query = @"" +
                    @"" + userID + @"";

    SPListItemCollection collListItems = myList.GetItems(oQuery);


    foreach (SPListItem myListItem in collListItems)
    {
        // Get the workflows associated
        foreach (SPWorkflow myWF in myListItem.Workflows)
        {
            SPList workflowTasks = objWeb.Lists["Tasks"];

            SPWorkflowFilter filter = new SPWorkflowFilter();
            filter.InclusiveFilterStates = SPWorkflowState.Running;
            SPWorkflowTaskCollection workTaskColl = objWeb.Site.WorkflowManager.GetItemTasks(myListItem, filter);
            foreach (SPWorkflowTask spWFTask in workTaskColl)
            {
                SPQuery spQuery = new SPQuery();
                spQuery.Query = @"" +
                "" + userID + "" +
                "" + spWFTask.ID + "" +
                "" +
                "Completed" +
                "";
                numberOfActiveTasks += workflowTasks.GetItems(spQuery).Count;
            }

            numberOfActiveWF += objWeb.Site.WorkflowManager.GetItemActiveWorkflows(myListItem).Count;

        }
    }
}