Пример #1
0
        /// <summary>
        /// Начальная обработка дерева XML-документа
        /// </summary>
        protected override void StartXmlDocProc()
        {
            genDT = DateTime.Now;

            if (tableView == null)
            {
                hourTable = null;
            }
            else
            {
                AppData.MainData.RefreshData(date, out hourTable);
            }

            if (eventOut <= 0)
            {
                eventTable = null;
            }
            else
            {
                AppData.MainData.RefreshEvents(date, out eventTable);
            }

            templItemRow  = null;
            templEventRow = null;
            item          = null;
            eventView     = null;
        }
Пример #2
0
        protected void Page_Load(object sender, EventArgs e)
        {
            // отключение кэширования страницы
            ScadaUtils.DisablePageCache(Response);

            // получение данных пользователя
            UserData userData = UserData.GetUserData();

            // проверка входа в систему
            userData.CheckLoggedOn(Context, false);
            if (!userData.LoggedOn)
            {
                throw new Exception(WebPhrases.NotLoggedOn);
            }

            // перевод веб-страницы
            Localization.TranslatePage(this, "Scada.Web.WFrmTableView");

            // определение индексов выбранного представления
            int viewSetIndex, viewIndex;

            if (!int.TryParse(Request["viewSet"], out viewSetIndex))
            {
                viewSetIndex = -1;
            }
            if (!int.TryParse(Request["view"], out viewIndex))
            {
                viewIndex = -1;
            }

            // получение табличного представления и прав пользователя на него
            BaseView baseView;

            MainData.Right right;
            TableView      tableView = userData.GetView(typeof(TableView), viewSetIndex, viewIndex,
                                                        out baseView, out right) ? (TableView)baseView : null;

            // проверка загрузки представления и прав на просмотр информации
            if (tableView == null)
            {
                throw new Exception(WebPhrases.UnableLoadView);
            }
            else if (!right.ViewRight)
            {
                throw new Exception(CommonPhrases.NoRights);
            }

            // определение параметров запроса
            int year, month, day, stage;

            int.TryParse(Request["year"], out year);
            int.TryParse(Request["month"], out month);
            int.TryParse(Request["day"], out day);
            int.TryParse(Request["stage"], out stage);

            DateTime reqDate;

            try
            {
                reqDate = new DateTime(year, month, day);
            }
            catch
            {
                throw new Exception(WebPhrases.IncorrectDate);
            }

            // формирование таблицы отображаемых элементов представления
            int itemCnt     = tableView.VisibleCount;
            int itemLastInd = itemCnt - 1;

            if (itemCnt > 0)
            {
                // формирование таблицы обозначений элементов представления
                TableRow row = new TableRow();
                row.CssClass = "hdr";
                NewCell(row, WebPhrases.ItemColumn);
                tblCap.Rows.Add(row);

                const string textHtmlTempl = "<table class=\"cap\" cellpadding=\"0\" cellspacing=\"0\"><tr>" +
                                             "<td>{0}</td><td>{1}</td><td>{2}</td></tr></table>";
                const string hintHtmlTempl = "<div class=\"hint\">{0}</div>";
                const string iconHtmlTempl = "<img src=\"images/paramIcons/{0}\" alt=\"\" />";
                const string capHtmlTempl  = "<span>{0}</span>";
                const string diagHtmlTempl = "<a href=\"javascript:ShowDiag({0}, {1}, {2}, {3}, {4}, {5})\">";
                const string cmdHtmlTempl  = "<a href=\"javascript:SendCmd({0}, {1}, {2})\">" +
                                             "<img src=\"images/cmd.gif\" alt=\"\" /></a>";
                bool canSendCmd = AppData.WebSettings.CmdEnabled && right.CtrlRight;

                for (int itemInd = 0; itemInd < itemCnt; itemInd++)
                {
                    TableView.Item item        = tableView.VisibleItems[itemInd];
                    int            cnlNum      = item.CnlNum;
                    int            cntrlCnlNum = item.CtrlCnlNum;
                    string         text;

                    if (cnlNum > 0 || cntrlCnlNum > 0)
                    {
                        CnlProps cnlProps = item.CnlProps;

                        List <string> hintLines = new List <string>();
                        if (cnlNum > 0)
                        {
                            hintLines.Add(WebPhrases.InCnlNumHint + cnlNum);
                        }
                        if (cntrlCnlNum > 0)
                        {
                            hintLines.Add(WebPhrases.OutCnlNumHint + cntrlCnlNum);
                        }
                        if (cnlProps != null)
                        {
                            hintLines.Add(WebPhrases.ObjectHint + cnlProps.ObjName);
                            hintLines.Add(WebPhrases.KPHint + cnlProps.KPName);
                            hintLines.Add(WebPhrases.ParamHint + cnlProps.ParamName);
                            if (cnlProps.ShowNumber && cnlProps.UnitArr != null && cnlProps.UnitArr.Length > 0)
                            {
                                hintLines.Add(WebPhrases.UnitHint + cnlProps.UnitArr[0]);
                            }
                        }

                        string hint         = string.Join("<br />", hintLines.ToArray());
                        string hintHtml     = string.Format(hintHtmlTempl, hint);
                        string iconFileName = cnlProps == null || cnlProps.IconFileName == "" ?
                                              "undef.gif" : cnlProps.IconFileName;
                        string iconHtml = string.Format(iconHtmlTempl, iconFileName);
                        string capHtml  = string.Format(capHtmlTempl, item.Caption);
                        string cmdHtml  = canSendCmd && cntrlCnlNum > 0 ?
                                          string.Format(cmdHtmlTempl, viewSetIndex, viewIndex, cntrlCnlNum) : "";

                        if (cnlNum > 0)
                        {
                            string diagHtml = string.Format(diagHtmlTempl,
                                                            viewSetIndex, viewIndex, year, month, day, cnlNum);
                            iconHtml = diagHtml + iconHtml + "</a>";
                            capHtml  = diagHtml + capHtml + "</a>";
                        }

                        text = string.Format(textHtmlTempl, iconHtml + hintHtml, capHtml, cmdHtml);
                    }
                    else
                    {
                        text = item.Caption == "" ? "<p>&nbsp;</p>" : "<p>" + item.Caption + "</p>";
                    }

                    row = new TableRow();
                    SetCssClass(row, itemInd % 3 == 2, itemInd == itemLastInd);
                    NewCell(row, text);
                    tblCap.Rows.Add(row);
                }

                // получение обновлённых данных часовых срезов
                SrezTableLight hourTable;
                AppData.MainData.RefreshData(reqDate, out hourTable);

                // формирование ячейки текущего среза
                row          = new TableRow();
                row.CssClass = "hdr";
                NewCell(row, WebPhrases.CurColumn);
                tblCur.Rows.Add(row);

                row = new TableRow();
                NewCell(row, "<iframe id=\"frameCurVal\" src=\"" +
                        "CurVals.aspx?viewSet=" + viewSetIndex + "&view=" + viewIndex + "&year=" + year +
                        "&month=" + month + "&day=" + day + "&hourStamp=" + hourTable.FileModTime.Ticks +
                        "\" frameborder=\"0\" scrolling=\"no\"></iframe>");
                tblCur.Rows.Add(row);

                // формирование заголовка таблицы часовых значений
                int firstHour = stage == 2 ? 12 : 0;
                int lastHour  = stage == 1 ? 11 : 23;
                row          = new TableRow();
                row.CssClass = "hdr";
                tblHour.Rows.Add(row);

                for (int hour = firstHour; hour <= lastHour; hour++)
                {
                    NewCell(row, hour.ToString());
                }

                // формирование содержимого таблицы часовых значений
                // для оптимизации доступа к данным порядок заполнения следующий: по часам, по элементам
                for (int hour = firstHour; hour <= lastHour; hour++)
                {
                    bool     isFirstHour = hour == firstHour;
                    DateTime dateTime    = new DateTime(year, month, day, hour, 0, 0);
                    int      rowInd      = 1;

                    for (int itemInd = 0; itemInd < itemCnt; itemInd++)
                    {
                        TableView.Item item = tableView.VisibleItems[itemInd];
                        string         text;
                        string         color;

                        if (item.CnlNum > 0)
                        {
                            text = AppData.MainData.GetCnlVal(hourTable, item.CnlNum, dateTime, false, out color);
                        }
                        else
                        {
                            text  = "";
                            color = "";
                        }

                        if (isFirstHour)
                        {
                            row = new TableRow();
                            SetCssClass(row, itemInd % 3 == 2, itemInd == itemLastInd);
                            tblHour.Rows.Add(row);
                            text = text == "" ? "<p>&nbsp;</p>" : "<p>" + text + "</p>";
                        }
                        else
                        {
                            row = tblHour.Rows[rowInd++];
                        }

                        TableCell cell = NewCell(row, text);

                        if (!(color == "" || color.ToLower() == "black"))
                        {
                            cell.ForeColor = Color.FromName(color);
                        }
                    }
                }
            }
            else
            {
                tblCap.Visible    = false;
                tblCur.Visible    = false;
                tblHour.Visible   = false;
                lblNoData.Visible = true;
            }
        }
Пример #3
0
        /// <summary>
        /// Добавить элемент на основе канала из базы конфигурации
        /// </summary>
        private void AddItem()
        {
            if (dgvCnls.SelectedRows.Count > 0)
            {
                DataGridViewRow cnlRow = dgvCnls.SelectedRows[0];
                TableView.Item item = new TableView.Item();
                int cnlNum = (int)cnlRow.Cells["colCnlNum"].Value;
                item.Caption = (string)cnlRow.Cells["colCnlName"].Value;

                if (bsCnls.DataSource == tblInCnl)
                    item.CnlNum = cnlNum;
                else
                    item.CtrlCnlNum = cnlNum;

                InsertItem(item);
            }
        }
Пример #4
0
        protected void Page_Load(object sender, EventArgs e)
        {
            // отключение кэширования страницы
            ScadaUtils.DisablePageCache(Response);

            // получение данных пользователя
            UserData userData = UserData.GetUserData();

            // определение индексов выбранного представления
            int viewSetIndex, viewIndex;

            if (!int.TryParse(Request["viewSet"], out viewSetIndex))
            {
                viewSetIndex = -1;
            }
            if (!int.TryParse(Request["view"], out viewIndex))
            {
                viewIndex = -1;
            }

            // получение табличного представления и прав пользователя на него
            BaseView baseView;

            MainData.Right right;
            TableView      tableView = userData.GetView(typeof(TableView), viewSetIndex, viewIndex,
                                                        out baseView, out right) ? (TableView)baseView : null;

            // проверка входа в систему и прав на просмотр информации
            if (userData.LoggedOn && tableView != null && right.ViewRight)
            {
                // определение параметров запроса
                int year, month, day;
                int.TryParse(Request["year"], out year);
                int.TryParse(Request["month"], out month);
                int.TryParse(Request["day"], out day);
                string hourStamp = Request["hourStamp"];

                DateTime reqDate;
                try
                {
                    reqDate = new DateTime(year, month, day);
                }
                catch
                {
                    throw new Exception(WebPhrases.IncorrectDate);
                }

                // обновление данных
                SrezTableLight hourTable;
                AppData.MainData.RefreshData(reqDate, out hourTable);

                // формирование таблицы текущих значений элементов представления
                int itemCnt     = tableView.VisibleCount;
                int itemLastInd = itemCnt - 1;

                for (int itemInd = 0; itemInd < itemCnt; itemInd++)
                {
                    TableView.Item item = tableView.VisibleItems[itemInd];
                    string         text;
                    string         color;

                    if (item.CnlNum > 0)
                    {
                        text = AppData.MainData.GetCnlVal(item.CnlNum, false, out color);
                    }
                    else
                    {
                        text  = "";
                        color = "";
                    }

                    TableRow  row  = new TableRow();
                    TableCell cell = WFrmTableView.NewCell(row, text == "" ? "<p>&nbsp;</p>" : "<p>" + text + "</p>");
                    WFrmTableView.SetCssClass(row, itemInd % 3 == 2, itemInd == itemLastInd);
                    tblCurVals.Rows.Add(row);

                    if (!(color == "" || color.ToLower() == "black"))
                    {
                        cell.ForeColor = Color.FromName(color);
                    }
                }


                if (string.IsNullOrEmpty(hourStamp) || hourStamp == hourTable.FileModTime.Ticks.ToString())
                {
                    // добавление скрипта обновления текущих значений по таймауту
                    AddRefreshCurValsScript(AppData.WebSettings.SrezRefrFreq * 1000);
                }
                else
                {
                    // добавление скрипта обновления часовых значений при загрузке
                    AddRefreshHourValsScript();
                }
            }
            else
            {
                // добавление скрипта обновления часовых значений при загрузке
                // для перехода на страницу входа в систему
                AddRefreshHourValsScript();
            }
        }
Пример #5
0
        /// <summary>
        /// Окончательная обработка дерева XML-документа
        /// </summary>
        protected override void FinalXmlDocProc()
        {
            int  hourDataWsInd    = 0; // индекс листа часовых срезов
            int  eventsWsInd      = 1; // индекс листа событий
            bool hourDataWsExists = workbook != null && workbook.Worksheets.Count > hourDataWsInd;
            bool eventsWsExists   = workbook != null && workbook.Worksheets.Count > eventsWsInd;

            // работа с листом часовых срезов
            if (tableView == null)
            {
                // удаление листа часовых срезов
                if (hourDataWsExists)
                {
                    workbook.RemoveWorksheet(hourDataWsInd);
                    eventsWsInd--;
                }
            }
            else
            {
                // перевод наименования листа
                if (hourDataWsExists)
                {
                    workbook.Worksheets[hourDataWsInd].Name = WebPhrases.HourDataPage;
                }

                if (templItemRow != null)
                {
                    // удаление лишних атрибутов таблицы
                    Table table = templItemRow.ParentTable;
                    table.RemoveTableNodeAttrs();

                    // заполнение таблицы часовых срезов
                    for (int i = 0; i < tableView.VisibleCount; i++)
                    {
                        item = tableView.VisibleItems[i];
                        Row rowClone = templItemRow.Clone();
                        ExcelProc(rowClone);
                        table.AppendRow(rowClone);
                    }
                    item = null;

                    // удаление строки-шаблона
                    int rowIndex = table.Rows.IndexOf(templItemRow);
                    table.RemoveRow(rowIndex);
                }
            }

            // работа с листом событий
            if (eventOut <= 0)
            {
                // удаление листа событий
                if (eventsWsExists)
                {
                    workbook.RemoveWorksheet(eventsWsInd);
                }
            }
            else
            {
                // перевод наименования листа
                if (eventsWsExists)
                {
                    workbook.Worksheets[eventsWsInd].Name = WebPhrases.EventsPage;
                }

                if (templEventRow != null)
                {
                    // удаление лишних атрибутов таблицы
                    Table table = templEventRow.ParentTable;
                    table.RemoveTableNodeAttrs();

                    // выбор событий
                    List <MainData.EventView> eventViewList =
                        AppData.MainData.ConvertEvents(eventOut == 1 ?
                                                       AppData.MainData.GetEvents(eventTable, null) :
                                                       AppData.MainData.GetEvents(eventTable, baseView.CnlList));

                    // заполнение таблицы событий
                    for (int i = 0; i < eventViewList.Count; i++)
                    {
                        eventView = eventViewList[i];
                        Row rowClone = templEventRow.Clone();
                        ExcelProc(rowClone);
                        table.AppendRow(rowClone);
                    }

                    // удаление строки-шаблона
                    int rowIndex = table.Rows.IndexOf(templEventRow);
                    table.RemoveRow(rowIndex);
                }
            }
        }
Пример #6
0
        /// <summary>
        /// Окончательная обработка дерева XML-документа
        /// </summary>
        protected override void FinalXmlDocProc()
        {
            int hourDataWsInd = 0; // индекс листа часовых срезов
            int eventsWsInd = 1;   // индекс листа событий
            bool hourDataWsExists = workbook != null && workbook.Worksheets.Count > hourDataWsInd;
            bool eventsWsExists = workbook != null && workbook.Worksheets.Count > eventsWsInd;

            // работа с листом часовых срезов
            if (tableView == null)
            {
                // удаление листа часовых срезов
                if (hourDataWsExists)
                {
                    workbook.RemoveWorksheet(hourDataWsInd);
                    eventsWsInd--;
                }
            }
            else
            {
                // перевод наименования листа
                if (hourDataWsExists)
                    workbook.Worksheets[hourDataWsInd].Name = WebPhrases.HourDataPage;

                if (templItemRow != null)
                {
                    // удаление лишних атрибутов таблицы
                    Table table = templItemRow.ParentTable;
                    table.RemoveTableNodeAttrs();

                    // заполнение таблицы часовых срезов
                    for (int i = 0; i < tableView.VisibleCount; i++)
                    {
                        item = tableView.VisibleItems[i];
                        Row rowClone = templItemRow.Clone();
                        ExcelProc(rowClone);
                        table.AppendRow(rowClone);
                    }
                    item = null;

                    // удаление строки-шаблона
                    int rowIndex = table.Rows.IndexOf(templItemRow);
                    table.RemoveRow(rowIndex);
                }
            }

            // работа с листом событий
            if (eventOut <= 0)
            {
                // удаление листа событий
                if (eventsWsExists)
                    workbook.RemoveWorksheet(eventsWsInd);
            }
            else
            {
                // перевод наименования листа
                if (eventsWsExists)
                    workbook.Worksheets[eventsWsInd].Name = WebPhrases.EventsPage;

                if (templEventRow != null)
                {
                    // удаление лишних атрибутов таблицы
                    Table table = templEventRow.ParentTable;
                    table.RemoveTableNodeAttrs();

                    // выбор событий
                    List<MainData.EventView> eventViewList = 
                        AppData.MainData.ConvertEvents(eventOut == 1 ?
                            AppData.MainData.GetEvents(eventTable, null) :
                            AppData.MainData.GetEvents(eventTable, baseView.CnlList));

                    // заполнение таблицы событий
                    for (int i = 0; i < eventViewList.Count; i++)
                    {
                        eventView = eventViewList[i];
                        Row rowClone = templEventRow.Clone();
                        ExcelProc(rowClone);
                        table.AppendRow(rowClone);
                    }

                    // удаление строки-шаблона
                    int rowIndex = table.Rows.IndexOf(templEventRow);
                    table.RemoveRow(rowIndex);
                }
            }
        }
Пример #7
0
        /// <summary>
        /// Начальная обработка дерева XML-документа
        /// </summary>
        protected override void StartXmlDocProc()
        {
            genDT = DateTime.Now;

            if (tableView == null)
                hourTable = null;
            else
                AppData.MainData.RefreshData(date, out hourTable);

            if (eventOut <= 0)
                eventTable = null;
            else
                AppData.MainData.RefreshEvents(date, out eventTable);

            templItemRow = null;
            templEventRow = null;
            item = null;
            eventView = null;
        }