private void stepFinalize_codeActivity_ExecuteCode(object sender, EventArgs e) { AddNewTreeRefresher addNewTreeRefresher = this.CreateAddNewTreeRefresher(this.EntityToken); IPage newPage = this.GetBinding <IPage>("NewPage"); newPage.SourceCultureName = UserSettings.ActiveLocaleCultureInfo.Name; Guid pageTypeId = newPage.PageTypeId; Guid?defaultPageTemplateId = PageServices.GetDefaultPageTemplateId(pageTypeId); if (defaultPageTemplateId != null) { newPage.TemplateId = defaultPageTemplateId.Value; } string sortOrder = this.GetBinding <string>("SelectedSortOrder"); Guid parentId = GetParentId(); using (new DataScope(DataScopeIdentifier.Administrated)) { IPageInsertionPosition position; if (sortOrder == SortOrder.Top) { position = PageInsertPosition.Top; } else if (sortOrder == SortOrder.Bottom) { position = PageInsertPosition.Bottom; } else if (sortOrder == SortOrder.Alphabetic) { position = PageInsertPosition.Alphabetic; } else if (sortOrder == SortOrder.Relative) { Guid relativeSelectedPageId = this.GetBinding <Guid>("RelativeSelectedPageId"); position = PageInsertPosition.After(relativeSelectedPageId); } else { throw new InvalidOperationException($"Not handled page instert position '{sortOrder}'"); } newPage = newPage.Add(parentId, position); } SetSaveStatus(true); addNewTreeRefresher.PostRefreshMesseges(newPage.GetDataEntityToken()); this.ExecuteWorklow(newPage.GetDataEntityToken(), typeof(EditPageWorkflow)); }
private IData CloneData <T>(T data) where T : class, IData { IData newdata = DataFacade.BuildNew <T>(); var dataProperties = typeof(T).GetPropertiesRecursively(); foreach (var propertyInfo in dataProperties.Where(f => f.CanWrite)) { if (typeof(T).GetPhysicalKeyProperties().Contains(propertyInfo) && propertyInfo.PropertyType == typeof(Guid)) { propertyInfo.SetValue(newdata, Guid.NewGuid()); } else { propertyInfo.SetValue(newdata, propertyInfo.GetValue(data)); } } var page = data as IPage; if (page != null) { if (IsRootPage(page)) { SetNewValue <T>(page, newdata, dataProperties.First(p => p.Name == nameof(IPage.Title))); } else if (!SetNewValue <T>(page, newdata, dataProperties.First(p => p.Name == nameof(IPage.MenuTitle)))) { SetNewValue <T>(page, newdata, dataProperties.First(p => p.Name == nameof(IPage.Title))); } SetNewValue <T>(page, newdata, dataProperties.First(p => p.Name == nameof(IPage.UrlTitle)), isUrl: true); PageInsertPosition.After(page.Id).CreatePageStructure(newdata as IPage, page.GetParentId()); } else { var labelProperty = typeof(T).GetProperty( DynamicTypeReflectionFacade.GetLabelPropertyName(typeof(T))); if (labelProperty != null && labelProperty.PropertyType == typeof(string)) { SetNewValue <T>(data, newdata, labelProperty); } } if (newdata is IPublishControlled) { (newdata as IPublishControlled).PublicationStatus = GenericPublishProcessController.Draft; } if (newdata is ILocalizedControlled) { (newdata as ILocalizedControlled).SourceCultureName = UserSettings.ActiveLocaleCultureInfo.Name; } newdata = DataFacade.AddNew(newdata); if (data is IPage) { CopyPageData(data as IPage, newdata as IPage); } return(newdata); }