public VisualizeData GetVisualizeData( NodeDataProvider dataProvider, GraphicsInfo graphicsInfo ) { XmlDocument xmlData = dataProvider.XmlDocument; MultyQueryResultInfo queriesResult = dataProvider.QueryResult; VisualizeData result = new VisualizeData { NodeLastUpdated = queriesResult.NodeLastUpdated, NodeLastUpdateDuration = queriesResult.NodeLastUpdateDuration }; if (xmlData != null && xmlData.DocumentElement != null) { result.SourceXml = xmlData.FormatXml(); } ConcreteTemplateNodeDefinition nodeDefinition = dataProvider.NodeDefinition; string xslFileName = GetXslFileName(nodeDefinition); if (xslFileName != null && File.Exists(xslFileName)) { XmlDocument xslDoc = new XmlDocument(); xslDoc.Load(xslFileName); ConnectionGroupInfo connectionGroup = nodeDefinition.Connection; if (AppVersionHelper.IsNotDebug() && !connectionGroup.IsExternal) { CryptoProcessor cryptoProcessor = new CryptoProcessor( this._model.Settings.SystemSettings.PublicKeyXmlSign, this._model.Settings.SystemSettings.PrivateKeyXmlDecrypt ); cryptoProcessor.DecryptXmlDocument(xslDoc); } try { XslPreprocessManager preprocessManager = GetManager( dataProvider, graphicsInfo ); List<PreprocessorAreaData> datas; using (preprocessManager.ExecuteXslPreprocessing(xslDoc, out datas)) { } foreach (PreprocessorAreaData preprocessorAreaData in datas) { preprocessorAreaData.CheckPreprocessors(); } result.PreprocessorAreas = datas.ToList(); } catch (Exception ex) { log.ErrorFormat( "nodeDefinition.TemplateNode.Queries(.Name)='{0}';xslFileName='{1}';Exception:'{2}'", nodeDefinition.TemplateNode.Queries.Select(q => q.QueryName).Join(", "), xslFileName, ex ); } } return result; }
private void RenderVisualizeData(ConcreteTemplateNodeDefinition definition, VisualizeData visualizeData, int selectTabIndex) { string additionalXml = string.Empty; int tabIndex = tcBrowse.TabCount - 1; TemplateNodeInfo nodeInfo = definition.TemplateNode; tcBrowse.ShowSingleTab = !nodeInfo.IsHideTabs; if (visualizeData.PreprocessorAreas != null) { List<PreprocessorDataDescriptor> dialogObjects = visualizeData.PreprocessorAreas.SelectMany( a => a.NoSplitter || a.Preprocessors.Count == 0 || (a.Columns.Length == 1 && a.Rows.Length == 1) ? a.Preprocessors.SelectMany( data => new[] { new PreprocessorDataDescriptor(a, data) } ) : new[] { new PreprocessorDataDescriptor(a) } ).ToList(); // create tab pages with empty content first // to avoid flickering and extra reports loading List<TabPage> newPages = new List<TabPage>(); int bufferIndex = 0; foreach (PreprocessorDataDescriptor dialogObj in dialogObjects) { TabPage page = this._pageBuffer.GetPage(bufferIndex++); PreprocessorAreaData dialogArea = dialogObj.AreaData; page.Text = dialogArea != null ? dialogArea.Name : string.Empty; page.DisposeChildControls(); newPages.Add(page); tcBrowse.TabPages.Add(page); tabIndex++; if (selectTabIndex == tabIndex) { tcBrowse.SelectedIndex = selectTabIndex; } } // release extra pages in buffer this._pageBuffer.Resize(bufferIndex); // fill tab pages with report controls IEnumerator<TabPage> pageEnum = newPages.GetEnumerator(); foreach (PreprocessorDataDescriptor dialogObj in dialogObjects) { pageEnum.MoveNext(); TabPage page = pageEnum.Current; PreprocessorAreaData dialogArea = dialogObj.AreaData; if (dialogArea != null) { ConnectionTabArea ctrl = new ConnectionTabArea { Dock = DockStyle.Fill }; ctrl.Init(this, dialogArea, definition, this._model); page.Controls.Add(ctrl); } else { PreprocessorData dialogPreproc = dialogObj.Data; if (dialogPreproc != null) { Control control = dialogPreproc.ContentFactory.CreateControl(); if (control is WebBrowser || control is ReportViewrControl) { control.PreviewKeyDown += (s, e) => { if (e.KeyCode == Keys.F5) { F5RefreshView(); } }; if (control is ReportViewrControl && tcBrowse.Visible) { if ((control as ReportViewrControl).ReportXML != string.Empty) { using (MemoryStream xmlWriterStream = new MemoryStream()) { XmlWriterSettings xmlWriterSettings = new XmlWriterSettings { CheckCharacters = false, ConformanceLevel = ConformanceLevel.Auto, Encoding = Encoding.UTF8, Indent = true, IndentChars = " ", NewLineChars = Environment.NewLine, NewLineHandling = NewLineHandling.Replace, NewLineOnAttributes = false, OmitXmlDeclaration = false }; using (var xmlWriter = XmlWriter.Create(xmlWriterStream, xmlWriterSettings)) { XmlDocument doc = new XmlDocument(); doc.LoadXml((control as ReportViewrControl).ReportXML); doc.Save(xmlWriter); xmlWriter.Flush(); } additionalXml = Encoding.UTF8.GetString(xmlWriterStream.ToArray()); } } } } if (dialogPreproc.VerticalTextAlign != null) { TitleFrame titleFrame = new TitleFrame( dialogPreproc.VerticalTextAlign, dialogPreproc.TextAlign, control ); titleFrame.Title = dialogPreproc.Name; control = titleFrame; } control.Dock = DockStyle.Fill; page.Controls.Add(control); } } } } txtXml.Text = visualizeData.SourceXml + Environment.NewLine + additionalXml; txtXml.SelectionStart = 0; txtXml.SelectionLength = 0; txtXml.ReadOnly = true; txtXml.BackColor = Color.White; lblLastRefreshDate.Text = !visualizeData.NodeLastUpdated.HasValue ? ComposeBlankDateTimeString() : visualizeData.NodeLastUpdated.Value.ToString(); lblSpendTime.Text = visualizeData.NodeLastUpdateDuration.HasValue ? String.Format( " {0:00}:{1:00}:{2:00}", visualizeData.NodeLastUpdateDuration.Value.Hour, visualizeData.NodeLastUpdateDuration.Value.Minute, visualizeData.NodeLastUpdateDuration.Value.Second ) : String.Format( " {0:00}:{1:00}:{2:00}", 0, 0, 0 ); UpdateScheduledDate(nodeInfo); }