protected SPFolder GetListFolder(FolderModelHost folderModelHost, FolderDefinition folderModel) { var list = folderModelHost.CurrentList; var currentFolderItem = folderModelHost.CurrentListItem; var serverRelativeUrl = folderModelHost.CurrentListItem == null ? list.RootFolder.ServerRelativeUrl : folderModelHost.CurrentListItem.Folder.ServerRelativeUrl; var currentUrl = serverRelativeUrl + "/" + folderModel.Name; TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Loading list folder with URL: [{0}]", currentUrl); var folder = folderModelHost.CurrentList.ParentWeb.GetFolder(currentUrl); if (folder != null && folder.Exists) { TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "List folder with URL does exist: [{0}]", currentUrl); } else { TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "List folder with URL does not exist: [{0}]", currentUrl); } return folder; }
public override void WithResolvingModelHost(object modelHost, DefinitionBase model, Type childModelType, Action<object> action) { var folderModelHost = modelHost.WithAssertAndCast<FolderModelHost>("modelHost", value => value.RequireNotNull()); var folderModel = model.WithAssertAndCast<FolderDefinition>("model", value => value.RequireNotNull()); if (folderModelHost.CurrentLibrary != null) { var currentFolder = EnsureLibraryFolder(folderModelHost, folderModel); var newContext = new FolderModelHost { CurrentLibrary = folderModelHost.CurrentLibrary, CurrentLibraryFolder = currentFolder }; action(newContext); } else if (folderModelHost.CurrentList != null) { var currentListItem = EnsureListFolder(folderModelHost, folderModel); var newContext = new FolderModelHost { CurrentList = folderModelHost.CurrentList, CurrentListItem = currentListItem }; action(newContext); } }
private SPFolder EnsureLibraryFolder(FolderModelHost folderModelHost, FolderDefinition folderModel) { var parentFolder = folderModelHost.CurrentLibraryFolder; // dirty stuff, needs to be rewritten var currentFolder = parentFolder .SubFolders .OfType<SPFolder>() .FirstOrDefault(f => f.Name == folderModel.Name); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = currentFolder == null || !currentFolder.Exists ? null : currentFolder, ObjectType = typeof(SPFolder), ObjectDefinition = folderModel, ModelHost = folderModelHost }); if (currentFolder == null || !currentFolder.Exists) { currentFolder = parentFolder.SubFolders.Add(folderModel.Name); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentFolder, ObjectType = typeof(SPFolder), ObjectDefinition = folderModel, ModelHost = folderModelHost }); } else { InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentFolder, ObjectType = typeof(SPFolder), ObjectDefinition = folderModel, ModelHost = folderModelHost }); currentFolder.Update(); } return currentFolder; }
protected SPFile GetFile(FolderModelHost folderHost, ModuleFileDefinition moduleFile) { if (folderHost.CurrentWebFolder != null) return folderHost.CurrentWebFolder.ParentWeb.GetFile(GetSafeFileUrl(folderHost.CurrentWebFolder, moduleFile)); if (folderHost.CurrentContentType != null) return folderHost.CurrentContentTypeFolder.ParentWeb.GetFile(GetSafeFileUrl(folderHost.CurrentContentTypeFolder, moduleFile)); if (folderHost.CurrentLibraryFolder != null) return folderHost.CurrentLibraryFolder.ParentWeb.GetFile(GetSafeFileUrl(folderHost.CurrentLibraryFolder, moduleFile)); throw new ArgumentException("CurrentWebFolder/CurrentContentType/CurrentLibraryFolder should not be null"); }
public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext) { var modelHost = modelHostContext.ModelHost; var model = modelHostContext.Model; var childModelType = modelHostContext.ChildModelType; var action = modelHostContext.Action; var folderModelHost = modelHost.WithAssertAndCast<FolderModelHost>("modelHost", value => value.RequireNotNull()); var folderModel = model.WithAssertAndCast<FolderDefinition>("model", value => value.RequireNotNull()); if (folderModelHost.CurrentLibrary != null) { var currentFolder = EnsureLibraryFolder(folderModelHost, folderModel); var newContext = new FolderModelHost { CurrentLibrary = folderModelHost.CurrentLibrary, CurrentLibraryFolder = currentFolder }; action(newContext); currentFolder.Update(); } else if (folderModelHost.CurrentList != null) { var currentListItem = EnsureListFolder(folderModelHost, folderModel); var newContext = new FolderModelHost { CurrentList = folderModelHost.CurrentList, CurrentListItem = currentListItem }; action(newContext); if (newContext.ShouldUpdateHost) currentListItem.Update(); } }
public override void WithResolvingModelHost(ModelHostResolveContext modelHostContext) { var modelHost = modelHostContext.ModelHost; var model = modelHostContext.Model; var childModelType = modelHostContext.ChildModelType; var action = modelHostContext.Action; var webDefinition = model as WebDefinition; SPWeb parentWeb = null; if (modelHost is SiteModelHost) parentWeb = (modelHost as SiteModelHost).HostSite.RootWeb; if (modelHost is WebModelHost) parentWeb = (modelHost as WebModelHost).HostWeb; using (var currentWeb = GetOrCreateWeb(parentWeb, webDefinition, false)) { if (childModelType == typeof(ModuleFileDefinition)) { var folderModelHost = new FolderModelHost { CurrentWeb = currentWeb, CurrentWebFolder = currentWeb.RootFolder, }; action(folderModelHost); } else { action(new WebModelHost { HostWeb = currentWeb }); } currentWeb.Update(); } }
public override void WithResolvingModelHost(object modelHost, DefinitionBase model, Type childModelType, Action<object> action) { var webModelHost = modelHost.WithAssertAndCast<WebModelHost>("modelHost", value => value.RequireNotNull()); var web = webModelHost.HostWeb; var listDefinition = model as ListDefinition; if (web != null && listDefinition != null) { var list = web.GetList(SPUtility.ConcatUrls(web.ServerRelativeUrl, listDefinition.GetListUrl())); if (childModelType == typeof(ModuleFileDefinition)) { action(list.RootFolder); } else if (childModelType == typeof(FolderDefinition)) { var folderModelHost = new FolderModelHost { CurrentLibrary = list as SPDocumentLibrary, CurrentLibraryFolder = list.RootFolder, CurrentList = (list as SPDocumentLibrary != null) ? null : list, CurrentListItem = null, }; action(folderModelHost); } else { action(list); } list.Update(); } else { action(modelHost); } }
private void ProcessContentTypeModuleFile(FolderModelHost folderHost, ModuleFileDefinition moduleFile) { var folder = folderHost.CurrentContentTypeFolder; var currentFile = folder.ParentWeb.GetFile(GetSafeFileUrl(folder, moduleFile)); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = currentFile.Exists ? currentFile : null, ObjectType = typeof(SPFile), ObjectDefinition = moduleFile, ModelHost = folderHost }); if (moduleFile.Overwrite) { var file = folder.Files.Add(moduleFile.FileName, moduleFile.Content, moduleFile.Overwrite); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = file, ObjectType = typeof(SPFile), ObjectDefinition = moduleFile, ModelHost = folderHost }); } else { InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentFile.Exists ? currentFile : null, ObjectType = typeof(SPFile), ObjectDefinition = moduleFile, ModelHost = folderHost }); } folder.Update(); }
private SPListItem EnsureListFolder(FolderModelHost folderModelHost, FolderDefinition folderModel) { var list = folderModelHost.CurrentList; var currentFolderItem = folderModelHost.CurrentListItem; var serverRelativeUrl = folderModelHost.CurrentListItem == null ? list.RootFolder.ServerRelativeUrl : folderModelHost.CurrentListItem.Folder.ServerRelativeUrl; var currentUrl = serverRelativeUrl + "/" + folderModel.Name; var currentFolder = folderModelHost.CurrentList.ParentWeb.GetFolder(currentUrl); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = currentFolder == null || !currentFolder.Exists ? null : currentFolder, ObjectType = typeof(SPFolder), ObjectDefinition = folderModel, ModelHost = folderModelHost }); if (!currentFolder.Exists) { currentFolderItem = list.AddItem(serverRelativeUrl, SPFileSystemObjectType.Folder); currentFolderItem[SPBuiltInFieldId.Title] = folderModel.Name; currentFolderItem.Update(); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentFolderItem.Folder, ObjectType = typeof(SPFolder), ObjectDefinition = folderModel, ModelHost = folderModelHost }); } else { InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentFolder, ObjectType = typeof(SPFolder), ObjectDefinition = folderModel, ModelHost = folderModelHost }); currentFolder.Update(); currentFolderItem = currentFolder.Item; } return currentFolderItem; }
public override void WithResolvingModelHost(object modelHost, DefinitionBase model, Type childModelType, Action<object> action) { var webDefinition = model as WebDefinition; SPWeb parentWeb = null; if (modelHost is SiteModelHost) parentWeb = (modelHost as SiteModelHost).HostSite.RootWeb; if (modelHost is WebModelHost) parentWeb = (modelHost as WebModelHost).HostWeb; using (var currentWeb = GetOrCreateWeb(parentWeb, webDefinition, false)) { if (childModelType == typeof(ModuleFileDefinition)) { var folderModelHost = new FolderModelHost { CurrentWeb = currentWeb, CurrentWebFolder = currentWeb.RootFolder, }; action(folderModelHost); } else { action(new WebModelHost { HostWeb = currentWeb }); } currentWeb.Update(); } }
private SPFolder EnsureLibraryFolder(FolderModelHost folderModelHost, FolderDefinition folderModel) { TraceService.Information((int)LogEventId.ModelProvisionCoreCall, "EnsureLibraryFolder()"); var parentFolder = folderModelHost.CurrentLibraryFolder; // dirty stuff, needs to be rewritten var currentFolder = GetLibraryFolder(folderModelHost, folderModel); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = currentFolder == null || !currentFolder.Exists ? null : currentFolder, ObjectType = typeof(SPFolder), ObjectDefinition = folderModel, ModelHost = folderModelHost }); if (currentFolder == null || !currentFolder.Exists) { TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new library folder"); currentFolder = parentFolder.SubFolders.Add(folderModel.Name); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentFolder, ObjectType = typeof(SPFolder), ObjectDefinition = folderModel, ModelHost = folderModelHost }); } else { TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing library folder"); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentFolder, ObjectType = typeof(SPFolder), ObjectDefinition = folderModel, ModelHost = folderModelHost }); currentFolder.Update(); } return currentFolder; }
private SPListItem EnsureListFolder(FolderModelHost folderModelHost, FolderDefinition folderModel) { TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "EnsureListFolder()"); var list = folderModelHost.CurrentList; var currentFolderItem = folderModelHost.CurrentListItem; var serverRelativeUrl = folderModelHost.CurrentListItem == null ? list.RootFolder.ServerRelativeUrl : folderModelHost.CurrentListItem.Folder.ServerRelativeUrl; var currentUrl = serverRelativeUrl + "/" + folderModel.Name; var currentFolder = GetListFolder(folderModelHost, folderModel); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioning, Object = currentFolder == null || !currentFolder.Exists ? null : currentFolder, ObjectType = typeof(SPFolder), ObjectDefinition = folderModel, ModelHost = folderModelHost }); if (!currentFolder.Exists) { TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new list folder"); currentFolderItem = list.AddItem(serverRelativeUrl, SPFileSystemObjectType.Folder); currentFolderItem[SPBuiltInFieldId.Title] = folderModel.Name; currentFolderItem.Update(); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentFolderItem.Folder, ObjectType = typeof(SPFolder), ObjectDefinition = folderModel, ModelHost = folderModelHost }); } else { TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing list folder"); InvokeOnModelEvent(this, new ModelEventArgs { CurrentModelNode = null, Model = null, EventType = ModelEventType.OnProvisioned, Object = currentFolder, ObjectType = typeof(SPFolder), ObjectDefinition = folderModel, ModelHost = folderModelHost }); currentFolder.Update(); currentFolderItem = currentFolder.Item; } return currentFolderItem; }
protected SPFolder GetLibraryFolder(FolderModelHost folderModelHost, FolderDefinition folderModel) { var parentFolder = folderModelHost.CurrentLibraryFolder; // dirty stuff, needs to be rewritten var folder = parentFolder .SubFolders .OfType<SPFolder>() .FirstOrDefault(f => f.Name == folderModel.Name); if (folder != null) { TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Library folder with name does exist: [{0}]", folderModel.Name); } else { TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Library folder with name does not exist: [{0}]", folderModel.Name); } return folder; }
public override void WithResolvingModelHost(object modelHost, DefinitionBase model, Type childModelType, Action<object> action) { var webModelHost = modelHost.WithAssertAndCast<WebModelHost>("modelHost", value => value.RequireNotNull()); var web = webModelHost.HostWeb; var listDefinition = model as ListDefinition; if (web != null && listDefinition != null) { // This is very important line -> adding new 'fake list' // // Nintex workflow deployment web service updates the list, so that version of the list becomes +4 // Current SPWeb has not been updated, current list will be 4 versions behind so you will have 'Save conflict' exception // // We try to add new list, so SPListCollection is invalidated. // Surely, we won't save this list. try { var tmpListId = web.Lists.Add(Guid.NewGuid().ToString(), string.Empty, Microsoft.SharePoint.SPListTemplateType.GenericList); var tmpList = web.Lists[tmpListId]; tmpList.Delete(); } catch (Exception) { } var list = web.GetList(SPUtility.ConcatUrls(web.ServerRelativeUrl, listDefinition.GetListUrl())); var listModelHost = new ListModelHost { HostList = list }; if (childModelType == typeof(ModuleFileDefinition)) { var folderModelHost = new FolderModelHost { CurrentLibrary = list as SPDocumentLibrary, CurrentLibraryFolder = list.RootFolder, CurrentList = (list as SPDocumentLibrary != null) ? null : list, CurrentListItem = null, }; action(folderModelHost); } else if (childModelType == typeof(FolderDefinition)) { var folderModelHost = new FolderModelHost { CurrentLibrary = list as SPDocumentLibrary, CurrentLibraryFolder = list.RootFolder, CurrentList = (list as SPDocumentLibrary != null) ? null : list, CurrentListItem = null, }; action(folderModelHost); } else if (typeof(PageDefinitionBase).IsAssignableFrom(childModelType)) { var folderModelHost = new FolderModelHost { CurrentLibrary = list as SPDocumentLibrary, CurrentLibraryFolder = list.RootFolder, CurrentList = (list as SPDocumentLibrary != null) ? null : list, CurrentListItem = null, }; action(folderModelHost); } else { action(listModelHost); } if (listModelHost.ShouldUpdateHost) list.Update(); } else { action(modelHost); } }