The task
Display SharePoint lists or libraries with active workflow associations.
Display item that have running or completed workflow instances and workflow status for this item.
In our scenario we have a document library with associated Disposition Approval workflow started on the document:
Solution
1. Get Workflow Association data for the certain list or library.
SPList list = ...; // Initialize your list instance here
if (list.WorkflowAssociations.Count != 0)
{
foreach (SPWorkflowAssociation workflowAssociation in list.WorkflowAssociations)
{
Guid gId = workflowAssociation.Id;
string sName = workflowAssociation.Name;
... // output the values you have got
// in our scenario we add them to Hashtable object
hashtable.Add(gId, sName);
}
}
2. Get workflow instance data for the certain list item or document.
We can access workflow instance data from the Workflows property of SPListItem object:
foreach (SPListItem item in list.Items)
{
foreach (SPWorkflow workflow in item.Workflows)
{
string sWFName = hashtable[workflow.AssociationId]; // SPWorkflow object only stores AssociationId, that's why we needed a dictionary for Id, Name pairs
string sStatus = InterpretWFStatus(item[item.Fields[sWFName].InternalName].ToString()); // InterpretWFStatus will be explained later
... // output workflow instance data
}
}
On workflow status in SharePoint. When you associate workflow with SharePoint list or library the column with the same title as workflow name is created for this list to capture workflow status. The problem with this column is that it is an integer value and SharePoint controls display appropriate string value to user.
After some research I have created a method to display string value of the workflow status using integer value:
string InterpretWFStatus(string nStatus)
{
if (nStatus == "1")
return "Failed On Start";
if (nStatus == "2")
return "In Progress";
if (nStatus == "3")
return "Error Occurred";
if (nStatus == "4")
return "Stopped By User";
if (nStatus == "5")
return "Completed";
if (nStatus == "6")
return "Failed On Start Retrying";
if (nStatus == "7")
return "Error Occurred Retrying";
if (nStatus == "8")
return "View Query Overflow";
if (nStatus == "0")
return "Not Started";
if (nStatus == "16")
return "Approved";
return "Custom";
}
The issue here is that if we have some other value which we don't know it will return "Custom" as workflow status. I haven't done any research yet as how to get true value of the custom status. I'm going to do this in the future.
Below is the image of how it works on the Web site:
In the next article I will explain how to create links to workflow statistics and how to get workflow tasks programmatically.
Stay tuned :)
Display SharePoint lists or libraries with active workflow associations.
Display item that have running or completed workflow instances and workflow status for this item.
In our scenario we have a document library with associated Disposition Approval workflow started on the document:
Solution
1. Get Workflow Association data for the certain list or library.
SPList list = ...; // Initialize your list instance here
if (list.WorkflowAssociations.Count != 0)
{
foreach (SPWorkflowAssociation workflowAssociation in list.WorkflowAssociations)
{
Guid gId = workflowAssociation.Id;
string sName = workflowAssociation.Name;
... // output the values you have got
// in our scenario we add them to Hashtable object
hashtable.Add(gId, sName);
}
}
2. Get workflow instance data for the certain list item or document.
We can access workflow instance data from the Workflows property of SPListItem object:
foreach (SPListItem item in list.Items)
{
foreach (SPWorkflow workflow in item.Workflows)
{
string sWFName = hashtable[workflow.AssociationId]; // SPWorkflow object only stores AssociationId, that's why we needed a dictionary for Id, Name pairs
string sStatus = InterpretWFStatus(item[item.Fields[sWFName].InternalName].ToString()); // InterpretWFStatus will be explained later
... // output workflow instance data
}
}
On workflow status in SharePoint. When you associate workflow with SharePoint list or library the column with the same title as workflow name is created for this list to capture workflow status. The problem with this column is that it is an integer value and SharePoint controls display appropriate string value to user.
After some research I have created a method to display string value of the workflow status using integer value:
string InterpretWFStatus(string nStatus)
{
if (nStatus == "1")
return "Failed On Start";
if (nStatus == "2")
return "In Progress";
if (nStatus == "3")
return "Error Occurred";
if (nStatus == "4")
return "Stopped By User";
if (nStatus == "5")
return "Completed";
if (nStatus == "6")
return "Failed On Start Retrying";
if (nStatus == "7")
return "Error Occurred Retrying";
if (nStatus == "8")
return "View Query Overflow";
if (nStatus == "0")
return "Not Started";
if (nStatus == "16")
return "Approved";
return "Custom";
}
The issue here is that if we have some other value which we don't know it will return "Custom" as workflow status. I haven't done any research yet as how to get true value of the custom status. I'm going to do this in the future.
Below is the image of how it works on the Web site:
In the next article I will explain how to create links to workflow statistics and how to get workflow tasks programmatically.
Stay tuned :)
Comments
Post a Comment