/// <summary> /// Получить представление заданного типа и права на него /// </summary> public bool GetView(Type viewType, int viewSetIndex, int viewIndex, out BaseView view, out MainData.Right right) { bool result = false; view = null; right = MainData.Right.NoRights; try { if (viewSetRightList != null && 0 <= viewSetIndex && viewSetIndex < viewSetRightList.Count) { ViewSetRight viewSetRight = viewSetRightList[viewSetIndex]; ViewSettings.ViewSet viewSet = viewSetRight.ViewSet; if (viewSetRight.ViewRightArr == null) InitViewRightArr(viewSetRight); MainData.Right[] viewRightArr = viewSetRight.ViewRightArr; if (viewSet != null && viewRightArr != null && 0 <= viewIndex && viewIndex < viewSet.Count && viewIndex < viewRightArr.Length) { ViewSettings.ViewInfo viewInfo = viewSet[viewIndex]; right = viewRightArr[viewIndex]; // попытка получить стандартный тип представления, если тип не задан if (viewType == null) viewType = viewInfo.GetViewType(); if (viewType == null) { // возврат представления из кэша, если тип не задан view = viewInfo.ViewCash; return view != null; } else if (viewInfo.Type == viewType.Name) { if (viewInfo.ViewCash != null && viewInfo.ViewCash.GetType() == viewType) { // возврат представления из кэша, // если в кэше загружено представление и его тип совпадает с заданным view = viewInfo.ViewCash; result = true; } else { // создание и загрузка нового представления view = (BaseView)Activator.CreateInstance(viewType); if (!view.StoredOnServer) view.ItfObjName = Path.GetFileName(viewInfo.FileName); if (!view.StoredOnServer || AppData.MainData.ServerComm.ReceiveView(viewSet.Directory + viewInfo.FileName, view)) { AppData.MainData.RefreshBase(); view.BindCnlProps(AppData.MainData.CnlPropsArr); viewInfo.ViewCash = view; result = true; } } } } } } catch (Exception ex) { AppData.Log.WriteAction((Localization.UseRussian ? "Ошибка при получении представления: " : "Error getting view: ") + ex.Message, Log.ActTypes.Exception); } return result; }
/// <summary> /// Принять представление от SCADA-Сервера /// </summary> public bool ReceiveView(string fileName, BaseView view) { Monitor.Enter(tcpLock); bool result = false; errMsg = ""; try { try { if (RestoreConnection()) { using (MemoryStream memStream = new MemoryStream()) { if (ReceiveFile(Dirs.Itf, fileName, memStream)) { view.LoadFromStream(memStream); result = true; } } } } finally { // очистка представления, если не удалось получить новые данные if (!result) view.Clear(); // установка наименования объекта интерфейса view.ItfObjName = Path.GetFileName(fileName); } } catch (Exception ex) { errMsg = (Localization.UseRussian ? "Ошибка при приёме представления от SCADA-Сервера: " : "Error receiving view from SCADA-Server: ") + ex.Message; WriteAction(errMsg, Log.ActTypes.Exception); } finally { Monitor.Exit(tcpLock); } return result; }
/// <summary> /// �������� ������������� ��������� ���� � ����� �� ���� /// </summary> public bool GetView(Type viewType, int viewSetIndex, int viewIndex, out BaseView view, out MainData.Right right) { bool result = false; view = null; right = MainData.Right.NoRights; try { if (viewSetRightList != null && 0 <= viewSetIndex && viewSetIndex < viewSetRightList.Count) { ViewSetRight viewSetRight = viewSetRightList[viewSetIndex]; ViewSettings.ViewSet viewSet = viewSetRight.ViewSet; if (viewSetRight.ViewRightArr == null) InitViewRightArr(viewSetRight); MainData.Right[] viewRightArr = viewSetRight.ViewRightArr; if (viewSet != null && viewRightArr != null && 0 <= viewIndex && viewIndex < viewSet.Count && viewIndex < viewRightArr.Length) { ViewSettings.ViewInfo viewInfo = viewSet[viewIndex]; right = viewRightArr[viewIndex]; if (viewType == null) { view = viewInfo.ViewCash; return view != null; } else if (viewInfo.Type == viewType.Name) { if (viewInfo.ViewCash != null && viewInfo.ViewCash.GetType() == viewType) { view = viewInfo.ViewCash; result = true; } else { view = (BaseView)Activator.CreateInstance(viewType); if (!view.StoredOnServer) view.ItfObjName = Path.GetFileName(viewInfo.FileName); if (!view.StoredOnServer || AppData.MainData.ServerComm.ReceiveView(viewSet.Directory + viewInfo.FileName, view)) { AppData.MainData.RefreshBase(); view.BindCnlProps(AppData.MainData.CnlPropsArr); viewInfo.ViewCash = view; result = true; } } } } } } catch (Exception ex) { AppData.Log.WriteAction((Localization.UseRussian ? "������ ��� ��������� �������������: " : "Error getting view: ") + ex.Message, Log.ActTypes.Exception); } return result; }
/// <summary> /// Установить параметры отчёта. /// repParams[0] - табличное представление типа TableView, /// repParams[1] - дата запрашиваемых данных типа DateTime, /// repParams[2] - вывод событий типа int: 0 и меньше - не выводить, 1 - все события, иначе - по представлению /// </summary> public override void SetParams(params object[] repParams) { baseView = (BaseView)repParams[0]; tableView = baseView as TableView; date = (DateTime)repParams[1]; eventOut = (int)repParams[2]; if (tableView == null && eventOut <= 0) throw new Exception(WebPhrases.NoReportData); }