/// <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); } }
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)); } }