Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Andrew Gibson 16 posts 107 karma points
    Dec 01, 2017 @ 11:13
    Andrew Gibson
    0

    publishing event, delete the content

    I have a MainSidebar Document Type and I've written code in the publishing event to prevent more than one of these being created, code below.

    This works, and the publishing is prevented, but a faded content document still exists in the content area that needs to be deleted. How can I also delete, or discard, the content please?

    [There is ent.ChangeTrashedState possibly(?).]

        public class Subscription : ApplicationEventHandler
    {
        protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
        {
            base.ApplicationStarted(umbracoApplication, applicationContext);
    
            Umbraco.Core.Services.ContentService.Publishing += ContentService_Publishing;
        }
    
        private void ContentService_Publishing(Umbraco.Core.Publishing.IPublishingStrategy sender, Umbraco.Core.Events.PublishEventArgs<Umbraco.Core.Models.IContent> e)
        {
            foreach (var ent in e.PublishedEntities)
            {
                if (ent.ContentType.Alias.ToUpper() == "MAINSIDEBAR")
                {
                    e.CancelOperation(new Umbraco.Core.Events.EventMessage("Sidebar", "Only one sidebar allowed", Umbraco.Core.Events.EventMessageType.Error));
    
                    LogHelper.Error(typeof(Subscription), $"Attempt to create additional sidebar(s) (writer id: {ent.WriterId})", new ApplicationException());
                }
            }
        }
    }
    
  • Andrew Gibson 16 posts 107 karma points
    Dec 01, 2017 @ 11:58
    Andrew Gibson
    0

    Darn, it just occurred to me that I should use the Creating event, doi! That should hopefully solve.

  • Andrew Gibson 16 posts 107 karma points
    Dec 01, 2017 @ 12:09
    Andrew Gibson
    0

    I now have a similar issue with the Creating version, in that it still goes into the document properties, and it no longer shows my notification.

    Looking for some hints ;)

        public class Subscription : ApplicationEventHandler
    {
        protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
        {
            base.ApplicationStarted(umbracoApplication, applicationContext);
    
            Umbraco.Core.Services.ContentService.Creating += ContentService_Creating;
        }
    
        private void ContentService_Creating(IContentService sender, NewEventArgs<IContent> e)
        {
            if (e.Alias.ToUpper() == "MAINSIDEBAR")
            {
                e.CancelOperation(new Umbraco.Core.Events.EventMessage("Sidebar", "Only one sidebar allowed", Umbraco.Core.Events.EventMessageType.Error));
    
                LogHelper.Error(typeof(Subscription), $"Attempt to create additional sidebar", new ApplicationException());
            }
        }
    }
    
  • Dan Diplo 1554 posts 6205 karma points MVP 6x c-trib
    Dec 01, 2017 @ 12:37
    Dan Diplo
    0

    The way I've done it in the past has been something like:

    private void ContentService_Creating(IContentService sender, NewEventArgs<IContent> e)
    {
        if (e.Alias.ToUpper() == "MAINSIDEBAR" && e.CanCancel)
        {
            e.Cancel = true;
            e.Messages.Add(new Umbraco.Core.Events.EventMessage("Sidebar", "Only one sidebar allowed", Umbraco.Core.Events.EventMessageType.Error));
        }
    }
    

    Not sure if that works better?

    If you want to log, I wouldn't raise an exception - use a warn instead.

  • Andrew Gibson 16 posts 107 karma points
    Dec 01, 2017 @ 13:09
    Andrew Gibson
    0

    Thank you.

    This runs, and it executes e.Cancel = true; but nothing happens in the UI/backoffice: the content is saved and appears in the tree.

    I also tried using Created, as a notice in VS says that Creating is obsolete, but, again, nothing happens.

  • Andrew Gibson 16 posts 107 karma points
    Dec 01, 2017 @ 13:20
    Andrew Gibson
    0

    I tried using Saving, and it kind-of worked, but generated an additional (404) error and left the backoffice in an indeterminate state (just with a loading icon).

    I've reverted to Publishing (with a Warn log) for the moment, but it's not as good as I'd like it :(

            private void ContentService_Publishing(Umbraco.Core.Publishing.IPublishingStrategy sender, Umbraco.Core.Events.PublishEventArgs<Umbraco.Core.Models.IContent> e)
        {
            foreach (var ent in e.PublishedEntities)
            {
                if (ent.ContentType.Alias.ToUpper() == "MAINSIDEBAR")
                {
                    e.CancelOperation(new Umbraco.Core.Events.EventMessage("Sidebar", "Only one sidebar allowed", Umbraco.Core.Events.EventMessageType.Error));
    
                    LogHelper.Warn(typeof(Subscription), $"Attempt to create additional sidebar(s) (writer id: {ent.WriterId})");
                }
            }
        }
    
  • This forum is in read-only mode while we transition to the new forum.

    You can continue this topic on the new forum by tapping the "Continue discussion" link below.

Please Sign in or register to post replies