/// <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); }