/// <summary> /// Get a displayed event based on event data /// </summary> /// <remarks>The method always returns a non-null object.</remarks> public DispEvent GetDispEvent(EventTableLight.Event ev, DataFormatter dataFormatter) { var dispEvent = new DispEvent(); try { dispEvent.Num = ev.Number; dispEvent.Time = ev.DateTime.ToLocalizedString(); dispEvent.Ack = ev.Checked ? CommonPhrases.EventAck : CommonPhrases.EventNotAck; var cnlProps = GetCnlProps(ev.CnlNum); var cnlStatProps = GetCnlStatProps(ev.NewCnlStat); if (cnlProps == null) { dispEvent.Obj = GetObjName(ev.ObjNum); dispEvent.KP = GetKPName(ev.KPNum); } else { dispEvent.Obj = cnlProps.ObjName; dispEvent.KP = cnlProps.KPName; dispEvent.Cnl = cnlProps.CnlName; dispEvent.Color = dataFormatter.GetCnlValColor( ev.NewCnlVal, ev.NewCnlStat, cnlProps, cnlStatProps); dispEvent.Sound = cnlProps.EvSound; } dispEvent.Text = dataFormatter.GetEventText(ev, cnlProps, cnlStatProps); } catch (Exception ex) { log.WriteException(ex, "Error getting displayed event based on the event data"); } return(dispEvent); }
private DispEvent dispEvent; // событие для вывода в отчёт /// <summary> /// Конструктор /// </summary> public EventsRepBuilder(DataAccess dataAccess) : base() { if (dataAccess == null) { throw new ArgumentNullException("dataAccess"); } this.dataAccess = dataAccess; view = null; date = DateTime.MinValue; eventRowTemplate = null; dispEvent = null; }
/// <summary> /// Окончательно обработать дерево XML-документа /// </summary> protected override void FinalXmlDocProc() { // проверка шаблона if (workbook.Worksheets.Count == 0 || eventRowTemplate == null) { throw new Exception(WebPhrases.IncorrectRepTemplate); } // перевод наименования листа workbook.Worksheets[0].Name = TablePhrases.EventsWorksheet; // удаление лишних атрибутов таблицы Table table = eventRowTemplate.ParentTable; table.RemoveTableNodeAttrs(); // удаление строки-шаблона int eventRowIndex = table.Rows.IndexOf(eventRowTemplate); table.RemoveRow(eventRowIndex); // выбор событий EventTableLight tblEvent = dataAccess.DataCache.GetEventTable(date); List <EventTableLight.Event> events = view == null ? tblEvent.AllEvents : tblEvent.GetFilteredEvents(new EventTableLight.EventFilter( EventTableLight.EventFilters.Cnls) { CnlNums = view.CnlSet }); // вывод событий в отчёт DataFormatter dataFormatter = new DataFormatter(); foreach (EventTableLight.Event ev in events) { dispEvent = dataAccess.GetDispEvent(ev, dataFormatter); Row newRow = eventRowTemplate.Clone(); ExcelProc(newRow); table.AppendRow(newRow); } }
/// <summary> /// Получить отображаемое событие на основе данных события. /// </summary> /// <remarks>Метод всегда возвращает объект, не равный null.</remarks> public DispEvent GetDispEvent(EventTableLight.Event ev, DataFormatter dataFormatter) { DispEvent dispEvent = new DispEvent(); try { dispEvent.Num = ev.Number; dispEvent.Time = ev.DateTime.ToLocalizedString(); dispEvent.Ack = ev.Checked ? CommonPhrases.EventAck : CommonPhrases.EventNotAck; InCnlProps cnlProps = GetCnlProps(ev.CnlNum); CnlStatProps cnlStatProps = GetCnlStatProps(ev.NewCnlStat); if (cnlProps == null) { dispEvent.Obj = GetObjName(ev.ObjNum); dispEvent.KP = GetKPName(ev.KPNum); } else { dispEvent.Obj = cnlProps.ObjName; dispEvent.KP = cnlProps.KPName; dispEvent.Cnl = cnlProps.CnlName; dispEvent.Color = dataFormatter.GetCnlValColor( ev.NewCnlVal, ev.NewCnlStat, cnlProps, cnlStatProps); dispEvent.Sound = cnlProps.EvSound; } dispEvent.Text = dataFormatter.GetEventText(ev, cnlProps, cnlStatProps); } catch (Exception ex) { log.WriteException(ex, Localization.UseRussian ? "Ошибка при получении отображаемого события на основе данных события" : "Error getting displayed event based on the event data"); } return(dispEvent); }
public string GetEvents(int year, int month, int day, string cnlNums, int viewID, int lastCount, int startEvNum, long dataAge) { try { UserRights userRights; AppData.CheckLoggedOn(out userRights); // создание фильтра событий HashSet <int> cnlSet = GetCnlSet(cnlNums, viewID, userRights); EventTableLight.EventFilter eventFilter = cnlSet == null ? new EventTableLight.EventFilter(EventTableLight.EventFilters.None) : new EventTableLight.EventFilter(EventTableLight.EventFilters.Cnls); eventFilter.CnlNums = cnlSet; // получение событий DataAccess dataAccess = AppData.DataAccess; DateTime date = new DateTime(year, month, day); EventTableLight tblEvent = dataAccess.DataCache.GetEventTable(date); long newDataAge = WebUtils.DateTimeToJs(tblEvent.FileModTime); DispEvent[] eventsToSend; if (tblEvent.FileModTime > DateTime.MinValue && dataAge < newDataAge) { // применение фильтра событий bool reversed; List <EventTableLight.Event> events = tblEvent.GetFilteredEvents(eventFilter, lastCount, startEvNum, out reversed); // преобразование событий для передачи int evCnt = events.Count; eventsToSend = new DispEvent[evCnt]; if (reversed) { for (int i = 0, j = evCnt - 1; i < evCnt; i++, j--) { eventsToSend[i] = dataAccess.GetDispEvent(events[j], DataFormatter); } } else { for (int i = 0; i < evCnt; i++) { eventsToSend[i] = dataAccess.GetDispEvent(events[i], DataFormatter); } } } else { eventsToSend = new DispEvent[0]; } return(JsSerializer.Serialize(new ArcDTO(eventsToSend, newDataAge))); } catch (Exception ex) { AppData.Log.WriteException(ex, Localization.UseRussian ? "Ошибка при получении событий по фильтру, где каналы={0}, ид. представления={1}" : "Error getting events by the filter where channels={0}, view id={1}", cnlNums, viewID); return(GetErrorDtoJs(ex)); } }
private int evNum; // номер события protected void Page_Load(object sender, EventArgs e) { appData = AppData.GetAppData(); userData = UserData.GetUserData(); // проверка входа в систему if (!userData.LoggedOn) { throw new ScadaException(WebPhrases.NotLoggedOn); } // скрытие сообщения об ошибке pnlErrMsg.HideAlert(); if (IsPostBack) { evDate = (DateTime)ViewState["EvDate"]; evNum = (int)ViewState["EvNum"]; } else { // перевод веб-страницы Translator.TranslatePage(Page, "Scada.Web.Plugins.Table.WFrmEventAck"); // получение параметров запроса и сохранение во ViewState evDate = Request.QueryString.GetParamAsDate(DateTime.Today); evNum = Request.QueryString.GetParamAsInt("evNum"); ViewState["EvDate"] = evDate; ViewState["EvNum"] = evNum; int viewID = Request.QueryString.GetParamAsInt("viewID"); // получение события EventTableLight tblEvent = appData.DataAccess.DataCache.GetEventTable(evDate); EventTableLight.Event ev = tblEvent.GetEventByNum(evNum); if (ev == null) { pnlErrMsg.ShowAlert(lblEventNotFound); btnSubmit.Enabled = false; } else { // проверка прав EntityRights rights = userData.UserRights.GetUiObjRights(viewID); if (!rights.ViewRight) { throw new ScadaException(CommonPhrases.NoRights); } if (!userData.UserRights.ViewAllRight) { BaseView view = userData.UserViews.GetView(viewID, true); if (!view.ContainsCnl(ev.CnlNum)) { throw new ScadaException(CommonPhrases.NoRights); } } btnSubmit.Visible = pnlTip.Visible = rights.ControlRight && !ev.Checked; // вывод информации по событию pnlInfo.Visible = true; DispEvent dispEvent = appData.DataAccess.GetDispEvent(ev, new DataFormatter()); lblNum.Text = dispEvent.Num.ToString(); lblTime.Text = dispEvent.Time; lblObj.Text = dispEvent.Obj; lblDev.Text = dispEvent.KP; lblCnl.Text = dispEvent.Cnl; lblText.Text = dispEvent.Text; lblAck.Text = dispEvent.Ack; lblAck.CssClass = ev.Checked ? "ack-yes" : "ack-no"; if (ev.Checked && ev.UserID > 0) { string userName = appData.DataAccess.GetUserName(ev.UserID); lblByUser.Text = string.Format(lblByUser.Text, userName); lblByUser.Visible = userName != ""; } if (dispEvent.Color != "") { try { lblNum.ForeColor = lblTime.ForeColor = lblObj.ForeColor = lblDev.ForeColor = lblCnl.ForeColor = lblText.ForeColor = ColorTranslator.FromHtml(dispEvent.Color); } catch { } } } } }
/// <summary> /// Предварительно обработать дерево XML-документа /// </summary> protected override void StartXmlDocProc() { eventRowTemplate = null; dispEvent = null; }