Exemple #1
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);
            }
        }
Exemple #2
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));
            }
        }