У меня есть интранет win.forms (клик один раз) с настраиваемым встроенным модулем отчетности (более 40 отчетов WinWord & Excel).Модуль находится в отдельной сборке и абстрагируется через интерфейсы.У нас есть источники и мы продолжаем их поддерживать.
Общие интерфейсы выглядят следующим образом:
IReportProvider {
// introspection stuff
IEnumerable<ReportCategoryInfo> GetReportGroups();
IEnumerable<ReportInfo> GetReports(Guid categoryId);
...
// common function
ReportResult CreateReport(Guid reportId, ReportParamCollection prms, ..)
}
ReportInfo описывает основную информацию и необходимые параметры.Пользовательский интерфейс генерируется автоматически, чтобы позволить пользователю выбирать параметры отчета.
class ReportInfo {
public Guid Id { get; set; }
public string Title { get; set; }
public List<ReportParameterInfo> Params { get; set; }
...
}
и ReportResult предоставляет двоичное представление отчета, а также двоичный тип (это Word2003, Excel2003 и т. Д.)
class ReportResult {
public byte[] Document { get; set; }
public ReportType DocumentType { get; set; }
public List<string> Warnings { get; set; }
...
}
Требования к аутентификации отсутствуют, и представление word / excel являетсядолжен.PDF не приветствуется.
Проблема в том, что каждый раз, когда отчет добавляется / исправляется, мы обновляем модуль отчетности и публикуем новую версию приложения (потому что они связаны).
Я хочу:
- избегать новых версий приложений при обновлении отчетов.
- Мы также должны добавить веб-интерфейс интрасети к отчетам.
Я собираюсь реорганизовать текущий код следующим образом:
- Извлечь функциональность отчетности вотдельная служба WCF
- Удалите файлы шаблонов отчетов (шаблоны Excel и Word) из приложения и поместите в папку, доступную только для службы отчетов.
- Новая служба WCF будет предоставлять интерфейсы самоанализа (какие отчеты присутствуют и какие параметры требуются) и метод для извлечения двоичного представления отчета (слово или excel)
- Должно быть два клиента, которые взаимодействуют сСервис WCF: Win.Forms для нынешнего клиента и веб.Клиент предоставит интерфейс навигации по отчетам, чтобы пользователь мог заполнить параметры и получить обратно файл отчета.Win.Forms клиент выполнит WinWord или Excel, чтобы показать полученный отчет.
Что вы думаете об этом?