Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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;
        }
Beispiel #3
0
        /// <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);
            }
        }
Beispiel #4
0
        /// <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);
        }
Beispiel #5
0
        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));
            }
        }
Beispiel #6
0
        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 { }
                    }
                }
            }
        }
Beispiel #7
0
 /// <summary>
 /// Предварительно обработать дерево XML-документа
 /// </summary>
 protected override void StartXmlDocProc()
 {
     eventRowTemplate = null;
     dispEvent        = null;
 }