Copied to clipboard

Flag this post as spam?

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


  • Adam Hutchinson 3 posts 73 karma points
    Apr 20, 2020 @ 11:35
    Adam Hutchinson
    0

    Error when saving to database on saving/publishing a node

    Hi, I'm trying to create a custom Audit Trail when saving one of my custom Document Types, the record in the database is created but I am greeted with an error within the BackOffice when it's saved, the node doesn't seem to be created/saved and there's no record of it anywhere. Please find my code snippets below.

    case Message.ModelTypeAlias:
    {
        if (string.IsNullOrEmpty(node.GetValue<string>("dateCreated")))
        {
            node.SetValue("dateCreated", DateTime.Now);
            node.SetValue("isRead", false);
    
            var memberID = node.GetValue("member").ToString();
            var guid = Guid.ParseExact(memberID.Substring(memberID.Length - 32), "N");
            var memberService = Current.Services.MemberService;
    
            var member = memberService.GetByKey(guid);
    
            using (_umbracoContext.EnsureUmbracoContext())
            {
                if (member != null)
                    _auditService.Insert(Core.Enums.AuditEnum.AuditType.MessageCreated, member.Id, null);
                else
                    _auditService.Insert(Core.Enums.AuditEnum.AuditType.MessageCreated, null, null);
            }
        }
        break;
    }
    

    Above shows the switch statement in the ContentService_Saving override method.

    Below shows my Insert code:

    public bool Insert(AuditType type, int? memberID = null, int? contentID = null){
    Dictionary<string, string> data = new Dictionary<string, string>();
    using (var scope = _scopeProvider.CreateScope())
    {
        try
        {
    
            var uHelper = Umbraco.Web.Composing.Current.UmbracoHelper;
            var member = memberID != null ? _services.MemberService.GetById((int)memberID) : null;
            var content = contentID != null ? uHelper.Content((int)contentID) : null;
            var db = scope.Database;
    
            var contentName = content != null ? content.Name : "";
    
            Audit toAdd = new Audit();
            toAdd.ContentID = contentID;
            toAdd.MemberID = memberID;
            toAdd.MemberName = member != null ? member.Name : "";
            toAdd.ContentName = contentName;
            toAdd.TimeStamp = DateTime.Now;
            toAdd.Type = type;
    
            db.Insert<Audit>(toAdd);
            db.CompleteTransaction();
            scope.Complete();
            return true;
        }
        catch(Exception ex)
        {
            _logger.Error(typeof(AuditService), ex);
            scope.Complete();
            return false;
        }
    
    }
    

    Lastly, please find my stack trace here:

    { Exception System.NullReferenceException: Object reference not set to an instance of an object. at Umbraco.Core.Scoping.Scope.ReadLock(Int32[] lockIds) in D:\a\1\s\src\Umbraco.Core\Scoping\Scope.cs:line 495 at Umbraco.Core.Services.Implement.ContentService.GetById(Int32 id) in D:\a\1\s\src\Umbraco.Core\Services\Implement\ContentService.cs:line 348 at Umbraco.Core.Services.Implement.ContentService.GetParent(IContent content) in D:\a\1\s\src\Umbraco.Core\Services\Implement\ContentService.cs:line 648 at Umbraco.Core.Services.Implement.ContentService.StrategyCanPublish(IScope scope, IContent content, Boolean checkPath, IReadOnlyList1 culturesPublishing, IReadOnlyCollection1 culturesUnpublishing, EventMessages evtMsgs, ContentSavingEventArgs savingEventArgs, IReadOnlyCollection1 allLangs) in D:\a\1\s\src\Umbraco.Core\Services\Implement\ContentService.cs:line 2680 at Umbraco.Core.Services.Implement.ContentService.CommitDocumentChangesInternal(IScope scope, IContent content, ContentSavingEventArgs saveEventArgs, IReadOnlyCollection1 allLangs, Int32 userId, Boolean raiseEvents, Boolean branchOne, Boolean branchRoot) in D:\a\1\s\src\Umbraco.Core\Services\Implement\ContentService.cs:line 1149 at Umbraco.Core.Services.Implement.ContentService.SaveAndPublish(IContent content, String culture, Int32 userId, Boolean raiseEvents) in D:\a\1\s\src\Umbraco.Core\Services\Implement\ContentService.cs:line 905 at Umbraco.Web.Editors.ContentController.PublishInternal(ContentItemSave contentItem, String defaultCulture, String cultureForInvariantErrors, Boolean& wasCancelled, String[]& successfulCultures) in D:\a\1\s\src\Umbraco.Web\Editors\ContentController.cs:line 1217 at Umbraco.Web.Editors.ContentController.PostSaveInternal(ContentItemSave contentItem, Func2 saveMethod, Func2 mapToDisplay) in D:\a\1\s\src\Umbraco.Web\Editors\ContentController.cs:line 728 at Umbraco.Web.Editors.ContentController.PostSave(ContentItemSave contentItem) in D:\a\1\s\src\Umbraco.Web\Editors\ContentController.cs:line 599 at lambdamethod(Closure , Object , Object[] ) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>cDisplayClass62.

    Properties Timestamp 2020-04-20T11:21:01.8427587+00:00 @MessageTemplate Unhandled controller exception occurred for request '{RequestUrl}' RequestUrl http://localhost:54237/umbraco/backoffice/UmbracoApi/Content/PostSave SourceContext Umbraco.Web.Editors.ContentController ProcessId 896 ProcessName iisexpress ThreadId 10 AppDomainId 2 AppDomainAppId LMW3SVC3ROOT MachineName DESKTOP-JIN7H3L Log4NetLevel ERROR HttpRequestNumber 4 HttpRequestId ed5b120a-ab3a-4308-8252-ce8d6695a659 }

  • 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