Пример #1
0
            /// <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();
                }
            }
Пример #2
0
 /// <summary>
 /// Reload the User Defaults if called on the server.
 ///
 /// </summary>
 /// <returns>void</returns>
 public static void ReloadCachedUserDefaultsOnServer()
 {
     TRemote.MSysMan.Maintenance.UserDefaults.WebConnectors.ReloadUserDefaults(Ict.Petra.Shared.UserInfo.GUserInfo.UserID,
                                                                               out UUserDefaultsDataTable);
     UUserDefaults      = new DataView(UUserDefaultsDataTable);
     UUserDefaults.Sort = SUserDefaultsTable.GetDefaultCodeDBName();
 }
Пример #3
0
 /// <summary>
 /// initialise static variables
 /// </summary>
 public static void InitUserDefaults()
 {
     TRemote.MSysMan.Maintenance.UserDefaults.WebConnectors.GetUserDefaults(Ict.Petra.Shared.UserInfo.GUserInfo.UserID,
                                                                            out UUserDefaultsDataTable);
     UUserDefaults      = new DataView(UUserDefaultsDataTable);
     UUserDefaults.Sort = SUserDefaultsTable.GetDefaultCodeDBName();
     FIsInitialised     = true;
 }
Пример #4
0
        /// <summary>
        /// Update the server-side-held UserDefaults for this session of the same user and then the client-side-held
        /// UserDefaults, too.
        /// </summary>
        public static void ReloadCachedUserDefaultsOnServerAndClient()
        {
//            TLogging.Log("ReloadCachedUserDefaultsOnServerAndClient got called");
            // First update the server-side-held UserDefaults for this session of the same user...
            TRemote.MSysMan.Maintenance.UserDefaults.WebConnectors.ReloadUserDefaults(UserInfo.GUserInfo.UserID,
                                                                                      out UUserDefaultsDataTable);

            // ...then the client-side-held UserDefaults, too!
            UUserDefaults      = new DataView(UUserDefaultsDataTable);
            UUserDefaults.Sort = SUserDefaultsTable.GetDefaultCodeDBName();
        }
Пример #5
0
        public static void SetDefault(String AKey, object AValue, Boolean ASendUpdateInfoToClient = true, TDataBase ADataBase = null)
        {
            SUserDefaultsTable UserDefaultsDataTable;

            TDataBase      db = DBAccess.Connect("LoadUserDefaultsTable", ADataBase);
            TDBTransaction WriteTransaction = new TDBTransaction();
            bool           SubmitOK         = false;

            db.WriteTransaction(ref WriteTransaction,
                                ref SubmitOK,
                                delegate
            {
                LoadUserDefaultsTable(UserInfo.GetUserInfo().UserID, out UserDefaultsDataTable, db);

                DataView view  = new DataView(UserDefaultsDataTable);
                view.Sort      = SUserDefaultsTable.GetDefaultCodeDBName();
                int FoundInRow = view.Find(AKey);

                if (FoundInRow != -1)
                {
                    // User default found
                    if (AValue.ToString() != view[FoundInRow][SUserDefaultsTable.GetDefaultValueDBName()].ToString())
                    {
                        // Update only if the value is actually different
                        view[FoundInRow][SUserDefaultsTable.GetDefaultValueDBName()] = AValue.ToString();
                        SubmitOK = true;
                    }
                }
                else
                {
                    // User default not found, add it to the user defaults table
                    SUserDefaultsRow row = UserDefaultsDataTable.NewRowTyped();
                    row.UserId           = UserInfo.GetUserInfo().UserID;
                    row.DefaultCode      = AKey;
                    row.DefaultValue     = AValue.ToString();
                    UserDefaultsDataTable.Rows.Add(row);
                    FoundInRow = view.Find(AKey);
                    SubmitOK   = true;
                }

                if (SubmitOK)
                {
                    SUserDefaultsAccess.SubmitChanges(UserDefaultsDataTable, WriteTransaction);

                    if (ASendUpdateInfoToClient)
                    {
                        UpdateUserDefaultsOnClient(UserInfo.GetUserInfo().UserID, AKey, AValue.ToString(),
                                                   view[FoundInRow][SUserDefaultsTable.GetModificationIdDBName()].ToString());
                    }
                }
            });
        }
Пример #6
0
        /// <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"));
                }
            }
        }
Пример #7
0
        /// <summary>
        /// Reload the User Defaults.
        /// Causes TUserDefaults to reload the cached User Defaults Table
        ///
        /// </summary>
        /// <returns>void</returns>
        public static void ReloadCachedUserDefaults()
        {
//            TLogging.Log("ReloadCachedUserDefaults got called");
            SUserDefaultsTable TempUserDefaultsDataTable;
            DataSet            UserDefaultsDS;

            // TODO 1 : ReaderWriterLock
            // reload user defaults from server
            TRemote.MSysMan.Maintenance.UserDefaults.WebConnectors.GetUserDefaults(Ict.Petra.Shared.UserInfo.GUserInfo.UserID,
                                                                                   out TempUserDefaultsDataTable);

            // merge the current table with the one requested from the server so that client changes are not lost
            UserDefaultsDS = new DataSet();
            UserDefaultsDS.Tables.Add(UUserDefaultsDataTable);
            UserDefaultsDS.Merge((DataTable)TempUserDefaultsDataTable, true, MissingSchemaAction.Ignore);
            UUserDefaultsDataTable = (SUserDefaultsTable)UserDefaultsDS.Tables[SUserDefaultsTable.GetTableName()];
            UUserDefaults          = new DataView(UUserDefaultsDataTable);
            UUserDefaults.Sort     = SUserDefaultsTable.GetDefaultCodeDBName();
            UserDefaultsDS.Tables.Remove(UUserDefaultsDataTable);

            // remove table again (otherwise problems when called a second time)
        }
Пример #8
0
        /// <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();
            }
        }
Пример #9
0
        public static Boolean LoadUserDefaultsTable(String AUserName,
                                                    out SUserDefaultsTable AUserDefaultsDataTable, TDataBase ADataBase = null)
        {
            Boolean ReturnValue = false;

            TDataBase      db = DBAccess.Connect("LoadUserDefaultsTable", ADataBase);
            TDBTransaction ReadTransaction = null;
            bool           NewTransaction  = false;

            try
            {
                ReadTransaction = db.GetNewOrExistingTransaction(IsolationLevel.ReadCommitted,
                                                                 out NewTransaction);

                if (SUserDefaultsAccess.CountViaSUser(AUserName, ReadTransaction) != 0)
                {
                    AUserDefaultsDataTable = SUserDefaultsAccess.LoadViaSUser(AUserName, null, ReadTransaction,
                                                                              StringHelper.InitStrArr(new string[] { "ORDER BY", SUserDefaultsTable.GetDefaultCodeDBName() }), 0, 0);

                    AUserDefaultsDataTable.AcceptChanges();
                }
                else
                {
                    AUserDefaultsDataTable = new SUserDefaultsTable();
                }

                ReturnValue = true;
            }
            finally
            {
                if (NewTransaction && (ReadTransaction != null))
                {
                    ReadTransaction.Rollback();
                    TLogging.LogAtLevel(9, "TUserDefaults.LoadUserDefaultsTable: rolled back own transaction.");
                }
            }

            if (ADataBase == null)
            {
                db.CloseDBConnection();
            }

            return(ReturnValue);
        }