Search code examples
c#sharepoint-2010sharepoint-workflowsharepoint-clientobject

How to associate a SharePoint workflow using the Client Object Model?


Using the SharePoint Object Model (SP 2010), how can you associate a workflow with a given list?

I've been able to associate a workflow, but the configuration settings do not get saved back to SharePoint. In other words, the basicWorkflowAssociationCreationInformation is saved back to SharePoint, but any further configuration settings using the WorkflowAssociation are not saved.

Here is the code I've been working on:

var context = new ClientContext( url );
Web site = context.Web;

var query = context.LoadQuery( site.WorkflowTemplates.Where( x => x.Name == "My Template Name" ) );
context.ExecuteQuery();
WorkflowTemplate wfTemplate = query.Single();

var wfc = new WorkflowAssociationCreationInformation();
wfc.HistoryList = site.Lists.GetByTitle( "Workflow History" );
wfc.Name = "My Workflow Name";
wfc.TaskList = site.Lists.GetByTitle( "Tasks" );
wfc.Template = wfTemplate;

List list = site.Lists.GetByTitle( "List Name" );

WorkflowAssociation wf = list.WorkflowAssociations.Add( wfc );
wf.AllowManual = false; // is never updated
wf.AutoStartChange = false; // is never updated
wf.AutoStartCreate = true; // is never updated
wf.Enabled = true; // is never updated
string assocData = GetAssociationXml(); // internal method
wf.AssociationData = assocData; // is never updated

context.Load( wf );
context.ExecuteQuery(); // does not update the SP workflow with any of the new wf settings

Solution

  • list.WorkflowAssociations.Update(wf) after setting your config items will update the config items on your WorkflowAssociation.