Views: 314
Number of votes: 0
Average rating:

Job for deleting removed properties

I've been annoyed by properties staying on page types after deleting them from code, especially on the .Net 5 version where "From Code" doesn't seem to work. I couldn't find a way to do this, so I wrote this quick and dirty job for removing them. I simply load all properties from optimizely, and check if a property with the same name exists on the type, and if not, delete it.

It has not been tested thoroughly, and I would definitely not use it in a production environment, but it saves me a lot of annoynance when working locallly.

This deletes all data related to the property, so use with caution.

public class RemovedDeletedPropertiesJob : ScheduledJobBase
    {
        private readonly IContentTypeRepository _contentTypeRepository;
        private readonly IPropertyDefinitionRepository _propertyDefinitionRepository;

        private int _amountDeleted;
        
        public RemovedDeletedPropertiesJob(IContentTypeRepository contentTypeRepository, 
            IPropertyDefinitionRepository propertyDefinitionRepository)
        {
            _contentTypeRepository = contentTypeRepository;
            _propertyDefinitionRepository = propertyDefinitionRepository;
        }
        
        public override string Execute()
        {
            _amountDeleted = 0;
            
            foreach (var contentType in _contentTypeRepository.List())
            {
                var clone = contentType.CreateWritableClone() as ContentType;
                
                if(clone == null) continue;
                
                foreach (var prop in _propertyDefinitionRepository.List(contentType.ID))
                {
                    try
                    {
                        if (contentType.ModelType.GetProperty(prop.Name) == null)
                        {
                            _propertyDefinitionRepository.Delete(prop);
                            _amountDeleted++;
                        }
                    }
                    catch (Exception e) { }
                }
            }

            return $"Removed {_amountDeleted} properties";
        }
Nov 05, 2021

Per Nergård
( By Per Nergård, 11/5/2021 12:52:13 PM)

I did this MissingProperties initmodule/plugin a long tme ago but the logic in that for identifying missing properties does not work in :Net Core version?

 https://world.optimizely.com/blogs/Per-Nergard/Dates/2016/4/missing-properties-initializationmodule/

Christian Thorvik
( By Christian Thorvik, 11/5/2021 1:21:50 PM)

I only found the old blog post where the code is missing, so I haven't seen this one. It seems to work though. Only the appsettings part doesn't work, but that's simple enough to fix

Per Nergård
( By Per Nergård, 11/5/2021 1:41:59 PM)

NIce!


Please login to comment.