我将描述我正在努力实现的目标,并感谢任何关于如何设计解决方案的架构和技术建议。
我正在开发一个应用程序,该应用程序需要允许最终用户从一组有限的数据中创建临时报告。这些是我试图克服的全球障碍:
报告设计和元模型
最终用户应该能够完成由以下步骤组成的报告向导:
- 选择报告根(实体是所有关系的根,例如投诉)
- 在根实体的属性上创建过滤器
- 在与根实体(例如客户、用户)相关的其他实体的属性上创建过滤器
- 选择报告表的列(从跨选定关系的所有列的联合中)
- 选择排序表达式
- 选择分组表达式
- 保存报告
这在商业应用程序中很常见,SugarCRM 就是一个很好的例子。
我想定义一个自定义元模型来描述报告。应用程序使用 NHibernate 作为 ORM,其想法是使用 Criteria API 来构造报告查询,因此元模型应包含查询所需的所有数据(投影、连接、过滤器、排序和按表达式分组)。是否有我可以适应此解决方案的元模型示例?
技术方面存在以下问题:
浏览现有数据模型
如何从数据模型中提取字段和关系?首先想到的是使用反射,但是由于用户可以将自定义字段添加到实体(不会更改实体类),这不是解决方案。剩下的是数据库本身或 NHibernate 映射文件。Nhibernate 是否为此公开 API 或手动 XML 查询是唯一的选择?
报告呈现
此外,呈现报告也是一个问题。报告必须在运行时设计,但据我所知,rdlc 无法做到这一点。这种方法有哪些替代方法?避免 rdlc 并以纯 HTML 呈现?还有其他框架吗?
也欢迎对实现这些功能并可用作灵感的开源(c#、java)项目提出建议。