私が達成しようとしている目標について説明し、ソリューションの設計方法に関するアーキテクチャ上および技術上の提案を歓迎します。
エンドユーザーが限られたデータセットからアドホックレポートを作成できるようにする必要があるアプリに取り組んでいます。これらは私が克服しようとしている世界的な障害です:
レポートのデザインとメタモデル
エンドユーザーは、次の手順で構成されるレポートウィザードを実行できる必要があります。
- レポートルート(苦情などのすべての関係のルートであるエンティティ)を選択します
- ルートエンティティのプロパティにフィルターを作成する
- ルートエンティティ(顧客、ユーザーなど)に関連する他のエンティティのプロパティにフィルターを作成します
- レポートテーブルの列を選択します(選択した関係全体のすべての列の結合から)
- ソート式を選択
- グループ化式を選択
- レポートを保存する
これは商用アプリでは一般的なことであり、良い例はSugarCRMです。
レポートを説明するカスタムメタモデルを定義しようとしています。アプリケーションはNHibernateをORMとして使用し、Criteria APIを使用してレポートクエリを作成することを目的としているため、メタモデルにはクエリに必要なすべてのデータ(射影、結合、フィルター、順序付け、式によるグループ化)が含まれている必要があります。このソリューションに適応できるメタモデルの例はありますか?
技術面では、次の問題があります。
既存のデータモデルの閲覧
データモデルからフィールドと関係を抽出する方法は?リフレクションの使用が最初に頭に浮かびますが、ユーザーはエンティティにカスタムフィールドを追加できるため(エンティティクラスは変更されません)、これは解決策ではありません。残っているのはデータベース自体またはNHibernateマッピングファイルです。NhibernateはこのためのAPIを公開しますか、それとも手動のXMLクエリが唯一の選択肢ですか?
レポートのレンダリング
また、でレポートをレンダリングすることも問題です。レポートは実行時に設計する必要がありますが、私が知る限り、これはrdlcでは不可能です。このアプローチの代替手段は何ですか?rdlcを避け、プレーンHTMLでレンダリングしますか?他にフレームワークはありますか?
これらの機能を実装し、インスピレーションとして使用できるオープンソース(c#、java)プロジェクトの提案も歓迎します。