Saturday, August 16, 2008 5:12 PM
Suman Chakrabarti
Starting/Canceling a SharePoint Designer workflow programmatically
I had enough trying to find this code, so I'm putting what I've pieced together to activate a workflow programmatically (specifically a SharePoint Designer Workflow)
public static string StartWorkflow(ContractListItem contract, string workflowName) {
SPListItem wfListItem = contract.ListItem;
SPWorkflowAssociationCollection wfAssocs = wfListItem.ParentList.WorkflowAssociations;
SPWorkflowAssociation activeWorkflowAssoc = null;
string errorMessage = string.Empty;
foreach (SPWorkflowAssociation wfAssoc in wfAssocs) {
if (wfAssoc.Name.Equals(workflowName)) {
activeWorkflowAssoc = wfAssoc;
break;
}
}
// if the workflow exists, start the workflow
SPWorkflow activeWorkflow = null;
if (activeWorkflowAssoc != null) {
try {
activeWorkflow = SPContext.Current.Site.WorkflowManager.StartWorkflow(
wfListItem,
activeWorkflowAssoc,
"<Data></Data>");
}
catch (Exception ex) {
ErrorHandler.LogError(Resources.ActionBarWebPart_WorkflowNotStarted, ex);
if (activeWorkflow != null)
SPWorkflowManager.CancelWorkflow(activeWorkflow);
errorMessage = Resources.ActionBarWebPart_WorkflowNotStarted;
}
}
else {
ErrorHandler.LogError(Resources.ActionBarWebPart_WorkflowDoesNotExist);
errorMessage = Resources.ActionBarWebPart_WorkflowDoesNotExist;
}
return errorMessage;
}
}