Skip to main content

Mighty SharePoint Workflows - part 1 - workflow association, workflow instance

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 :)


Comments

Popular posts from this blog

Setting up External Content Type for SQL Server database using SQL Server authentication - SharePoint 2010 Foundation

This post is a follow up on the issues that I have got setting up External Content Type (ECT) on SharePoint 2010 Foundation that was going to connect to remote SQL Server database for information. I cannot use my SharePoint user accounts to access SQL Server. According to the information I have discovered ECT and Business Connectivity Services are available in the SharePoint 2010 Foundation, but there are some issues if you want to use authentication methods in your external connections that are different from Windows Identity or Current User Identity. This is because there is no Secure Store Service in SharePoint 2010 Foundation which serves as an impersonation hub and is only available in SharePoint 2010 Server edition. The issues are coming from the fact that you can actually create ECT in SharePoint Designer 2010 providing just Secure Store ID and system would ask you for credentials and here you go, but when you try to use your ECT in External Lists or as a lookup columns you w...

Document Sets - SharePoint 2010 - Part 1

Hi again, in this post I am going to demonstrate how set up and start using Document Sets in SharePoint 2010. In Beta version there was a little problem when working with Document Sets. You could see the discussion around it here: Document Set content type issue . Now it is fixed and I will show you how to set up Document Sets properly to also use Keywords. 1. Activate two site collection features - Document Sets and Document ID Service: 2. Select a document library settings where you want to implement Document Sets. In my case it is Shared Documents. When you have selected the settings go to Advanced settings and then allow content types management: 3. Add an existing content type called Document Set: 4. Now I want to create a new Document Set. I have a sales opportunity and I have two documents related to this sales opportunity. So first I select New Document -> Document Set command, then provide name and description and there it is: 5. To check if our Document ID...

iPhone 4 Personal Hotspot on Optus Prepaid

Recently I decided to try the Personal Hotspot feature of iPhone 4, but found some obstacles. Problem When I try to activate or set up Personal Hotspot on my iPhone: I am getting the following message: "To enable Personal Hotspot on this account, contact OPTUS". It means I can't use that feature of my phone. Background I use prepaid mobile service from Optus with iPhone 4. I bought my phone directly from Apple and it's not locked to any mobile service provider. As a part of my prepaid service I have got some data which is "mobile Internet and can be used within Australia for internet browsing and downloading content" (from Optus site ). I pay for mobile services and data. I contacted Optus as per message above in Twitter. Here's the conversation I have got with Optus representatives: The details are on my Twitter account @SlavaGorbunov The  http://optus.com.au  says "Please note: iPhone Personal Hotspot / Tethering is not...