private void MapProperties(WorkflowAssociationDefinition definition, SPWorkflowAssociation association) { if (!string.IsNullOrEmpty(definition.Description)) { association.Description = definition.Description; } if (!string.IsNullOrEmpty(definition.AssociationData)) { association.AssociationData = definition.AssociationData; } if (definition.AllowManual.HasValue) { association.AllowManual = definition.AllowManual.Value; } if (definition.AutoStartChange.HasValue) { association.AutoStartChange = definition.AutoStartChange.Value; } if (definition.AutoStartCreate.HasValue) { association.AutoStartCreate = definition.AutoStartCreate.Value; } if (definition.Enabled.HasValue) { association.Enabled = definition.Enabled.Value; } }
private WorkflowTemplate GetWorkflowTemplate(object modelHost, WorkflowAssociationDefinition def) { var targetWeb = GetWebFromModelHost(modelHost); var context = targetWeb.Context; var result = targetWeb.WorkflowTemplates.GetByName(def.WorkflowTemplateName); context.Load(result); context.ExecuteQueryWithTrace(); return(result); }
private void DeployListWorkflowAssociationDefinition(ListModelHost modelHost, SPList list, WorkflowAssociationDefinition definition) { var existingWorkflowAssotiation = FindExistringWorkflowAssotiation(modelHost, definition); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = existingWorkflowAssotiation, ObjectType = typeof(SPWorkflowAssociation), ObjectDefinition = definition, ModelHost = modelHost }); bool isNew = false; if (existingWorkflowAssotiation == null) { var workflowTemplate = GetWorkflowTemplate(modelHost, definition); if (workflowTemplate == null) { throw new SPMeta2Exception( string.Format("Cannot find workflow template by definition:[{0}]", definition)); } existingWorkflowAssotiation = SPWorkflowAssociation.CreateListAssociation(workflowTemplate, definition.Name, list.ParentWeb.Lists[definition.TaskListTitle], list.ParentWeb.Lists[definition.HistoryListTitle]); isNew = true; } MapProperties(definition, existingWorkflowAssotiation); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = existingWorkflowAssotiation, ObjectType = typeof(SPWorkflowAssociation), ObjectDefinition = definition, ModelHost = modelHost }); if (isNew) { list.WorkflowAssociations.Add(existingWorkflowAssotiation); list.Update(); } else { list.WorkflowAssociations.Update(existingWorkflowAssotiation); } }
private SPWorkflowTemplate GetWorkflowTemplate(object modelHost, WorkflowAssociationDefinition def) { var targetWeb = GetWebFromModelHost(modelHost); return(targetWeb.WorkflowTemplates.GetTemplateByName(def.WorkflowTemplateName, targetWeb.UICulture)); }
protected SPWorkflowAssociation FindExistringWorkflowAssotiation(object modelHost, WorkflowAssociationDefinition def) { if (modelHost is ListModelHost) { var list = (modelHost as ListModelHost).HostList; return(list.WorkflowAssociations .GetAssociationByName(def.Name, list.ParentWeb.UICulture)); } else if (modelHost is WebModelHost) { var web = (modelHost as WebModelHost).HostWeb; return(web.WorkflowAssociations .GetAssociationByName(def.Name, web.UICulture)); } else if (modelHost is SPContentType) { var contentType = (modelHost as SPContentType); var web = contentType.ParentWeb; return(contentType.WorkflowAssociations .GetAssociationByName(def.Name, web.UICulture)); } else if (modelHost is ContentTypeLinkModelHost) { var listContentTypeHost = (modelHost as ContentTypeLinkModelHost); // don't update content type link within list if (listContentTypeHost.HostList != null) { listContentTypeHost.ShouldUpdateHost = false; } var contentType = listContentTypeHost.HostContentType; var web = contentType.ParentWeb; return(contentType.WorkflowAssociations .GetAssociationByName(def.Name, web.UICulture)); } else if (modelHost is ContentTypeModelHost) { var contentType = (modelHost as ContentTypeModelHost).HostContentType; var web = contentType.ParentWeb; return(contentType.WorkflowAssociations .GetAssociationByName(def.Name, web.UICulture)); } else { throw new SPMeta2NotImplementedException( string.Format("Unsupported model host: WorkflowAssociation under {0} is not implemented yet", modelHost.GetType())); } }
protected SPWorkflowAssociation FindExistringWorkflowAssotiation(object modelHost, WorkflowAssociationDefinition def) { if (modelHost is ListModelHost) { var list = (modelHost as ListModelHost).HostList; return(list.WorkflowAssociations .GetAssociationByName(def.Name, list.ParentWeb.UICulture)); } if (modelHost is WebModelHost) { var web = (modelHost as WebModelHost).HostWeb; return(web.WorkflowAssociations .GetAssociationByName(def.Name, web.UICulture)); } if (modelHost is SPContentType) { var contentType = (modelHost as SPContentType); var web = contentType.ParentWeb; return(contentType.WorkflowAssociations .GetAssociationByName(def.Name, web.UICulture)); } else { throw new SPMeta2NotImplementedException( string.Format("Unsupported model host: WorkflowAssociation under {0} is not implemented yet", modelHost.GetType())); } }
public static TModelNode AddWorkflowAssociation <TModelNode>(this TModelNode model, WorkflowAssociationDefinition definition, Action <WorkflowAssociationModelNode> action) where TModelNode : ModelNode, IWorkflowAssociationHostModelNode, new() { return(model.AddTypedDefinitionNode(definition, action)); }
public static TModelNode AddWorkflowAssociation <TModelNode>(this TModelNode model, WorkflowAssociationDefinition definition) where TModelNode : ModelNode, IWorkflowAssociationHostModelNode, new() { return(AddWorkflowAssociation(model, definition, null)); }
private void DeployListWorkflowAssociationDefinition(ListModelHost modelHost, SPList list, WorkflowAssociationDefinition definition) { var existingWorkflowAssotiation = FindExistringWorkflowAssotiation(modelHost, definition); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = existingWorkflowAssotiation, ObjectType = typeof(SPWorkflowAssociation), ObjectDefinition = definition, ModelHost = modelHost }); bool isNew = false; if (existingWorkflowAssotiation == null) { var workflowTemplate = GetWorkflowTemplate(modelHost, definition); existingWorkflowAssotiation = SPWorkflowAssociation.CreateListAssociation(workflowTemplate, definition.Name, list.Lists[definition.TaskListTitle], list.Lists[definition.HistoryListTitle]); isNew = true; } MapProperties(definition, existingWorkflowAssotiation); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = existingWorkflowAssotiation, ObjectType = typeof(SPWorkflowAssociation), ObjectDefinition = definition, ModelHost = modelHost }); if (isNew) { list.WorkflowAssociations.Add(existingWorkflowAssotiation); } else { // ?? } }
private void DeployWebWorkflowAssociationDefinition(WebModelHost webModelHost, Microsoft.SharePoint.SPWeb web, WorkflowAssociationDefinition workflowAssociationModel) { // TODO }
protected SPWorkflowAssociation FindExistringWorkflowAssotiation(object modelHost, WorkflowAssociationDefinition def) { if (modelHost is ListModelHost) { var list = (modelHost as ListModelHost).HostList; return(list.WorkflowAssociations .GetAssociationByName(def.Name, list.ParentWeb.UICulture)); } if (modelHost is WebModelHost) { throw new SPMeta2NotImplementedException("todo"); } throw new SPMeta2NotSupportedException("model host should be of type ListModelHost or WebModelHost"); }
protected WorkflowAssociation FindExistringWorkflowAssotiation(object modelHost, WorkflowAssociationDefinition def) { if (modelHost is ListModelHost) { var list = (modelHost as ListModelHost).HostList; var context = list.Context; var defName = def.Name; var res = context.LoadQuery(list.WorkflowAssociations.Where(w => w.Name == defName)); context.ExecuteQueryWithTrace(); return(res.FirstOrDefault()); } if (modelHost is WebModelHost) { var web = (modelHost as WebModelHost).HostWeb; var context = web.Context; var defName = def.Name; var res = context.LoadQuery(web.WorkflowAssociations.Where(w => w.Name == defName)); context.ExecuteQueryWithTrace(); return(res.FirstOrDefault()); } if (modelHost is ModelHostContext) { var contentType = (modelHost as ModelHostContext).ContentType; var context = contentType.Context; var defName = def.Name; var res = context.LoadQuery(contentType.WorkflowAssociations.Where(w => w.Name == defName)); context.ExecuteQueryWithTrace(); return(res.FirstOrDefault()); } throw new SPMeta2NotSupportedException("model host should be of type ListModelHost or WebModelHost"); }
private void DeployListWorkflowAssociationDefinition(ListModelHost modelHost, List list, WorkflowAssociationDefinition definition) { var context = list.Context; var existingWorkflowAssotiation = FindExistringWorkflowAssotiation(modelHost, definition); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = existingWorkflowAssotiation, ObjectType = typeof(WorkflowAssociation), ObjectDefinition = definition, ModelHost = modelHost }); if (existingWorkflowAssotiation == null || (existingWorkflowAssotiation.ServerObjectIsNull.HasValue && existingWorkflowAssotiation.ServerObjectIsNull.Value)) { var workflowTemplate = GetWorkflowTemplate(modelHost, definition); if (workflowTemplate == null || (workflowTemplate.ServerObjectIsNull.HasValue && workflowTemplate.ServerObjectIsNull.Value)) { throw new SPMeta2Exception( string.Format("Cannot find workflow template by definition:[{0}]", definition)); } var historyList = list.ParentWeb.QueryAndGetListByTitle(definition.HistoryListTitle); var taskList = list.ParentWeb.QueryAndGetListByTitle(definition.TaskListTitle); var newWorkflowAssotiation = list.WorkflowAssociations.Add(new WorkflowAssociationCreationInformation { Name = definition.Name, Template = workflowTemplate, HistoryList = historyList, TaskList = taskList }); MapProperties(definition, newWorkflowAssotiation); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = newWorkflowAssotiation, ObjectType = typeof(WorkflowAssociation), ObjectDefinition = definition, ModelHost = modelHost }); newWorkflowAssotiation.Update(); context.ExecuteQueryWithTrace(); } else { MapProperties(definition, existingWorkflowAssotiation); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = existingWorkflowAssotiation, ObjectType = typeof(WorkflowAssociation), ObjectDefinition = definition, ModelHost = modelHost }); existingWorkflowAssotiation.Update(); context.ExecuteQueryWithTrace(); } }
private void DeployWebWorkflowAssociationDefinition(WebModelHost modelHost, Web web, WorkflowAssociationDefinition definition) { var context = web.Context; var existingWorkflowAssotiation = FindExistringWorkflowAssotiation(modelHost, definition); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = existingWorkflowAssotiation, ObjectType = typeof(WorkflowAssociation), ObjectDefinition = definition, ModelHost = modelHost }); if (existingWorkflowAssotiation == null || (existingWorkflowAssotiation.ServerObjectIsNull.HasValue && existingWorkflowAssotiation.ServerObjectIsNull.Value)) { var workflowTemplate = GetWorkflowTemplate(modelHost, definition); if (workflowTemplate == null || (workflowTemplate.ServerObjectIsNull.HasValue && workflowTemplate.ServerObjectIsNull.Value)) { throw new SPMeta2Exception( string.Format("Cannot find workflow template by definition:[{0}]", definition)); } var historyList = web.QueryAndGetListByTitle(definition.HistoryListTitle); var taskList = web.QueryAndGetListByTitle(definition.TaskListTitle); var newWorkflowAssotiation = web.WorkflowAssociations.Add(new WorkflowAssociationCreationInformation { Name = definition.Name, Template = workflowTemplate, HistoryList = historyList, TaskList = taskList }); MapProperties(definition, newWorkflowAssotiation); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = newWorkflowAssotiation, ObjectType = typeof(WorkflowAssociation), ObjectDefinition = definition, ModelHost = modelHost }); web.Update(); context.ExecuteQueryWithTrace(); } else { MapProperties(definition, existingWorkflowAssotiation); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = existingWorkflowAssotiation, ObjectType = typeof(WorkflowAssociation), ObjectDefinition = definition, ModelHost = modelHost }); // no update // gives weird null ref exception // Enhance WorkflowAssociationDefinition - add more tests on updatability #871 // https://github.com/SubPointSolutions/spmeta2/issues/871 //existingWorkflowAssotiation.Update(); //web.Update(); context.ExecuteQueryWithTrace(); } }