protected override void SaveBindings()
        {
            var dataSourceId = DataSourceId.Deserialize(GetBinding <string>("SerializedDataSourceId"));
            var teaser       = (ISharedTeaser)DataFacade.GetDataFromDataSourceId(dataSourceId);

            Teaser.SharedTeaserType = teaser.DataSourceId.InterfaceType.AssemblyQualifiedName;
            Teaser.SharedTeaserId   = teaser.Id;
        }
Пример #2
0
    protected void Page_PreRender(object sender, EventArgs e)
    {
        var   dataSourceId = DataSourceId.Deserialize(Request.QueryString["DataSourceId"]);
        IData data         = DataFacade.GetDataFromDataSourceId(dataSourceId);

        if (data is IMediaFile)
        {
            ViewMediaToolbar.Visible     = true;
            ViewMediaContextMenu.Visible = true;
        }
        else
        {
            ViewDataToolbar.Visible     = true;
            ViewDataContextMenu.Visible = true;
        }

        using (var dc = new DataConnection())
        {
            var activities = VersioningFacade.GetActivities(dc, dataSourceId);

            activities = activities.Where(item => !(item.FirstOrDefault() == null &&
                                                    (item.Key.TaskType == "Edit" ||
                                                     item.Key.TaskType == "Rollback")));

            string eventTarget = Context.Request.Form["__EVENTTARGET"];
            if (eventTarget == "export")
            {
                GenerateXlsDocument(activities);
            }
            else
            {
                var entityToken = data.GetDataEntityToken();
                BuildReportTable(activities, entityToken);
            }
        }
    }
        private static void UpgradeStoredData()
        {
            const string _ET  = "EntityToken";
            const string _DSI = "DataSourceId";

            List <string> magicPropertyNames = new List <string> {
                _ET, _DSI
            };
            Func <DataFieldDescriptor, bool> isSerializedFieldFunc = g => magicPropertyNames.Any(s => g.Name.Contains(s));
            var descriptors = DataMetaDataFacade.AllDataTypeDescriptors.Where(f => f.Fields.Any(isSerializedFieldFunc));

            foreach (var descriptor in descriptors)
            {
                Type dataType = descriptor.GetInterfaceType();

                if (dataType == null)
                {
                    continue;
                }

                var propertiesToUpdate = new List <PropertyInfo>();
                foreach (var tokenField in descriptor.Fields.Where(isSerializedFieldFunc))
                {
                    var tokenProperty = dataType.GetProperty(tokenField.Name);
                    propertiesToUpdate.Add(tokenProperty);
                }

                using (var dc = new DataConnection(PublicationScope.Unpublished))
                {
                    var allRows = DataFacade.GetData(dataType).ToDataList();

                    foreach (var rowItem in allRows)
                    {
                        bool rowChange = false;

                        foreach (var tokenProperty in propertiesToUpdate)
                        {
                            string token = tokenProperty.GetValue(rowItem) as string;

                            if (tokenProperty.Name.Contains(_ET))
                            {
                                try
                                {
                                    var entityToken       = EntityTokenSerializer.Deserialize(token);
                                    var tokenReserialized = EntityTokenSerializer.Serialize(entityToken);

                                    if (tokenReserialized != token)
                                    {
                                        tokenProperty.SetValue(rowItem, tokenReserialized);
                                        rowChange = true;
                                    }
                                }
                                catch (Exception ex)
                                {
                                    _log.LogError(nameof(LegacySerializedEntityTokenUpgrader), "Failed to upgrade old token {0} from data type {1} as EntityToken.\n{2}", token, dataType.FullName, ex);
                                }
                            }

                            if (tokenProperty.Name.Contains(_DSI))
                            {
                                try
                                {
                                    token = EnsureValidDataSourceId(token);
                                    var dataSourceId             = DataSourceId.Deserialize(token);
                                    var dataSourceIdReserialized = dataSourceId.Serialize();

                                    if (dataSourceIdReserialized != token)
                                    {
                                        tokenProperty.SetValue(rowItem, dataSourceIdReserialized);
                                        rowChange = true;
                                    }
                                }
                                catch (Exception ex)
                                {
                                    _log.LogError(nameof(LegacySerializedEntityTokenUpgrader), "Failed to upgrade old token {0} from data type {1} as DataSourceId.\n{2}", token, dataType.FullName, ex);
                                }
                            }

                            if (rowChange)
                            {
                                DataFacade.Update(rowItem);
                            }
                        }
                    }
                }
            }
        }
Пример #4
0
        private static void UpgradeStoredData()
        {
            const string _ET  = "EntityToken";
            const string _DSI = "DataSourceId";

            List <string> magicPropertyNames = new List <string> {
                _ET, _DSI
            };
            Func <DataFieldDescriptor, bool> isSerializedFieldFunc = g => magicPropertyNames.Any(s => g.Name.Contains(s));
            var descriptors = DataMetaDataFacade.AllDataTypeDescriptors.Where(f => f.Fields.Any(isSerializedFieldFunc));

            foreach (var descriptor in descriptors)
            {
                Type dataType = descriptor.GetInterfaceType();

                if (dataType == null)
                {
                    continue;
                }

                var propertiesToUpdate = new List <PropertyInfo>();
                foreach (var tokenField in descriptor.Fields.Where(isSerializedFieldFunc))
                {
                    var tokenProperty = dataType.GetProperty(tokenField.Name);
                    propertiesToUpdate.Add(tokenProperty);
                }

                using (new DataConnection(PublicationScope.Unpublished))
                {
                    var allRows = DataFacade.GetData(dataType).ToDataList();

                    var toUpdate = new List <IData>();

                    int errors = 0, updated = 0;

                    foreach (var rowItem in allRows)
                    {
                        bool rowChange = false;

                        foreach (var tokenProperty in propertiesToUpdate)
                        {
                            string token = tokenProperty.GetValue(rowItem) as string;

                            try
                            {
                                string tokenReserialized;

                                if (tokenProperty.Name.Contains(_ET))
                                {
                                    var entityToken = EntityTokenSerializer.Deserialize(token);
                                    tokenReserialized = EntityTokenSerializer.Serialize(entityToken);
                                }
                                else if (tokenProperty.Name.Contains(_DSI))
                                {
                                    token = EnsureValidDataSourceId(token);
                                    var dataSourceId = DataSourceId.Deserialize(token);
                                    tokenReserialized = dataSourceId.Serialize();
                                }
                                else
                                {
                                    throw new InvalidOperationException("This line should not be reachable");
                                }

                                if (tokenReserialized != token)
                                {
                                    tokenProperty.SetValue(rowItem, tokenReserialized);
                                    rowChange = true;
                                }
                            }
                            catch (Exception ex)
                            {
                                errors++;
                                if (errors <= MaxErrorMessagesPerType)
                                {
                                    _log.LogError(LogTitle, $"Failed to upgrade old token '{token}' from data type '{dataType.FullName}' as EntityToken.\n{ex}");
                                }
                            }
                        }

                        if (rowChange)
                        {
                            updated++;
                            toUpdate.Add(rowItem);

                            if (toUpdate.Count >= 1000)
                            {
                                DataFacade.Update(toUpdate, true, false, false);
                                toUpdate.Clear();
                            }
                        }
                    }

                    if (toUpdate.Count > 0)
                    {
                        DataFacade.Update(toUpdate, true, false, false);
                        toUpdate.Clear();
                    }

                    _log.LogInformation(LogTitle, $"Finished updating serialized tokens for data type '{dataType.FullName}'. Rows: {allRows.Count}, Updated: {updated}, Errors: {errors}");
                }
            }
        }