В моей компании мне пришлось собрать собственный построитель отчетов.
У нас есть около 30 отчетов Службы отчетов, к которым наши пользователи могут получить доступ через веб-приложение или настольное приложение. Мы хотели дать нашим пользователям возможность брать любой раздел в этих отчетах и создавать свои собственные.
Если есть отчет, который мы создали для них, но они не хотят видеть график, они могут создать тот же отчет без него. Если они хотят объединить части из 4 разных отчетов в один сводный отчет, они могут перетащить эти разделы в наш настраиваемый конструктор и сохранить его.
Конструктор отчетов, который мне пришлось собрать, извлекает все выбранные ими подотчеты и читает XML, добавляя их в созданный мной XML-файл шаблона построителя отчетов. Затем мне нужно агрегировать все параметры, чтобы не запрашивать их более одного раза (имена параметров должны быть уникальными для всех отчетов, если вы не хотите, чтобы они были агрегированы). Этот новый отчет XML развертывается на сервере, и пользователи могут получить к нему доступ, когда захотят.
Я также дал им возможность создавать свои собственные титульные страницы, верхние и нижние колонтитулы, перетаскивая текстовые поля, изображения, глобальные переменные (дата запуска, создания, запуска, номер страницы и т. Д. В любое место на пустом холсте. Затем я конвертирую все элементы, которые они окружают, и изменяю размер на этом холсте, в другой XML-файл отчета и развертываю его как подотчет, который они могут добавлять в свои настраиваемые отчеты.
Да, это потребовало немало усилий, но нашим пользователям это нравится. Сейчас мы разрешаем им создавать отчеты со специальными группировками, чтобы отчет можно было запускать на разных уровнях.
Так что это возможно, но нет простого ответа. =) Я был бы рад дать совет любому, кто спросит, но прямая копия кода, вероятно, является нарушением моего контракта, но я сделаю все, что могу, помимо этого.