Esempio n. 1
0
        /// <summary>
        /// Получить права на объекты пользовательского интерфейса по идентификатору роли
        /// </summary>
        public Dictionary <int, EntityRights> GetUiObjRights(int roleID)
        {
            Dictionary <int, EntityRights> rightsDict = new Dictionary <int, EntityRights>();

            try
            {
                dataCache.RefreshBaseTables();
                BaseTables baseTables = dataCache.BaseTables;

                lock (baseTables.SyncRoot)
                {
                    BaseTables.CheckColumnsExist(baseTables.RightTable, true);
                    DataView viewRight = baseTables.RightTable.DefaultView;
                    viewRight.Sort = "RoleID";

                    foreach (DataRowView rowView in viewRight.FindRows(roleID))
                    {
                        int          uiObjID = (int)rowView["ItfID"];
                        EntityRights rights  = new EntityRights((bool)rowView["ViewRight"], (bool)rowView["CtrlRight"]);
                        rightsDict[uiObjID] = rights;
                    }
                }
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при получении прав на объекты пользовательского интерфейса для роли с ид.={0}" :
                                   "Error getting access rights on user interface objects for the role with ID={0}", roleID);
            }

            return(rightsDict);
        }
Esempio n. 2
0
        /// <summary>
        /// Получить цвет по статусу
        /// </summary>
        public string GetColorByStat(int stat, string defaultColor)
        {
            lock (baseLock)
            {
                try
                {
                    dataCache.RefreshBaseTables();

                    DataTable tblEvType = dataCache.BaseTables.EvTypeTable;
                    BaseTables.CheckIsNotEmpty(tblEvType, true);
                    tblEvType.DefaultView.RowFilter = "CnlStatus = " + stat;

                    if (tblEvType.DefaultView.Count > 0)
                    {
                        object colorObj = tblEvType.DefaultView[0]["Color"];
                        if (colorObj != DBNull.Value)
                        {
                            return(colorObj.ToString());
                        }
                    }
                }
                catch (Exception ex)
                {
                    log.WriteException(ex, Localization.UseRussian ?
                                       "Ошибка при получении цвета по статусу {0}" :
                                       "Error getting color by status {0}", stat);
                }

                return(defaultColor);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Конструктор
        /// </summary>
        public DataCache(ServerComm serverComm, Log log)
        {
            if (serverComm == null)
            {
                throw new ArgumentNullException("serverComm");
            }
            if (log == null)
            {
                throw new ArgumentNullException("log");
            }

            this.serverComm = serverComm;
            this.log        = log;

            baseLock    = new object();
            curDataLock = new object();

            baseRefrDT = DateTime.MinValue;
            baseAge    = DateTime.MinValue;
            tblCur     = new SrezTableLight();
            curRefrDT  = DateTime.MinValue;

            BaseTables   = new BaseTables();
            CnlProps     = new InCnlProps[0];
            CtrlCnlProps = new CtrlCnlProps[0];
        }
Esempio n. 4
0
        /// <summary>
        /// Get user interface object properties by id
        /// </summary>
        public UiObjProps GetUiObjProps(int uiObjID)
        {
            try {
                dataCache.RefreshBaseTables();

                // you must save the link, because the object can be recreated by another thread
                var baseTables = dataCache.BaseTables;

                lock (baseTables.SyncRoot) {
                    BaseTables.CheckColumnsExist(baseTables.InterfaceTable, true);
                    var viewInterface = baseTables.InterfaceTable.DefaultView;
                    viewInterface.Sort = "ItfID";
                    int rowInd = viewInterface.Find(uiObjID);

                    if (rowInd >= 0)
                    {
                        var rowView    = viewInterface[rowInd];
                        var uiObjProps = UiObjProps.Parse((string)rowView["Name"]);
                        uiObjProps.UiObjID = uiObjID;
                        uiObjProps.Title   = (string)rowView["Descr"];
                        return(uiObjProps);
                    }

                    return(null);
                }
            } catch (Exception ex) {
                log.WriteException(ex, "Error getting user interface object properties by ID={0}", uiObjID);
                return(null);
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Get user properties by ID
        /// </summary>
        public UserProps GetUserProps(int userID)
        {
            try {
                dataCache.RefreshBaseTables();
                var baseTables = dataCache.BaseTables;

                lock (baseTables.SyncRoot) {
                    BaseTables.CheckColumnsExist(baseTables.UserTable, true);
                    var viewUser = baseTables.UserTable.DefaultView;
                    viewUser.Sort = "UserID";
                    int rowInd = viewUser.Find(userID);

                    if (rowInd >= 0)
                    {
                        var userProps = new UserProps(userID)
                        {
                            UserName = (string)viewUser[rowInd]["Name"],
                            RoleID   = (int)viewUser[rowInd]["RoleID"]
                        };
                        userProps.RoleName = GetRoleName(userProps.RoleID);
                        return(userProps);
                    }

                    return(null);
                }
            } catch (Exception ex) {
                log.WriteException(ex, "Error getting user properties by ID={0}", userID);
                return(null);
            }
        }
Esempio n. 6
0
        /// <summary>
        /// Получить свойства объекта пользовательского интерфейса по идентификатору.
        /// </summary>
        public UiObjProps GetUiObjProps(int uiObjID)
        {
            try
            {
                dataCache.RefreshBaseTables();

                // необходимо сохранить ссылку, т.к. объект может быть пересоздан другим потоком
                BaseTables baseTables = dataCache.BaseTables;

                lock (baseTables.SyncRoot)
                {
                    BaseTables.CheckColumnsExist(baseTables.InterfaceTable, true);
                    DataView viewInterface = baseTables.InterfaceTable.DefaultView;
                    viewInterface.Sort = "ItfID";
                    int rowInd = viewInterface.Find(uiObjID);

                    // столбец TypeCode добавлен в таблицу Интерфейс, начиная с версии 5.8
                    return(rowInd >= 0 ?
                           GetUiObjFromRow(viewInterface[rowInd], viewInterface.Table.Columns.Contains("TypeCode")) :
                           null);
                }
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при получении свойств объекта пользовательского интерфейса по ид.={0}" :
                                   "Error getting user interface object properties by ID={0}", uiObjID);
                return(null);
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Get a list of user interface object properties
        /// </summary>
        public List <UiObjProps> GetUiObjPropsList(UiObjProps.BaseUiTypes baseUiTypes)
        {
            var list = new List <UiObjProps>();

            try {
                dataCache.RefreshBaseTables();
                var baseTables = dataCache.BaseTables;

                lock (baseTables.SyncRoot) {
                    BaseTables.CheckColumnsExist(baseTables.InterfaceTable, true);
                    var viewInterface = baseTables.InterfaceTable.DefaultView;
                    viewInterface.Sort = "ItfID";

                    foreach (DataRowView rowView in viewInterface)
                    {
                        var uiObjProps = UiObjProps.Parse((string)rowView["Name"]);
                        if (baseUiTypes.HasFlag(uiObjProps.BaseUiType))
                        {
                            uiObjProps.UiObjID = (int)rowView["ItfID"];
                            uiObjProps.Title   = (string)rowView["Descr"];
                            list.Add(uiObjProps);
                        }
                    }
                }
            } catch (Exception ex) {
                log.WriteException(ex,
                                   "Error getting list of user interface object properties");
            }

            return(list);
        }
Esempio n. 8
0
        /// <summary>
        /// Конструктор
        /// </summary>
        public DataCache(ServerComm serverComm, Log log)
        {
            if (serverComm == null)
            {
                throw new ArgumentNullException("serverComm");
            }
            if (log == null)
            {
                throw new ArgumentNullException("log");
            }

            this.serverComm = serverComm;
            this.log        = log;

            baseLock    = new object();
            curDataLock = new object();

            baseRefrDT    = DateTime.MinValue;
            tblCur        = new SrezTableLight();
            curDataRefrDT = DateTime.MinValue;

            BaseTables      = new BaseTables();
            CnlProps        = new InCnlProps[0];
            CtrlCnlProps    = new CtrlCnlProps[0];
            CnlStatProps    = new SortedList <int, CnlStatProps>();
            HourTableCache  = new Cache <DateTime, SrezTableLight>(HourCacheStorePeriod, HourCacheCapacity);
            EventTableCache = new Cache <DateTime, EventTableLight>(EventCacheStorePeriod, EventCacheCapacity);
        }
Esempio n. 9
0
        /// <summary>
        /// Получить идентификатор пользователя по имени.
        /// </summary>
        public int GetUserID(string username)
        {
            try
            {
                username = username ?? "";
                dataCache.RefreshBaseTables();
                BaseTables baseTables = dataCache.BaseTables;

                lock (baseTables.SyncRoot)
                {
                    BaseTables.CheckColumnsExist(baseTables.UserTable, true);
                    DataView viewUser = baseTables.UserTable.DefaultView;
                    viewUser.Sort = "Name";
                    int rowInd = viewUser.Find(username);
                    return(rowInd >= 0 ? (int)viewUser[rowInd]["UserID"] : BaseValues.EmptyDataID);
                }
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при получении идентификатора пользователя по имени \"{0}\"" :
                                   "Error getting user ID by name \"{0}\"", username);
                return(BaseValues.EmptyDataID);
            }
        }
Esempio n. 10
0
        /// <summary>
        /// Получить наименование роли по идентификатору из базы конфигурации
        /// </summary>
        protected string GetRoleNameFromBase(int roleID, string defaultRoleName)
        {
            lock (baseLock)
            {
                try
                {
                    dataCache.RefreshBaseTables();

                    DataTable tblRole = dataCache.BaseTables.RightTable;
                    BaseTables.CheckIsNotEmpty(tblRole, true);
                    tblRole.DefaultView.RowFilter = "RoleID = " + roleID;

                    return(tblRole.DefaultView.Count > 0 ?
                           (string)tblRole.DefaultView[0]["Name"] :
                           defaultRoleName);
                }
                catch (Exception ex)
                {
                    log.WriteException(ex, Localization.UseRussian ?
                                       "Ошибка при получении наименования роли по идентификатору {0}" :
                                       "Error getting role name by ID {0}", roleID);
                    return(defaultRoleName);
                }
            }
        }
Esempio n. 11
0
        /// <summary>
        /// Получить имя пользователя по идентификатору.
        /// </summary>
        public string GetUserName(int userID)
        {
            try
            {
                dataCache.RefreshBaseTables();
                BaseTables baseTables = dataCache.BaseTables;

                lock (baseTables.SyncRoot)
                {
                    BaseTables.CheckColumnsExist(baseTables.UserTable, true);
                    DataView viewUser = baseTables.UserTable.DefaultView;
                    viewUser.Sort = "UserID";
                    int rowInd = viewUser.Find(userID);
                    return(rowInd >= 0 ?
                           (string)viewUser[rowInd]["Name"] :
                           "[" + userID + "]"); // deleted or external user
                }
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при получении имени пользователя по ид.={0}" :
                                   "Error getting user name by ID={0}", userID);
                return(null);
            }
        }
Esempio n. 12
0
        /// <summary>
        /// Получить свойства представления по идентификатору
        /// </summary>
        /// <remarks>Используется таблица объектов интерфейса</remarks>
        public ViewProps GetViewProps(int viewID)
        {
            lock (baseLock)
            {
                try
                {
                    dataCache.RefreshBaseTables();

                    DataTable tblInterface = dataCache.BaseTables.InterfaceTable;
                    BaseTables.CheckIsNotEmpty(tblInterface, true);
                    tblInterface.DefaultView.RowFilter = "ItfID = " + viewID;

                    if (tblInterface.DefaultView.Count > 0)
                    {
                        ViewProps viewProps = new ViewProps(viewID);
                        viewProps.FileName     = (string)tblInterface.DefaultView[0]["Name"];
                        viewProps.ViewTypeCode = Path.GetExtension(viewProps.FileName);
                        return(viewProps);
                    }
                    else
                    {
                        return(null);
                    }
                }
                catch (Exception ex)
                {
                    log.WriteException(ex, Localization.UseRussian ?
                                       "Ошибка при получении свойств представления по ид.={0}" :
                                       "Error getting view properties by ID={0}", viewID);
                    return(null);
                }
            }
        }
Esempio n. 13
0
        /// <summary>
        /// Получить идентификатор пользователя по имени
        /// </summary>
        public int GetUserID(string username)
        {
            lock (baseLock)
            {
                try
                {
                    username = username ?? "";
                    dataCache.RefreshBaseTables();

                    DataTable tblUser = dataCache.BaseTables.UserTable;
                    BaseTables.CheckIsNotEmpty(tblUser, true);
                    tblUser.DefaultView.RowFilter = "Name = '" + username + "'";

                    return(tblUser.DefaultView.Count > 0 ?
                           (int)tblUser.DefaultView[0]["UserID"] :
                           BaseValues.EmptyDataID);
                }
                catch (Exception ex)
                {
                    log.WriteException(ex, Localization.UseRussian ?
                                       "Ошибка при получении идентификатора пользователя по имени \"{0}\"" :
                                       "Error getting user ID by name \"{0}\"", username);
                    return(BaseValues.EmptyDataID);
                }
            }
        }
Esempio n. 14
0
        /// <summary>
        /// Gets the parent roles of the specified role including the specified role itself.
        /// </summary>
        protected List <int> GetParentRoles(int roleID)
        {
            HashSet <int> roleIDSet  = new HashSet <int>(); // set of parent roles and the specified role
            List <int>    roleIDList = new List <int>();    // similar role list ordered by inheritance

            roleIDSet.Add(roleID);                          // to avoid infinite loop

            // the RoleRef table has been added since version 5.8
            if (BaseTables.CheckColumnsExist(dataCache.BaseTables.RoleRefTable))
            {
                dataCache.BaseTables.RoleRefTable.DefaultView.Sort = "ChildRoleID";
                AppendParentRoles(roleIDSet, roleIDList, roleID);
            }

            roleIDList.Add(roleID);
            return(roleIDList);
        }
Esempio n. 15
0
        /// <summary>
        /// Get the name of the role by ID from the configuration database
        /// </summary>
        protected string GetRoleNameFromBase(int roleID, string defaultRoleName)
        {
            try {
                dataCache.RefreshBaseTables();
                var baseTables = dataCache.BaseTables;

                lock (baseTables.SyncRoot) {
                    BaseTables.CheckColumnsExist(baseTables.RoleTable, true);
                    var viewRole = baseTables.RoleTable.DefaultView;
                    viewRole.Sort = "RoleID";
                    int rowInd = viewRole.Find(roleID);
                    return(rowInd >= 0 ? (string)viewRole[rowInd]["Name"] : defaultRoleName);
                }
            } catch (Exception ex) {
                log.WriteException(ex, "Error getting role name by ID {0}", roleID);
                return(defaultRoleName);
            }
        }
Esempio n. 16
0
        /// <summary>
        /// Get the name of KP by number
        /// </summary>
        public string GetKPName(int kpNum)
        {
            try {
                dataCache.RefreshBaseTables();
                var baseTables = dataCache.BaseTables;

                lock (baseTables.SyncRoot) {
                    BaseTables.CheckColumnsExist(baseTables.ObjTable, true);
                    var viewObj = baseTables.KPTable.DefaultView;
                    viewObj.Sort = "KPNum";
                    int rowInd = viewObj.Find(kpNum);
                    return(rowInd >= 0 ? (string)viewObj[rowInd]["Name"] : "");
                }
            } catch (Exception ex) {
                log.WriteException(ex, "Error getting device name by number {0}", kpNum);
                return("");
            }
        }
Esempio n. 17
0
        /// <summary>
        /// Get username by id
        /// </summary>
        public string GetUserName(int userID)
        {
            try {
                dataCache.RefreshBaseTables();
                var baseTables = dataCache.BaseTables;

                lock (baseTables.SyncRoot) {
                    BaseTables.CheckColumnsExist(baseTables.UserTable, true);
                    var viewUser = baseTables.UserTable.DefaultView;
                    viewUser.Sort = "UserID";
                    int rowInd = viewUser.Find(userID);
                    return(rowInd >= 0 ? (string)viewUser[rowInd]["Name"] : "");
                }
            } catch (Exception ex) {
                log.WriteException(ex, "Error getting user name by ID={0}", userID);
                return(null);
            }
        }
Esempio n. 18
0
        /// <summary>
        /// Get user ID by name
        /// </summary>
        public int GetUserID(string username)
        {
            try {
                username = username ?? "";
                dataCache.RefreshBaseTables();
                var baseTables = dataCache.BaseTables;

                lock (baseTables.SyncRoot) {
                    BaseTables.CheckColumnsExist(baseTables.UserTable, true);
                    var viewUser = baseTables.UserTable.DefaultView;
                    viewUser.Sort = "Name";
                    int rowInd = viewUser.Find(username);
                    return(rowInd >= 0 ? (int)viewUser[rowInd]["UserID"] : BaseValues.EmptyDataID);
                }
            } catch (Exception ex) {
                log.WriteException(ex, "Error getting user ID by name \"{0}\"", username);
                return(BaseValues.EmptyDataID);
            }
        }
Esempio n. 19
0
 /// <summary>
 /// Loads the configuration database.
 /// </summary>
 private void LoadConfigBase()
 {
     try
     {
         if (FindConfigBase())
         {
             baseTables = new BaseTables();
             baseTables.Load(baseDir);
         }
         else
         {
             baseTables = null;
         }
     }
     catch (Exception ex)
     {
         baseTables = null;
         ProcError(ex, TablePhrases.LoadConfigBaseError);
     }
 }
Esempio n. 20
0
        private bool preventNodeExpand;    // prevent a tree node from expanding or collapsing


        /// <summary>
        /// Initializes a new instance of the class.
        /// </summary>
        public FrmMain()
        {
            InitializeComponent();

            exeDir    = Path.GetDirectoryName(Application.ExecutablePath);
            configDir = Path.Combine(exeDir, "Config");
            langDir   = Path.Combine(exeDir, "Lang");
            errLog    = new Log(Log.Formats.Full)
            {
                FileName = Path.Combine(exeDir, "Log", ErrFileName)
            };
            Application.ThreadException += Application_ThreadException;

            tableView = null;
            fileName  = "";
            modified  = false;

            baseDir           = "";
            baseTables        = null;
            preventNodeExpand = false;
        }
Esempio n. 21
0
        /// <summary>
        /// Получить свойства объекта пользовательского интерфейса по идентификатору
        /// </summary>
        public UiObjProps GetUiObjProps(int uiObjID)
        {
            try
            {
                dataCache.RefreshBaseTables();

                // необходимо сохранить ссылку, т.к. объект может быть пересоздан другим потоком
                BaseTables baseTables = dataCache.BaseTables;

                lock (baseTables.SyncRoot)
                {
                    BaseTables.CheckColumnsExist(baseTables.InterfaceTable, true);
                    DataView viewInterface = baseTables.InterfaceTable.DefaultView;
                    viewInterface.Sort = "ItfID";
                    int rowInd = viewInterface.Find(uiObjID);

                    if (rowInd >= 0)
                    {
                        DataRowView rowView    = viewInterface[rowInd];
                        UiObjProps  uiObjProps = UiObjProps.Parse((string)rowView["Name"]);
                        uiObjProps.UiObjID = uiObjID;
                        uiObjProps.Title   = (string)rowView["Descr"];
                        return(uiObjProps);
                    }
                    else
                    {
                        return(null);
                    }
                }
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при получении свойств объекта пользовательского интерфейса по ид.={0}" :
                                   "Error getting user interface object properties by ID={0}", uiObjID);
                return(null);
            }
        }
Esempio n. 22
0
        /// <summary>
        /// Получить наименование КП по номеру.
        /// </summary>
        public string GetKPName(int kpNum)
        {
            try
            {
                dataCache.RefreshBaseTables();
                BaseTables baseTables = dataCache.BaseTables;

                lock (baseTables.SyncRoot)
                {
                    BaseTables.CheckColumnsExist(baseTables.ObjTable, true);
                    DataView viewObj = baseTables.KPTable.DefaultView;
                    viewObj.Sort = "KPNum";
                    int rowInd = viewObj.Find(kpNum);
                    return(rowInd >= 0 ? (string)viewObj[rowInd]["Name"] : "");
                }
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при получении наименования КП по номеру {0}" :
                                   "Error getting device name by number {0}", kpNum);
                return("");
            }
        }
Esempio n. 23
0
        /// <summary>
        /// Получить свойства пользователя по идентификатору.
        /// </summary>
        public UserProps GetUserProps(int userID)
        {
            try
            {
                dataCache.RefreshBaseTables();
                BaseTables baseTables = dataCache.BaseTables;

                lock (baseTables.SyncRoot)
                {
                    BaseTables.CheckColumnsExist(baseTables.UserTable, true);
                    DataView viewUser = baseTables.UserTable.DefaultView;
                    viewUser.Sort = "UserID";
                    int rowInd = viewUser.Find(userID);

                    if (rowInd >= 0)
                    {
                        UserProps userProps = new UserProps(userID);
                        userProps.UserName = (string)viewUser[rowInd]["Name"];
                        userProps.RoleID   = (int)viewUser[rowInd]["RoleID"];
                        userProps.RoleName = GetRoleName(userProps.RoleID);
                        return(userProps);
                    }
                    else
                    {
                        return(null);
                    }
                }
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при получении свойств пользователя по ид.={0}" :
                                   "Error getting user properties by ID={0}", userID);
                return(null);
            }
        }
Esempio n. 24
0
        /// <summary>
        /// Получить список свойств объектов пользовательского интерфейса.
        /// </summary>
        public List <UiObjProps> GetUiObjPropsList(UiObjProps.BaseUiTypes baseUiTypes)
        {
            List <UiObjProps> list = new List <UiObjProps>();

            try
            {
                dataCache.RefreshBaseTables();
                BaseTables baseTables = dataCache.BaseTables;

                lock (baseTables.SyncRoot)
                {
                    BaseTables.CheckColumnsExist(baseTables.InterfaceTable, true);
                    DataView viewInterface = baseTables.InterfaceTable.DefaultView;
                    viewInterface.Sort = "ItfID";
                    bool v58plus = viewInterface.Table.Columns.Contains("TypeCode");

                    foreach (DataRowView rowView in viewInterface)
                    {
                        UiObjProps uiObjProps = GetUiObjFromRow(rowView, v58plus);

                        if (baseUiTypes.HasFlag(uiObjProps.BaseUiType))
                        {
                            list.Add(uiObjProps);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при получении списка свойств объектов пользовательского интерфейса" :
                                   "Error getting list of user interface object properties");
            }

            return(list);
        }
Esempio n. 25
0
        /// <summary>
        /// Получить список свойств объектов пользовательского интерфейса
        /// </summary>
        public List <UiObjProps> GetUiObjPropsList(UiObjProps.BaseUiTypes baseUiTypes)
        {
            List <UiObjProps> list = new List <UiObjProps>();

            try
            {
                dataCache.RefreshBaseTables();
                BaseTables baseTables = dataCache.BaseTables;

                lock (baseTables.SyncRoot)
                {
                    BaseTables.CheckColumnsExist(baseTables.InterfaceTable, true);
                    DataView viewInterface = baseTables.InterfaceTable.DefaultView;
                    viewInterface.Sort = "ItfID";

                    foreach (DataRowView rowView in viewInterface)
                    {
                        UiObjProps uiObjProps = UiObjProps.Parse((string)rowView["Name"]);
                        if (baseUiTypes.HasFlag(uiObjProps.BaseUiType))
                        {
                            uiObjProps.UiObjID = (int)rowView["ItfID"];
                            uiObjProps.Title   = (string)rowView["Descr"];
                            list.Add(uiObjProps);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при получении списка свойств объектов пользовательского интерфейса" :
                                   "Error getting list of user interface object properties");
            }

            return(list);
        }
Esempio n. 26
0
        /// <summary>
        /// Получить наименование роли по идентификатору из базы конфигурации.
        /// </summary>
        protected string GetRoleNameFromBase(int roleID, string defaultRoleName)
        {
            try
            {
                dataCache.RefreshBaseTables();
                BaseTables baseTables = dataCache.BaseTables;

                lock (baseTables.SyncRoot)
                {
                    BaseTables.CheckColumnsExist(baseTables.RoleTable, true);
                    DataView viewRole = baseTables.RoleTable.DefaultView;
                    viewRole.Sort = "RoleID";
                    int rowInd = viewRole.Find(roleID);
                    return(rowInd >= 0 ? (string)viewRole[rowInd]["Name"] : defaultRoleName);
                }
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при получении наименования роли по идентификатору {0}" :
                                   "Error getting role name by ID {0}", roleID);
                return(defaultRoleName);
            }
        }
Esempio n. 27
0
        /// <summary>
        /// Update configuration database tables, channel properties and statuses
        /// </summary>
        public void RefreshBaseTables()
        {
            lock (baseLock) {
                try {
                    var utcNowDT = DateTime.UtcNow;

                    if (utcNowDT - baseRefrDT > BaseValidSpan)   // data is out of date
                    {
                        baseRefrDT = utcNowDT;
                        var newBaseAge = serverComm.ReceiveFileAge(ServerComm.Dirs.BaseDAT,
                                                                   BaseTables.GetFileName(BaseTables.InCnlTable));

                        if (newBaseAge == DateTime.MinValue)
                        {
                            // configuration database does not exist or there is no connection to the server
                            throw new ScadaException("Unable to receive the configuration database modification time.");
                        }

                        if (BaseTables.BaseAge != newBaseAge)   // configuration base changed
                        {
                            log.WriteAction("Refresh the tables of the configuration database");

                            // waiting for unlocking possible configuration base
                            var t0 = utcNowDT;
                            while (serverComm.ReceiveFileAge(ServerComm.Dirs.BaseDAT, "baselock") > DateTime.MinValue &&
                                   DateTime.UtcNow - t0 <= WaitBaseLock)
                            {
                                Thread.Sleep(ScadaUtils.ThreadDelay);
                            }

                            // loading data into tables
                            var newBaseTables = new BaseTables()
                            {
                                BaseAge = newBaseAge
                            };
                            foreach (var dataTable in newBaseTables.AllTables)
                            {
                                string tableName = BaseTables.GetFileName(dataTable);

                                if (!serverComm.ReceiveBaseTable(tableName, dataTable))
                                {
                                    throw new ScadaException($"Unable to receive the table {tableName}");
                                }
                            }

                            BaseTables = newBaseTables;

                            // filling channel properties and statuses
                            lock (BaseTables.SyncRoot) {
                                FillCnlProps();
                                FillCtrlCnlProps();
                                FillCnlStatProps();
                            }
                        }
                    }
                } catch (Exception ex) {
                    BaseTables.BaseAge = DateTime.MinValue;
                    log.WriteException(ex, "Error refreshing the tables of the configuration database");
                }
            }
        }
Esempio n. 28
0
        /// <summary>
        /// Обновить таблицы базы конфигурации, свойства каналов и статусов
        /// </summary>
        public void RefreshBaseTables()
        {
            lock (baseLock)
            {
                try
                {
                    DateTime utcNowDT = DateTime.UtcNow;

                    if (utcNowDT - baseRefrDT > BaseValidSpan) // данные устарели
                    {
                        baseRefrDT = utcNowDT;
                        DateTime newBaseAge = serverComm.ReceiveFileAge(ServerComm.Dirs.BaseDAT,
                                                                        BaseTables.GetFileName(BaseTables.InCnlTable));

                        if (newBaseAge == DateTime.MinValue) // база конфигурации не существует или нет связи с сервером
                        {
                            throw new ScadaException(Localization.UseRussian ?
                                                     "Не удалось принять время изменения базы конфигурации." :
                                                     "Unable to receive the configuration database modification time.");
                        }
                        else if (BaseTables.BaseAge != newBaseAge) // база конфигурации изменена
                        {
                            log.WriteAction(Localization.UseRussian ?
                                            "Обновление таблиц базы конфигурации" :
                                            "Refresh the tables of the configuration database");

                            // ожидание снятия возможной блокировки базы конфигурации
                            DateTime t0 = utcNowDT;
                            while (serverComm.ReceiveFileAge(ServerComm.Dirs.BaseDAT, "baselock") > DateTime.MinValue &&
                                   DateTime.UtcNow - t0 <= WaitBaseLock)
                            {
                                Thread.Sleep(ScadaUtils.ThreadDelay);
                            }

                            // загрузка данных в таблицы
                            BaseTables newBaseTables = new BaseTables()
                            {
                                BaseAge = newBaseAge
                            };
                            foreach (DataTable dataTable in newBaseTables.AllTables)
                            {
                                string tableName = BaseTables.GetFileName(dataTable);

                                if (!serverComm.ReceiveBaseTable(tableName, dataTable))
                                {
                                    throw new ScadaException(string.Format(Localization.UseRussian ?
                                                                           "Не удалось принять таблицу {0}" :
                                                                           "Unable to receive the table {0}", tableName));
                                }
                            }
                            BaseTables = newBaseTables;

                            // заполнение свойств каналов и статусов
                            lock (BaseTables.SyncRoot)
                            {
                                FillCnlProps();
                                FillCtrlCnlProps();
                                FillCnlStatProps();
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    BaseTables.BaseAge = DateTime.MinValue;
                    log.WriteException(ex, Localization.UseRussian ?
                                       "Ошибка при обновлении таблиц базы конфигурации" :
                                       "Error refreshing the tables of the configuration database");
                }
            }
        }
Esempio n. 29
0
 /// <summary>
 /// Initializes a new instance of the class.
 /// </summary>
 public FrmItemInfo(TableView.Item item, BaseTables baseTables)
     : this()
 {
     this.item       = item ?? throw new ArgumentNullException("item");
     this.baseTables = baseTables ?? throw new ArgumentNullException("baseTables");
 }