Rock.Transactions.PageViewTransaction.Execute C# (CSharp) Метод

Execute() публичный Метод

Execute method to write transaction to the database.
public Execute ( ) : void
Результат void
        public void Execute()
        {
            using ( var rockContext = new RockContext() )
            {
                PageViewService pageViewService = new PageViewService( rockContext );
                PageViewUserAgentService pageViewUserAgentService = new PageViewUserAgentService( rockContext );
                PageViewSessionService pageViewSessionService = new PageViewSessionService( rockContext );

                var userAgent = ( this.UserAgent ?? string.Empty ).Trim();
                if ( userAgent.Length > 450 )
                {
                    userAgent = userAgent.Substring( 0, 450 ); // trim super long useragents to fit in pageViewUserAgent.UserAgent
                }

                // get user agent info
                var clientType = PageViewUserAgent.GetClientType( userAgent );

                Parser uaParser = Parser.GetDefault();
                ClientInfo client = uaParser.Parse( userAgent );
                var clientOs = client.OS.ToString();
                var clientBrowser = client.UserAgent.ToString();

                // lookup the pageViewUserAgent, and create it if it doesn't exist
                var pageViewUserAgent = pageViewUserAgentService.Queryable().Where( a => a.UserAgent == userAgent ).FirstOrDefault();
                if ( pageViewUserAgent == null )
                {
                    pageViewUserAgent = new PageViewUserAgent();
                    pageViewUserAgent.UserAgent = userAgent;
                    pageViewUserAgent.ClientType = clientType;

                    pageViewUserAgent.OperatingSystem = clientOs;
                    pageViewUserAgent.Browser = clientBrowser;

                    pageViewUserAgentService.Add( pageViewUserAgent );
                    rockContext.SaveChanges();
                }
                else
                {
                    // check if the user agent properties need to be updated
                    if ( clientType != pageViewUserAgent.ClientType || clientOs != pageViewUserAgent.OperatingSystem || clientBrowser != pageViewUserAgent.Browser )
                    {
                        pageViewUserAgent.ClientType = clientType;
                        pageViewUserAgent.OperatingSystem = clientOs;
                        pageViewUserAgent.Browser = clientBrowser;
                        rockContext.SaveChanges();
                    }
                }

                // lookup PageViewSession, and create it if it doesn't exist
                Guid sessionId = this.SessionId.AsGuid();
                int? pageViewSessionId = pageViewSessionService.Queryable().Where( a => a.PageViewUserAgentId == pageViewUserAgent.Id && a.SessionId == sessionId && a.IpAddress == this.IPAddress ).Select( a => (int?)a.Id ).FirstOrDefault();
                if ( !pageViewSessionId.HasValue )
                {
                    var pageViewSession = new PageViewSession();
                    pageViewSession.PageViewUserAgentId = pageViewUserAgent.Id;
                    pageViewSession.SessionId = sessionId;
                    pageViewSession.IpAddress = this.IPAddress;
                    pageViewSessionService.Add( pageViewSession );
                    rockContext.SaveChanges();
                    pageViewSessionId = pageViewSession.Id;
                }

                PageView pageView = new PageView();
                pageViewService.Add( pageView );

                // obfuscate rock magic token
                Regex rgx = new Regex( @"rckipid=([^&]*)" );
                string cleanUrl = rgx.Replace( this.Url, "rckipid=XXXXXXXXXXXXXXXXXXXXXXXXXXXX" );

                pageView.PageId = this.PageId;
                pageView.SiteId = this.SiteId;
                pageView.Url = cleanUrl.Left( 500 );
                pageView.DateTimeViewed = this.DateViewed;
                pageView.PersonAliasId = this.PersonAliasId;
                pageView.PageTitle = this.PageTitle.Left( 500 );

                pageView.PageViewSessionId = pageViewSessionId.Value;

                rockContext.SaveChanges();
            }
        }
PageViewTransaction