November Happy Hour will be moved to Thursday December 5th.

Manoj Kumawat
Mar 8, 2022
  1715
(1 votes)

Prevent content events from the loop

I'm writing a simpler solution to the problem that most of us keep getting while working with ContentEvents. There might be solution to this already but at least I couldn't find it easily. 

I was working on content events where on PublishedContent I had to refer products under the category. Now this needs ContentEvents

_contentEvents.PublishedContent += ContentEvents_PublishedContent;

private static void ContentEvents_PublishedContent(object sender, ContentEventArgs e)
{
    SaveDynamicCategory(e.Content);
}

The method above SaveDynamicCategory has a save method as below - 

ContentRepository.Save(content, SaveAction.Publish, AccessLevel.NoAccess);

This works perfectly but the problem that comes with it that it keeps on calling PublishedContent deligate. Therfore the solution is to use piped SaveAction along with SkipValidation as below - 

ContentRepository.Save(content, SaveAction.Publish | SaveAction.SkipValidation, AccessLevel.NoAccess);

And if publish method check this enum containing SkipValidation - if true then stop the loop and return it - 

private static void ContentEvents_PublishedContent(object sender, ContentEventArgs e)
{
   if (e is SaveContentEventArgs saveContentEventArgs && saveContentEventArgs.Action.HasFlag(SaveAction.SkipValidation))
    {
        return;
    }
    SaveDynamicCategory(e.Content);
}

Hope it helps. Thank you for your time.

Mar 08, 2022

Comments

Jake Jones
Jake Jones Mar 8, 2022 11:05 AM

Hi Manoj,

Thanks for sharing.

Why not just use PublishingContent? It occurs when content is requested to be published, so before the actual publish event, meaning you could modify the content before publishing and wouldn't need to re-publish it yourself.

If you do need to publish twice, would you be better off just checking the dynamic category value you're setting? The risk with your approach is that the SkipValidation flag now has a potentially unexpected consequence, which may be an issue if you end up using in elsewhere in the solution.

Anyway, just my thoughts 😉

Manoj Kumawat
Manoj Kumawat Mar 8, 2022 11:12 AM

Hello Jake, I expected that coming 😉 and thank you for pointing that out.

I had the bad example to share but this is not about publishing/published events. It is just about how you can use SaveContentEventArgs while you are stuck in loop at any event. I would like to correct that in blog too.

Please login to comment.
Latest blogs
Optimizely SaaS CMS + Coveo Search Page

Short on time but need a listing feature with filters, pagination, and sorting? Create a fully functional Coveo-powered search page driven by data...

Damian Smutek | Nov 21, 2024 | Syndicated blog

Optimizely SaaS CMS DAM Picker (Interim)

Simplify your Optimizely SaaS CMS workflow with the Interim DAM Picker Chrome extension. Seamlessly integrate your DAM system, streamlining asset...

Andy Blyth | Nov 21, 2024 | Syndicated blog

Optimizely CMS Roadmap

Explore Optimizely CMS's latest roadmap, packed with developer-focused updates. From SaaS speed to Visual Builder enhancements, developer tooling...

Andy Blyth | Nov 21, 2024 | Syndicated blog

Set Default Culture in Optimizely CMS 12

Take control over culture-specific operations like date and time formatting.

Tomas Hensrud Gulla | Nov 15, 2024 | Syndicated blog