Exemplo n.º 1
0
        /// <summary>
        /// Привязать свойства входных каналов к элементам представления
        /// </summary>
        public override void BindCnlProps(CnlProps[] cnlPropsArr)
        {
            base.BindCnlProps(cnlPropsArr);

            if (cnlPropsArr != null)
            {
                foreach (Item item in Items)
                {
                    int ind = Array.BinarySearch(cnlPropsArr, item.CnlNum);
                    if (ind >= 0)
                    {
                        CnlProps cnlProps = cnlPropsArr[ind];
                        item.CnlProps = cnlProps;
                        if (cnlProps.CtrlCnlNum > 0)
                        {
                            item.CtrlCnlNum = cnlProps.CtrlCnlNum;
                            AddCtrlCnlNum(cnlProps.CtrlCnlNum);
                        }
                    }
                    else
                    {
                        item.CnlProps = null;
                    }
                }
            }
        }
Exemplo n.º 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;
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Обработка директивы, изменяющей значение элемента
        /// </summary>
        /// <param name="xmlNode">XML-узел, содержащий директиву</param>
        /// <param name="valName">Имя элемента, заданное директивой</param>
        protected override void ProcVal(Cell cell, string valName)
        {
            XmlNode dataNode = cell.DataNode;

            if (valName == "HourDataPage")
            {
                dataNode.InnerText = WebPhrases.HourDataPage;
            }
            else if (valName == "HourDataTitle")
            {
                dataNode.InnerText = string.Format(WebPhrases.HourDataTitle, date.ToString("d", Localization.Culture),
                                                   baseView.Title, genDT.ToString("d", Localization.Culture));
            }
            else if (valName == "ItemCol")
            {
                dataNode.InnerText = WebPhrases.ItemColumn;
            }
            else if (valName == "EventsPage")
            {
                dataNode.InnerText = WebPhrases.EventsPage;
            }
            else if (valName == "EventsTitle")
            {
                string dateStr  = date.ToString("d", Localization.Culture);
                string genDTStr = genDT.ToString("d", Localization.Culture);
                dataNode.InnerText = eventOut <= 1 ?
                                     string.Format(WebPhrases.AllEventsTitle, dateStr, genDTStr) :
                                     string.Format(WebPhrases.EventsByViewTitle, dateStr, baseView.Title, genDTStr);
            }
            else if (valName == "NumCol")
            {
                dataNode.InnerText = WebPhrases.NumColumn;
            }
            else if (valName == "DateCol")
            {
                dataNode.InnerText = WebPhrases.DateColumn;
            }
            else if (valName == "TimeCol")
            {
                dataNode.InnerText = WebPhrases.TimeColumn;
            }
            else if (valName == "ObjCol")
            {
                dataNode.InnerText = WebPhrases.ObjColumn;
            }
            else if (valName == "KPCol")
            {
                dataNode.InnerText = WebPhrases.KPColumn;
            }
            else if (valName == "CnlCol")
            {
                dataNode.InnerText = WebPhrases.CnlColumn;
            }
            else if (valName == "EvCol")
            {
                dataNode.InnerText = WebPhrases.EventColumn;
            }
            else if (valName == "ChkCol")
            {
                dataNode.InnerText = WebPhrases.CheckColumn;
            }
            else if (item != null)
            {
                if (valName == "Name")
                {
                    dataNode.InnerText = item.Caption;
                }
                else if (valName.Length >= 2 && valName[0] == 'h')
                {
                    int hour = -1;
                    try { hour = int.Parse(valName.Substring(1)); }
                    catch { }

                    int cnlNum = item.CnlNum;
                    if (hour >= 0 && cnlNum > 0)
                    {
                        DateTime dateTime = date.AddHours(hour);
                        double   val;
                        int      stat;
                        bool     isNumber;
                        string   color;

                        AppData.MainData.GetHourData(hourTable, cnlNum, dateTime, out val, out stat);
                        CnlProps cnlProps = AppData.MainData.GetCnlProps(cnlNum);
                        dataNode.InnerText = AppData.MainData.FormatCnlVal(val, stat, cnlProps, false, false,
                                                                           dateTime, genDT, out isNumber, out color, ".", "");

                        if (isNumber)
                        {
                            dataNode.Attributes["ss:Type"].Value = "Number";
                        }
                    }
                    else
                    {
                        dataNode.InnerText = "";
                    }
                }
            }
            else if (eventView != null)
            {
                if (valName == "Num")
                {
                    dataNode.InnerText = eventView.Num;
                    dataNode.Attributes["ss:Type"].Value = "Number";
                }
                else if (valName == "Date")
                {
                    dataNode.InnerText = eventView.Date;
                }
                else if (valName == "Time")
                {
                    dataNode.InnerText = eventView.Time;
                }
                else if (valName == "Obj")
                {
                    dataNode.InnerText = eventView.Obj;
                }
                else if (valName == "KP")
                {
                    dataNode.InnerText = eventView.KP;
                }
                else if (valName == "Cnl")
                {
                    dataNode.InnerText = eventView.Cnl;
                }
                else if (valName == "Ev")
                {
                    dataNode.InnerText = eventView.Text;
                }
                else if (valName == "Chk")
                {
                    dataNode.InnerText = eventView.User;
                }
                else
                {
                    dataNode.InnerText = "";
                }
            }
        }