Episerver - Page Type Becomes None Editable when intercepting PublishedContent Event

270 Views Asked by At

I am hooking in to the PublishedContent Event within Episerver, so when a user publishes a particular page type some logic is performed (create pdf) and a string value is saved in to one of the properties.(the path to the pdf)

This is working, the PDF is created and the path to the PDF is also saved.

However the problem I have is after the publish is complete, all the properties become readonly, I have to click another node, then click that one again before I can edit it. - Is this normal, or is it something to do with the way I do the save?

This is my code:

public void Initialize(InitializationEngine context)
{
    var events = ServiceLocator.Current.GetInstance<IContentEvents>();
    events.PublishedContent += EventsPublishedContent;
}

private void EventsPublishedContent(object sender, ContentEventArgs e)
{
    if (e.Content is myType)
    {
        var currentPage = e.Content as RatePlanPageType;

        var pdfPath = businessLogic.CreatePdf(e.content);

        var clone = currentPage.CreateWritableClone();

        clone.Property["PdfFiles"].Value = pdfPath;

        var contentRepository = ServiceLocator.Current.GetInstance<IContentRepository>();

        contentRepository.Save(clone, SaveAction.Save);
    }
}

and this is what all the properties look like in the UI after the save.

enter image description here

If I click another node in the tree, then click this one again, it goes back to normal and all the data is saved correctly.

2

There are 2 best solutions below

0
On BEST ANSWER

I didn't relise that I was hooked in to the wrong method, changed it from

events.PublishedContent = 

to

events.PublishingContent = 

and it works perfectly.

Explanation I got from Episerver world:

Your code publishes a new version of the content (check the versions gadget to confirm this). This means that you are no longer looking at the primary draft therefore the UI makes it readonly. You can hook into the publishing event which should stop this behaviour or don't publish a new version of content in your Save method.

0
On

if you want to save the cloned property data on PublishedContent event.then you have to apply SaveAction.Patch instead of SaveAction.Save

contentRepository.Save(clone, SaveAction.Patch);