/// <summary> /// todoComment /// </summary> /// <param name="AKey"></param> /// <param name="AValue"></param> public static void SetUserDefault(String AKey, String AValue) { Int32 FoundInRow; DataRowView Tmp; FoundInRow = UUserDefaults.Find(AKey); if (FoundInRow != -1) { // User default found if (AValue != UUserDefaults[FoundInRow][SUserDefaultsTable.GetDefaultValueDBName()].ToString()) { // Update only if the value is actually different UUserDefaults[FoundInRow][SUserDefaultsTable.GetDefaultValueDBName()] = AValue; } } else { // User default not found, add it to the user defaults table Tmp = UUserDefaults.AddNew(); Tmp[SUserDefaultsTable.GetUserIdDBName()] = Ict.Petra.Shared.UserInfo.GUserInfo.UserID; Tmp[SUserDefaultsTable.GetDefaultCodeDBName()] = AKey; Tmp[SUserDefaultsTable.GetDefaultValueDBName()] = AValue; Tmp.EndEdit(); } }
/// <summary> /// Refreshes a UserDefault in the local Cache that has been updated on the /// Server side or in the DB. /// /// @comment This is needed for the case where several PetraClient instances of /// the same Petra User are running and they are updating the same UserDefault. /// On detecting such a 'collision', the PetraServer queues a ClientTask to /// refresh the specific UserDefault in the local Cache, and the /// TClientTaskInstance.Execute background thread then invokes this function. /// /// </summary> /// <param name="AChangedUserDefaultCode">UserDefault Code to update</param> /// <param name="AChangedUserDefaultValue">Changed UserDefault Value</param> /// <param name="AChangedUserDefaultModId">ModificationID of the changed UserDefault /// DataRow /// </param> /// <returns>void</returns> public static void RefreshCachedUserDefault(String AChangedUserDefaultCode, String AChangedUserDefaultValue, String AChangedUserDefaultModId) { // TLogging.Log('Refreshing DefaultCode ''' + AChangedUserDefaultCode + ''' with Value: ''' + AChangedUserDefaultValue + ''''); // Split String into String Array String[] ChangedUserDefaultCodes = AChangedUserDefaultCode.Split(new Char[] { RemotingConstants.GCLIENTTASKPARAMETER_SEPARATOR[0] }); String[] ChangedUserDefaultValues = AChangedUserDefaultValue.Split(new Char[] { RemotingConstants.GCLIENTTASKPARAMETER_SEPARATOR[0] }); String[] ChangedUserDefaultModIds = AChangedUserDefaultModId.Split(new Char[] { RemotingConstants.GCLIENTTASKPARAMETER_SEPARATOR[0] }); for (Int16 Counter = 0; Counter <= ChangedUserDefaultCodes.Length - 1; Counter += 1) { // TLogging.Log('Refreshing UserDefault ''' + ChangedUserDefaultCodes[Counter] + ''' with value ''' + ChangedUserDefaultValues[Counter] + ''' (ModificationID: ''' + ChangedUserDefaultModIds[Counter] + ''''); Int32 FoundInRow = UUserDefaults.Find(ChangedUserDefaultCodes[Counter]); if (FoundInRow != -1) { // User default found // TLogging.Log('Existing UserDefault ''' + // UUserDefaults.Item[FoundInRow].Item[SUserDefaultsTable.GetDefaultCodeDBName].ToString + ''' with value ''' + // UUserDefaults.Item[FoundInRow].Item[SUserDefaultsTable.GetDefaultValueDBName].ToString + ''' (ModificationID: ''' + // UUserDefaults.Item[FoundInRow].Item[SUserDefaultsTable.GetModificationIDDBName].ToString + ''''); if (ChangedUserDefaultValues[Counter] != UUserDefaults[FoundInRow][SUserDefaultsTable.GetDefaultValueDBName()].ToString()) { // Update only if the value is actually different UUserDefaults[FoundInRow][SUserDefaultsTable.GetDefaultValueDBName()] = ChangedUserDefaultValues[Counter]; } UUserDefaults[FoundInRow][SUserDefaultsTable.GetModificationIdDBName()] = Convert.ToDateTime(ChangedUserDefaultModIds[Counter]); // Mark this refreshed UserDefault as unchanged UUserDefaults[FoundInRow].Row.AcceptChanges(); } else { // User default not found, add it to the user defaults table // TLogging.Log('UserDefault doesn''t exist yet > creating new one'); DataRowView Tmp = UUserDefaults.AddNew(); Tmp[SUserDefaultsTable.GetUserIdDBName()] = Ict.Petra.Shared.UserInfo.GUserInfo.UserID; Tmp[SUserDefaultsTable.GetDefaultCodeDBName()] = ChangedUserDefaultCodes[Counter]; Tmp[SUserDefaultsTable.GetDefaultValueDBName()] = ChangedUserDefaultValues[Counter]; Tmp[SUserDefaultsTable.GetModificationIdDBName()] = ChangedUserDefaultModIds[Counter]; Tmp.EndEdit(); // Mark this refreshed UserDefault as unchanged Tmp.Row.AcceptChanges(); // TLogging.Log('UserDefault: new Row added, RowState: ' + Enum(Tmp.Row.RowState).ToString("G")); } } }
/// <summary> /// Refreshes a UserDefault in the local Cache that has been updated on the /// Server side or in the DB. /// /// @comment This is needed for the case where several PetraClient instances of /// the same Petra User are running and they are updating the same UserDefault. /// On detecting such a 'collision', the PetraServer queues a ClientTask to /// refresh the specific UserDefault in the local Cache, and the /// TClientTaskInstance.Execute background thread then invokes this function. /// /// </summary> /// <param name="AChangedUserDefaultCode">UserDefault Code to update</param> /// <param name="AChangedUserDefaultValue">Changed UserDefault Value</param> /// <param name="AChangedUserDefaultModId">ModificationID of the changed UserDefault /// DataRow /// </param> /// <param name="AClientID">The Client ID that requested the refreshing (-1 if none was specified).</param> /// <returns>void</returns> public static void RefreshCachedUserDefault(String AChangedUserDefaultCode, String AChangedUserDefaultValue, String AChangedUserDefaultModId, int AClientID) { // Split String into String Array String[] ChangedUserDefaultCodes = AChangedUserDefaultCode.Split(new Char[] { RemotingConstants.GCLIENTTASKPARAMETER_SEPARATOR[0] }); String[] ChangedUserDefaultValues = AChangedUserDefaultValue.Split(new Char[] { RemotingConstants.GCLIENTTASKPARAMETER_SEPARATOR[0] }); String[] ChangedUserDefaultModIds = AChangedUserDefaultModId.Split(new Char[] { RemotingConstants.GCLIENTTASKPARAMETER_SEPARATOR[0] }); // TLogging.Log("Refreshing User Default with DefaultCode '" + AChangedUserDefaultCode + "' with Value: '" + // AChangedUserDefaultValue + "'"); if ((AClientID == -1) || (AClientID == UserInfo.GUserInfo.ProcessID)) { for (Int16 Counter = 0; Counter <= ChangedUserDefaultCodes.Length - 1; Counter += 1) { // TLogging.Log("Refreshing single UserDefault '" + ChangedUserDefaultCodes[Counter].ToString() + "' with value '" + // ChangedUserDefaultValues[Counter] + "' (ModificationID: '" + // ChangedUserDefaultModIds[Counter].ToString() + "' (was sent from the same user session of this user on server)"); Int32 FoundInRow = UUserDefaults.Find(ChangedUserDefaultCodes[Counter]); if (FoundInRow != -1) { // User default found // TLogging.Log('Existing UserDefault ''' + // UUserDefaults.Item[FoundInRow].Item[SUserDefaultsTable.GetDefaultCodeDBName].ToString + ''' with value ''' + // UUserDefaults.Item[FoundInRow].Item[SUserDefaultsTable.GetDefaultValueDBName].ToString + ''' (ModificationID: ''' + // UUserDefaults.Item[FoundInRow].Item[SUserDefaultsTable.GetModificationIDDBName].ToString + ''''); if (ChangedUserDefaultValues[Counter] != UUserDefaults[FoundInRow][SUserDefaultsTable.GetDefaultValueDBName()].ToString()) { // Update only if the value is actually different UUserDefaults[FoundInRow][SUserDefaultsTable.GetDefaultValueDBName()] = ChangedUserDefaultValues[Counter]; } UUserDefaults[FoundInRow][SUserDefaultsTable.GetModificationIdDBName()] = Convert.ToDateTime( ChangedUserDefaultModIds[Counter]); // Mark this refreshed UserDefault as unchanged UUserDefaults[FoundInRow].Row.AcceptChanges(); } else { // User default not found, add it to the user defaults table // TLogging.Log('UserDefault doesn''t exist yet > creating new one'); DataRowView Tmp = UUserDefaults.AddNew(); Tmp[SUserDefaultsTable.GetUserIdDBName()] = Ict.Petra.Shared.UserInfo.GUserInfo.UserID; Tmp[SUserDefaultsTable.GetDefaultCodeDBName()] = ChangedUserDefaultCodes[Counter]; Tmp[SUserDefaultsTable.GetDefaultValueDBName()] = ChangedUserDefaultValues[Counter]; Tmp[SUserDefaultsTable.GetModificationIdDBName()] = ChangedUserDefaultModIds[Counter]; Tmp.EndEdit(); // Mark this refreshed UserDefault as unchanged Tmp.Row.AcceptChanges(); // TLogging.Log('UserDefault: new Row added, RowState: ' + Enum(Tmp.Row.RowState).ToString("G")); } } } else { // TLogging.Log("Refreshing ALL UserDefaults because the request for the refreshing of SINGLE user default was sent " + // "from a DIFFERENT user session of THIS user on the server [hence we need to first update the server-side-held " + // "UserDefaults for THIS session of the same user, and then the client-side-held UserDefaults, too])"); ReloadCachedUserDefaultsOnServerAndClient(); } }