Beispiel #1
0
        /// <summary>
        /// Saves all changed User Defaults.
        /// </summary>
        public static void SaveChangedUserDefaults()
        {
            SUserDefaultsTable UserDefaultsDataTableChanges;

            UserDefaultsDataTableChanges = UUserDefaultsDataTable.GetChangesTyped();

            if (UserDefaultsDataTableChanges != null)
            {
                // MessageBox.Show('Changed/added User Defaults: ' + UserDefaultsDataTableChanges.Rows.Count.ToString);
                TRemote.MSysMan.Maintenance.UserDefaults.WebConnectors.SaveUserDefaults(Ict.Petra.Shared.UserInfo.GUserInfo.UserID,
                                                                                        ref UserDefaultsDataTableChanges);

                // TODO 1 oChristianK cUserDefaults / ModificationID : Copy the ModificationID into the Client's DataTable so that the PetraClient's ModificationID's of UserDefaults are the same than the ones of the PetraServer.
                UUserDefaultsDataTable.AcceptChanges();
            }
        }
Beispiel #2
0
        /// <summary>
        /// Saves all changed User Defaults.
        /// </summary>
        public static void SaveChangedUserDefaults()
        {
            SUserDefaultsTable UserDefaultsDataTableChanges;

            UserDefaultsDataTableChanges = UUserDefaultsDataTable.GetChangesTyped();

            if (UserDefaultsDataTableChanges != null)
            {
                // MessageBox.Show('Changed/added User Defaults: ' + UserDefaultsDataTableChanges.Rows.Count.ToString);
                TRemote.MSysMan.Common.WebConnectors.SaveUserDefaults(Ict.Petra.Shared.UserInfo.GUserInfo.UserID,
                                                                      ref UserDefaultsDataTableChanges);

                // We need to take over the changed modification ID's, otherwise this method will only succeed with ONE change and then fail
                // See Mantis item #5574
                UUserDefaultsDataTable.Merge(UserDefaultsDataTableChanges);
                UUserDefaultsDataTable.AcceptChanges();
            }
        }
Beispiel #3
0
        public static void SaveUserDefaultsTable(String AUserName,
            ref SUserDefaultsTable AUserDefaultsDataTable,
            TDBTransaction AWriteTransaction,
            Boolean ASendUpdateInfoToClient)
        {
            Boolean NewTransaction = false;
            Boolean SubmissionOK = false;
            TDBTransaction WriteTransaction;
            Int32 SavingAttempts = 0;
            SUserDefaultsTable ChangedUserDefaultsDT;
            SUserDefaultsTable ChangedUserDefaults2DT;
            SUserDefaultsTable RefreshedUserDefaultsDataTable = null;

            if ((AUserDefaultsDataTable != null) && (AUserDefaultsDataTable.Rows.Count > 0))
            {
                ChangedUserDefaultsDT = AUserDefaultsDataTable.GetChangesTyped();

                if ((ChangedUserDefaultsDT != null) && (ChangedUserDefaultsDT.Rows.Count > 0))
                {
                    if (TLogging.DebugLevel >= 8)
                    {
                        TLogging.Log(
                            "TUserDefaults.SaveUserDefaultsTable: Saving " + (ChangedUserDefaultsDT.Rows.Count).ToString() + " User Defaults...");
                        TLogging.Log("TUserDefaults.SaveUserDefaultsTable: Row[0] --- UserId: " + ChangedUserDefaultsDT[0].UserId +
                            "; DefaultCode: " + ChangedUserDefaultsDT[0].DefaultCode + "; DefaultValue: " + ChangedUserDefaultsDT[0].DefaultValue);
                    }

                    if (AWriteTransaction == null)
                    {
                        WriteTransaction = DBAccess.GDBAccessObj.GetNewOrExistingTransaction(IsolationLevel.ReadCommitted,
                            TEnforceIsolationLevel.eilMinimum,
                            out NewTransaction);
                    }
                    else
                    {
                        WriteTransaction = AWriteTransaction;
                    }

                    try
                    {
                        do
                        {
                            try
                            {
                                SUserDefaultsAccess.SubmitChanges(AUserDefaultsDataTable, WriteTransaction);

                                SubmissionOK = true;

                                SavingAttempts = SavingAttempts + 1;
                            }
                            catch (EDBConcurrencyException)
                            {
                                TLogging.LogAtLevel(
                                    8,
                                    "TMaintenanceUserDefaults.SaveUserDefaultsTable: EDBConcurrencyException occured --> refreshing cached UserDefaults with UserDefaults from the DB!");

                                // The same user has saved the same UserDefault after we have read it in
                                // (this can only happen if the same user is logged in twice).
                                // > Read in the UserDefaults for this user again and merge them
                                // into the ones that are to be submitted, notify the Client to
                                // reload the UserDefaults and start submitting again!
                                ReloadUserDefaults(UserInfo.GUserInfo.UserID, false, out RefreshedUserDefaultsDataTable);
                                DataUtilities.CopyModificationIDsOver(ChangedUserDefaultsDT, RefreshedUserDefaultsDataTable);
                                DataUtilities.CopyModificationIDsOver(AUserDefaultsDataTable, ChangedUserDefaultsDT);
                                SavingAttempts = SavingAttempts + 1;
                                ASendUpdateInfoToClient = true;
                            }
                            catch (Exception Exp)
                            {
                                if (TLogging.DL >= 8)
                                {
                                    TLogging.Log("TMaintenanceUserDefaults.SaveUserDefaultsTable: Exception occured: " + Exp.ToString());
                                }

                                throw;
                            }
                        } while (!((SavingAttempts > 1) || SubmissionOK));

                        TLogging.LogAtLevel(8, "TMaintenanceUserDefaults.SaveUserDefaultsTable: after saving.");
                        TLogging.LogAtLevel(
                            8,
                            "TMaintenanceUserDefaults.SaveUserDefaultsTable: ChangedUserDefaultsDT.Rows.Count: " +
                            ChangedUserDefaultsDT.Rows.Count.ToString());

                        ChangedUserDefaults2DT = AUserDefaultsDataTable.GetChangesTyped();

                        // Tell the Client the updated UserDefaults (needed for the ModificationIDs)
                        if (ASendUpdateInfoToClient)
                        {
                            TLogging.LogAtLevel(8, "TMaintenanceUserDefaults.SaveUserDefaultsTable: ASendUpdateInfoToClient = true");
                            UpdateUserDefaultsOnClient(AUserName, ChangedUserDefaults2DT);
                        }
                        else
                        {
                            foreach (DataRow ChangedUDDR in ChangedUserDefaults2DT.Rows)
                            {
                                // If a new UserDefault has been INSERTed into the DB Table, inform other Clients about that
                                if (ChangedUDDR.RowState == DataRowState.Added)
                                {
                                    TLogging.LogAtLevel(
                                        8,
                                        "TMaintenanceUserDefaults.SaveUserDefaultsTable: new UserDefault has been INSERTed - inform other Clients..");
                                    ASendUpdateInfoToClient = true;
                                    break;
                                }
                            }

                            if (ASendUpdateInfoToClient)
                            {
                                // CopyModificationIDsOver(ChangedUserDefaultsDT, AUserDefaultsDataTable);
                                TLogging.LogAtLevel(8, "TMaintenanceUserDefaults.SaveUserDefaultsTable: informing other Clients!");
                                UpdateUserDefaultsOnClient(AUserName, ChangedUserDefaults2DT);
                            }
                        }

                        // We have no unsaved changes anymore
                        AUserDefaultsDataTable.AcceptChanges();

                        TLogging.LogAtLevel(8, "TMaintenanceUserDefaults.SaveUserDefaultsTable: after AcceptChanges.");

                        if (NewTransaction)
                        {
                            DBAccess.GDBAccessObj.CommitTransaction();
                        }

                        TLogging.LogAtLevel(8, "TMaintenanceUserDefaults.SaveUserDefaultsTable: committed own transaction.");
                    }
                    catch (Exception Exp)
                    {
                        TLogging.LogAtLevel(8, "TMaintenanceUserDefaults.SaveUserDefaultsTable: Exception occured: " + Exp.ToString());

                        if (NewTransaction)
                        {
                            DBAccess.GDBAccessObj.RollbackTransaction();
                            TLogging.LogAtLevel(8, "TMaintenanceUserDefaults.SaveUserDefaultsTable: rolled back own transaction.");
                        }

                        throw;
                    }

                    TLogging.LogAtLevel(8, "TMaintenanceUserDefaults.SaveUserDefaultsTable: Done!");
                }
                else
                {
// nothing to save!
                    TLogging.LogAtLevel(8, "TMaintenanceUserDefaults.SaveUserDefaultsTable: nothing to save: no changes!");
                }
            }
            else
            {
                // nothing to save!
                TLogging.LogAtLevel(8, "TMaintenanceUserDefaults.SaveUserDefaultsTable: nothing to save: no UserDefaults in memory!");
            }
        }