/// <summary> /// Генерировать отчёт для загрузки через браузер /// </summary> public static void GenerateReport(RepBuilder repBuilder, object[] repParams, string templateDir, string fileName, HttpResponse response) { if (repBuilder == null) { throw new ArgumentNullException("repBuilder"); } if (response == null) { throw new ArgumentNullException("response"); } try { response.ClearHeaders(); response.ClearContent(); response.ContentType = "application/octet-stream"; if (!string.IsNullOrEmpty(fileName)) { response.AppendHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\""); } repBuilder.SetParams(repParams); repBuilder.Make(response.OutputStream, templateDir); } catch { response.ClearHeaders(); response.ClearContent(); response.ContentType = "text/html"; throw; } }
private void btnMake_Click(object sender, System.EventArgs e) { // определение директорий отчётов repTemplDir = NormalDir(txtTemplDir.Text); repOutDir = NormalDir(txtOutDir.Text); ListView.SelectedListViewItemCollection items = lvRep.SelectedItems; if (items.Count > 0) { try { // генерация отчёта ListViewItem item = items[0]; string dllFileName = item.SubItems[0].Text; string repFileName = dllFileName.Substring(0, dllFileName.Length - 4) + "Out.xml"; RepBuilder rep = item.Tag as RepBuilder; DateTime startTm = DateTime.Now; rep.Make(repOutDir + repFileName, repTemplDir); MessageBox.Show("Report has been generated.\n" + "Execution time: " + DateTime.Now.Subtract(startTm).ToString() + "\nOutput file: " + repOutDir + repFileName); } catch (Exception ex) { MessageBox.Show("Error making the report:\n" + ex.Message); } } else { MessageBox.Show("Select report."); } }
private void btnExecute_Click(object sender, System.EventArgs e) { repTemplDir = NormalDir(txtTemplDir.Text); repOutDir = NormalDir(txtOutDir.Text); ListView.SelectedListViewItemCollection items = lvRep.SelectedItems; if (items.Count > 0) { try { ListViewItem item = items[0]; string dllFileName = item.SubItems[0].Text; string repFileName = dllFileName.Substring(0, dllFileName.Length - 4) + "Out.xml"; RepBuilder rep = item.Tag as RepBuilder; if (rep.WinForm == null || rep.WinForm.ShowDialog() == DialogResult.OK) { DateTime startTm = DateTime.Now; rep.Make(repOutDir + repFileName, repTemplDir); MessageBox.Show("Report has been generated.\n" + "Execution time: " + DateTime.Now.Subtract(startTm).ToString() + "\nOutput file: " + repOutDir + repFileName); } else { MessageBox.Show("Report generation has been canceled."); } } catch (Exception ex) { MessageBox.Show("Error executing the report:\n" + ex.Message); } } else { MessageBox.Show("Select report."); } }
protected void Page_Load(object sender, EventArgs e) { // получение данных пользователя UserData userData = UserData.GetUserData(); // проверка входа в систему if (!userData.LoggedOn) { throw new Exception(WebPhrases.NotLoggedOn); } // перевод веб-страницы Translator.TranslatePage(this, "Scada.Web.WFrmReport"); // заполнение списка отчётов DirectoryInfo dirInfo = new DirectoryInfo(AppData.BinDir); SortedList <string, RepBuilder> repList = new SortedList <string, RepBuilder>(); if (dirInfo.Exists) { FileInfo[] fileInfoArr = dirInfo.GetFiles("Rep*.dll", SearchOption.TopDirectoryOnly); foreach (FileInfo fileInfo in fileInfoArr) { string fileName = fileInfo.Name; string fullName = fileInfo.FullName; // пропуск библиотеки базового абстрактного класса и библиотек отчётов, на которые недостаточно прав if (fileName == "RepBuilder.dll" || !userData.GetRight(fileName).ViewRight) { continue; } // загрузка библиотеки (сборки) Assembly asm = null; // библиотека try { asm = Assembly.LoadFile(fullName); } catch (Exception ex) { AppData.Log.WriteAction(string.Format(Localization.UseRussian ? "Ошибка при загрузке отчёта из библиотеки\n{0}\n{1}" : "Error loading report from the assembly\n{0}\n{1}", fullName, ex.Message), Log.ActTypes.Error); continue; } // получение типа из загруженной библиотеки Type repType = null; string typeName = "Scada.Report." + fileName.Substring(0, fileName.Length - 4); string unableMsg = string.Format(Localization.UseRussian ? "Не удалось получить тип отчёта {0} из библиотеки\n{1}" : "Unable to get the report type {0} from the assembly\n{1}", typeName, fullName); try { repType = asm.GetType(typeName); if (repType == null) { AppData.Log.WriteAction(unableMsg, Log.ActTypes.Error); continue; } } catch (Exception ex) { AppData.Log.WriteAction(unableMsg + "\n" + ex.Message, Log.ActTypes.Error); continue; } try { // создание экземпляра класса отчёта RepBuilder rep = Activator.CreateInstance(repType) as RepBuilder; // добавление отчёта в список repList.Add(rep.RepName, rep); } catch (Exception ex) { AppData.Log.WriteAction(string.Format(Localization.UseRussian ? "Ошибка при создании экземпляра класса отчёта {0} из библиотеки\n{1}\n{2}" : "Error creating report class instance {0} from the assembly\n{1}\n{2}", repType, fullName, ex.Message), Log.ActTypes.Error); } } } // вывод списка отчётов на форму if (repList.Count == 0) { lblReportList.Visible = false; lblNoReports.Visible = true; } else { for (int i = 0; i < repList.Count; i++) { RepBuilder rep = repList.Values[i]; AddReport(i + 1, rep.RepName, rep.WebFormFileName); } } }
/// <summary> /// Записать сообщение о генерации отчёта в журнал /// </summary> public static void WriteGenerationAction(Log log, RepBuilder repBuilder, UserData userData) { log.WriteAction(string.Format(WebPhrases.GenReport, repBuilder.RepName, userData.UserProps.UserName)); }
/// <summary> /// Перезагрузить библиотеки /// </summary> private void Reload() { // определение директорий отчётов repDllDir = NormalDir(txtDllDir.Text); repTemplDir = NormalDir(txtTemplDir.Text); repOutDir = NormalDir(txtOutDir.Text); DirectoryInfo repDllDirInfo = new DirectoryInfo(repDllDir); // заполнение списка отчётов lvRep.Items.Clear(); if (repDllDirInfo.Exists) { FileInfo[] fileInfoAr = repDllDirInfo.GetFiles("*.dll"); foreach (FileInfo fileInfo in fileInfoAr) { // загрузка библиотеки (сборки) string asmName = repDllDir + fileInfo.Name; // имя файла библиотеки Assembly asm = null; // библиотека try { asm = Assembly.LoadFile(asmName); } catch (Exception ex) { if (chkShowErr.Checked) { MessageBox.Show("Error loading library\n" + asmName + "\n" + ex.Message); } continue; } // определение имени типа в загруженной библиотеке string typeName = ReportNamespace + fileInfo.Name.Substring(0, fileInfo.Name.Length - 4); if (typeName == "Utils.Report.RepBuilder" /*базовый абстрактный класс*/) { continue; } // получение типа из загруженной библиотеки Type repType = null; try { repType = asm.GetType(typeName); if (repType == null && chkShowErr.Checked) { MessageBox.Show("Getting the type " + typeName + " failed. Library:\n" + asmName); } } catch (Exception ex) { if (chkShowErr.Checked) { MessageBox.Show("Getting the type " + typeName + " failed. Library:\n" + asmName + "\n" + ex.Message); } } if (repType != null) { try { // создание экземпляра класса отчёта RepBuilder rep = Activator.CreateInstance(repType) as RepBuilder; // заполнение элемента списка отчётов ListViewItem item = new ListViewItem(new string[] { fileInfo.Name, rep.RepName, rep.RepDescr }); item.Tag = rep; lvRep.Items.Add(item); } catch (Exception ex) { if (chkShowErr.Checked) { MessageBox.Show("Error creating instance of the class " + repType + ". Library:\n" + asmName + "\n" + ex.Message); } } } } if (lvRep.Items.Count > 0) { lvRep.Items[0].Selected = true; } } else { MessageBox.Show("DLL directory does not exist:\n" + repDllDir); } }
private void Reload() { repDllDir = NormalDir(txtDllDir.Text); repTemplDir = NormalDir(txtTemplDir.Text); repOutDir = NormalDir(txtOutDir.Text); DirectoryInfo repDllDirInfo = new DirectoryInfo(repDllDir); lvRep.Items.Clear(); if (repDllDirInfo.Exists) { FileInfo[] fileInfoAr = repDllDirInfo.GetFiles("*.dll"); foreach (FileInfo fileInfo in fileInfoAr) { string asmName = repDllDir + fileInfo.Name; Assembly asm = null; try { asm = Assembly.LoadFile(asmName); } catch (Exception ex) { if (chkShowErr.Checked) { MessageBox.Show("Error loading library\n" + asmName + "\n" + ex.Message); } continue; } string typeName = ReportNamespace + fileInfo.Name.Substring(0, fileInfo.Name.Length - 4); if (typeName == "Utils.Report.RepBuilder") { continue; } Type repType = null; try { repType = asm.GetType(typeName); if (repType == null && chkShowErr.Checked) { MessageBox.Show("Getting the type " + typeName + " failed. Library:\n" + asmName); } } catch (Exception ex) { if (chkShowErr.Checked) { MessageBox.Show("Getting the type " + typeName + " failed. Library:\n" + asmName + "\n" + ex.Message); } } if (repType != null) { try { RepBuilder rep = Activator.CreateInstance(repType) as RepBuilder; ListViewItem item = new ListViewItem(new string[] { fileInfo.Name, rep.RepName, rep.RepDescr }); item.Tag = rep; lvRep.Items.Add(item); } catch (Exception ex) { if (chkShowErr.Checked) { MessageBox.Show("Error creating instance of the class " + repType + ". Library:\n" + asmName + "\n" + ex.Message); } } } } if (lvRep.Items.Count > 0) { lvRep.Items[0].Selected = true; } } else { MessageBox.Show("DLL directory does not exist:\n" + repDllDir); } }