/// <summary>
        /// Loads from database.
        /// </summary>
        /// <param name="database">The database.</param>
        /// <returns>
        /// True if success, else false
        /// </returns>
        public override bool LoadFromDatabase(IDatabase database)
        {
            if (!base.LoadFromDatabase(database))
            {
                return(false);
            }

            int ret = 0;
            DatabaseRecordSet recordSet = new DatabaseRecordSet(database);

            if (recordSet.Query.Prepare("SELECT data, filename, mimetype, infoareaid, recordid, fieldid FROM documentuploads WHERE requestnr = ?"))
            {
                recordSet.Query.Bind(1, this.RequestNr);
                ret = recordSet.Execute();
                if (ret == 0)
                {
                    int count = recordSet.GetRowCount();
                    if (count == 1)
                    {
                        DatabaseRow row           = recordSet.GetRow(0);
                        string      databaseValue = row.GetColumn(0);
                        if (databaseValue.StartsWith("file://"))
                        {
                            string lastPathComponent = databaseValue.StartsWith("file://localhost") ? Path.GetFileName(databaseValue) : databaseValue.Substring(7);

                            this.LocalFileUrl = this.Storage.GetOfflineStoragePath(lastPathComponent);

                            Task <byte[]> t = SimpleIoc.Default.GetInstance <IPlatformService>().StorageProvider.FileContents(this.LocalFileUrl);
                            this.Data = t.Result;

                            if (SimpleIoc.Default.GetInstance <ILogSettings>().LogUpSync)
                            {
                                SimpleIoc.Default.GetInstance <ILogger>().LogDebug($"Sync request {this.RequestNr}: document {this.LocalFileUrl} loaded ({this.Data.Length} bytes)", LogFlag.LogUpSync);
                            }
                        }
                        else
                        {
                            this.LocalFileUrl = null;
                            this.Data         = Convert.FromBase64String(databaseValue);
                        }

                        this.FileName = row.GetColumn(1);
                        this.MimeType = row.GetColumn(2);
                        string infoAreaId = row.GetColumn(3);
                        string recordId   = row.GetColumn(4);
                        this.RecordIdentification = StringExtensions.InfoAreaIdRecordId(infoAreaId, recordId);
                        this.FieldId = row.GetColumnInt(5);
                    }
                }
            }

            return(ret == 0 && this.Data != null);
        }
        /// <summary>
        /// Requests from result row.
        /// </summary>
        /// <param name="row">The row.</param>
        /// <returns></returns>
        public UPOfflineRequest RequestFromResultRow(DatabaseRow row)
        {
            var col  = row.GetColumnInt(0);
            var col1 = row.GetColumn(1);
            var col2 = row.GetColumn(2);

            if (col1 == null || col2 == null)
            {
                return(null);
            }

            return(this.RequestWithNrTypeProcessType(col,
                                                     (OfflineRequestType)Enum.Parse(typeof(OfflineRequestType), col1),
                                                     (OfflineRequestProcess)Enum.Parse(typeof(OfflineRequestProcess), col2)));
        }
        /// <summary>
        /// Attaches the next server request number.
        /// </summary>
        public void AttachNextServerRequestNumber()
        {
            IDatabase database = this.Storage.Database;

            database.BeginTransaction();

            DatabaseRecordSet recordSet = new DatabaseRecordSet(database);

            if (recordSet.Query.Prepare("SELECT nextRequestNumber FROM requestcontrol"))
            {
                if (recordSet.Execute() == 0)
                {
                    if (recordSet.GetRowCount() == 1)
                    {
                        DatabaseRow row = recordSet.GetRow(0);
                        this.ServerRequestNumber = row.GetColumnInt(0);
                        DatabaseStatement updateStatement = new DatabaseStatement(database);
                        if (updateStatement.Prepare("UPDATE requestcontrol SET nextRequestNumber = ?"))
                        {
                            updateStatement.Bind(1, this.ServerRequestNumber + 1);
                            if (updateStatement.Execute() != 0)
                            {
                                this.ServerRequestNumber = -1;
                            }
                        }

                        if (this.RequestNr > 0)
                        {
                            updateStatement = new DatabaseStatement(database);
                            if (updateStatement.Prepare("UPDATE requests SET serverRequestNumber = ? WHERE requestnr = ?"))
                            {
                                updateStatement.Bind(1, this.ServerRequestNumber);
                                updateStatement.Bind(2, this.RequestNr);
                                updateStatement.Execute();
                            }
                        }
                    }
                    else
                    {
                        this.ServerRequestNumber = -1;
                    }
                }
            }

            database.Commit();
        }
        /// <summary>
        /// Loads from database.
        /// </summary>
        /// <param name="database">The database.</param>
        /// <returns>True if success, else false</returns>
        public virtual bool LoadFromDatabase(IDatabase database)
        {
            DatabaseRecordSet recordSet = new DatabaseRecordSet(database);
            string            sql       = @"SELECT json, error, errorcode, response, titleLine, detailsLine, imageName, serverRequestNumber, servertime, 
                           sessionid, translationkey, relatedInfo, baseerror, appversion, errorstack FROM requests WHERE requestnr = ?";

            recordSet.Query.Prepare(sql);
            recordSet.Query.Bind(1, this.RequestNr);
            int ret = recordSet.Execute();

            if (ret == 0 && recordSet.GetRowCount() > 0)
            {
                this.Loaded = true;
                DatabaseRow row = recordSet.GetRow(0);
                this.Json           = row.GetColumn(0);
                this.blockExecution = false;

                if (!row.IsNull(1))
                {
                    string cError = row.GetColumn(1);
                    if (cError == Constants.OFFLINEREQUEST_BLOCKED_TEXT)
                    {
                        this.blockExecution = true;
                    }

                    this.Error = row.GetColumn(1);
                }

                this.Code = row.GetColumnInt(2, -1);
                if (!row.IsNull(3))
                {
                    this.Response = row.GetColumn(3);
                }

                if (!row.IsNull(4))
                {
                    this.titleLine = row.GetColumn(4);
                }

                if (!row.IsNull(5))
                {
                    this.detailsLine = row.GetColumn(5);
                }

                if (!row.IsNull(6))
                {
                    this.imageName = row.GetColumn(6);
                }

                if (!row.IsNull(7))
                {
                    this.ServerRequestNumber = row.GetColumnInt(7);
                }

                if (!row.IsNull(8))
                {
                    this.ServerDateTime = row.GetColumn(8);
                }

                if (!row.IsNull(9))
                {
                    this.ServerSessionId = row.GetColumn(9);
                }

                if (!row.IsNull(10))
                {
                    this.ErrorTranslationKey = row.GetColumn(10);
                }

                if (!row.IsNull(11))
                {
                    string _relatedInfo = row.GetColumn(11);
                    this.RelatedInfoDictionary = _relatedInfo.JsonDictionaryFromString();
                }

                if (!row.IsNull(12))
                {
                    this.BaseErrorCode = row.GetColumnInt(12);
                }

                if (!row.IsNull(13))
                {
                    this.ApplicationVersion = row.GetColumn(13);
                }

                if (!row.IsNull(14))
                {
                    this.ErrorStack = row.GetColumn(14);
                }
                return(true);
            }

            return(false);
        }