Copied to clipboard

Flag this post as spam?

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


  • George Phillipson 108 posts 287 karma points
    Oct 01, 2019 @ 09:16
    George Phillipson
    0

    Cannot save a non-current version

    Hi I'm having a problem with saving content programmatically, I click a link on an email message and I'm taken to the site, on this occasion, the CMS is updated. But if I click the link again I get the following error:

    Cannot save a non-current version

    "   at Umbraco.Core.Persistence.Repositories.Implement.DocumentRepository.PersistUpdatedItem(IContent entity)\r\n   
    at Umbraco.Core.Cache.DefaultRepositoryCachePolicy`2.Update(TEntity entity, Action`1 persistUpdated)\r\n   
    at Umbraco.Core.Persistence.Repositories.Implement.RepositoryBase`2.Save(TEntity entity)\r\n   
    at Umbraco.Core.Services.Implement.ContentService.<>c__DisplayClass57_0.<CommitDocumentChangesInternal>g__SaveDocument|2(IContent c)\r\n   
    at Umbraco.Core.Services.Implement.ContentService.CommitDocumentChangesInternal(IScope scope, IContent content, ContentSavingEventArgs saveEventArgs, 
    IReadOnlyCollection`1 allLangs, Int32 userId, Boolean raiseEvents, Boolean branchOne, Boolean branchRoot)\r\n   
    at Umbraco.Core.Services.Implement.ContentService.SaveAndPublish(IContent content, String culture, Int32 userId, Boolean raiseEvents)\r\n   
    at Web.Controller.Controllers.ContactController.CoachConfirmed(String id)  
    

    In V7, I use to be able to do ApplicationContext.Current.Services.ContentService.RePublishAll();, but V8 does not seem to have that option anymore

    Any help would be appreciated George

  • Steve Megson 151 posts 1022 karma points MVP c-trib
    Oct 01, 2019 @ 10:03
    Steve Megson
    0

    I assume that the id being passed to your controller is a version ID, and you're calling ContentService.GetVersion(id) to get the IContent that you're passing in to ContentService.SaveAndPublish?

    The first time you click the link, that version will be published and a new version will be created as the unpublished version which can be edited. After that, Umbraco expects that the published version won't change, and any edits will be made to the new unpublished version.

    You could check the Published property to see that the version you're trying to publish has already been published. In that case, you could do nothing and return a "this has already been published" message.

    The real problems come if the page has been edited and published since the link was first clicked. Now the version you're trying to publish isn't published, but it's also not the current version. I think you'd have to use ContentService.Rollback to make your chosen version the current version, then you could publish it. However, it's probably better to show the user a message saying that the link is out-of-date rather than quietly overwrite the newer changes.

  • George Phillipson 108 posts 287 karma points
    Oct 01, 2019 @ 10:14
    George Phillipson
    0

    Hi Steve

    The Id > var content = contentService.GetById(new Guid(coachDocType)); is the nodeID, all I'm doing is updated two textboxes in the doctype which match the Guid Id passed in

    Regards George

  • Steve Megson 151 posts 1022 karma points MVP c-trib
    Oct 01, 2019 @ 10:49
    Steve Megson
    101

    Ah, you'll be running into this bug. The result from GetById(guid) is cached, and the cache doesn't get cleared properly when a new version is published. So the second time you hit the controller you get the same version as you did the first time, but it's no longer the current version so you can't change it.

    The caching for GetById(int) works properly, so this should be a possible workaround until the fix for that bug is released:

    var content = contentService.GetById(new Guid(coachDocType));
    content = contentService.GetById(content.Id);
    

    The second call to GetById will make sure that you've definitely got the current version, and not an out-of-date cached version.

  • George Phillipson 108 posts 287 karma points
    Oct 01, 2019 @ 10:53
    George Phillipson
    0

    Hi Steve

    Thanks for the reply, I'll fix the bug with your suggestion.

    Regards George

  • Mathias 47 posts 191 karma points
    Jan 20, 2020 @ 07:25
    Mathias
    0

    I ran into this problem also, the second call to GetById "solved" it

Please Sign in or register to post replies

Write your reply to:

Draft