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())); } }
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 { // ?? } }
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 MapProperties(WorkflowAssociationDefinition definition, WorkflowAssociation 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 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(); } }
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 DeployContentTypeWorkflowAssociationDefinition(SPContentType modelHost, SPContentType contentType, 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.CreateWebContentTypeAssociation(workflowTemplate, definition.Name, definition.TaskListTitle, 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) { contentType.WorkflowAssociations.Add(existingWorkflowAssotiation); contentType.UpdateWorkflowAssociationsOnChildren(false, true, true, false); } else { contentType.WorkflowAssociations.Update(existingWorkflowAssotiation); contentType.UpdateWorkflowAssociationsOnChildren(false, true, true, false); } }
private SPWorkflowTemplate GetWorkflowTemplate(object modelHost, WorkflowAssociationDefinition def) { var targetWeb = GetWebFromModelHost(modelHost); return targetWeb.WorkflowTemplates.GetTemplateByName(def.WorkflowTemplateName, targetWeb.UICulture); }
private void DeployWebWorkflowAssociationDefinition(WebModelHost modelHost, Microsoft.SharePoint.SPWeb web, 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, web.Lists[definition.TaskListTitle], web.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) { web.WorkflowAssociations.Add(existingWorkflowAssotiation); web.Update(); } else { web.WorkflowAssociations.Update(existingWorkflowAssotiation); } }
private void DeployWebWorkflowAssociationDefinition(WebModelHost webModelHost, Microsoft.SharePoint.SPWeb web, WorkflowAssociationDefinition workflowAssociationModel) { // TODO }