0

私が達成しようとしている目標について説明し、ソリューションの設計方法に関するアーキテクチャ上および技術上の提案を歓迎します。

エンドユーザーが限られたデータセットからアドホックレポートを作成できるようにする必要があるアプリに取り組んでいます。これらは私が克服しようとしている世界的な障害です:

レポートのデザインとメタモデル

エンドユーザーは、次の手順で構成されるレポートウィザードを実行できる必要があります。

  1. レポートルート(苦情などのすべての関係のルートであるエンティティ)を選択します
  2. ルートエンティティのプロパティにフィルターを作成する
  3. ルートエンティティ(顧客、ユーザーなど)に関連する他のエンティティのプロパティにフィルターを作成します
  4. レポートテーブルの列を選択します(選択した関係全体のすべての列の結合から)
  5. ソート式を選択
  6. グループ化式を選択
  7. レポートを保存する

これは商用アプリでは一般的なことであり、良い例はSugarCRMです。

レポートを説明するカスタムメタモデルを定義しようとしています。アプリケーションはNHibernateをORMとして使用し、Criteria APIを使用してレポートクエリを作成することを目的としているため、メタモデルにはクエリに必要なすべてのデータ(射影、結合、フィルター、順序付け、式によるグループ化)が含まれている必要があります。このソリューションに適応できるメタモデルの例はありますか?

技術面では、次の問題があります。

既存のデータモデルの閲覧

データモデルからフィールドと関係を抽出する方法は?リフレクションの使用が最初に頭に浮かびますが、ユーザーはエンティティにカスタムフィールドを追加できるため(エンティティクラスは変更されません)、これは解決策ではありません。残っているのはデータベース自体またはNHibernateマッピングファイルです。NhibernateはこのためのAPIを公開しますか、それとも手動のXMLクエリが唯一の選択肢ですか?

レポートのレンダリング

また、でレポートをレンダリングすることも問題です。レポートは実行時に設計する必要がありますが、私が知る限り、これはrdlcでは不可能です。このアプローチの代替手段は何ですか?rdlcを避け、プレーンHTMLでレンダリングしますか?他にフレームワークはありますか?

これらの機能を実装し、インスピレーションとして使用できるオープンソース(c#、java)プロジェクトの提案も歓迎します。

4

2 に答える 2

2

レポートのデザインとメタモデル

データモデルには、関連付けパス、列名、および列インデックスが必要です

例えば

class Report
{
    public Layout Layout { get; set; }
    public string EntityTypeFullName { get; set; }
    /// each Filter is a compare on one Property
    public ICollection<Filter> Filters { get; }
    public IList<Column> Columns { get; }
}

class Column
{
    public string HeaderText { get; set; }

    /// e.g. Contract.User.Name
    public string AssociationPath { get; set; }
}

// in code
var query = session.CreateCriteria(EntityTypeFullName);
// recursive method which adds simple properties as Restrictions and calls itself
// with query.CreateCriteria(referencePropertyName, Filters.Select(CropAssociationPath));
AddFilter(query, report.Filters)

既存のデータ モデルの参照

NHibernate は、詳細なメタデータをリフレクションに最適化されたアクセスを介して公開Configuration.ClassMappingsConfiguration.GetClassMapping(Type)ます。ISessionFactory.GetClassMetadata(Type)最も重要なPropertyNamesのは、GetPropertyValue(obj, name, mode.Poco)

レポートのレンダリング

ここではどうしようもない

于 2012-11-29T12:51:44.103 に答える
1

PdfReportを使用してアドホックレポートを作成することができます。PdfReportは、コードファーストのレポートエンジンであり、iTextSharpおよびEPPlusライブラリの上に構築されています。.NET3.5以降のWebアプリケーションとWindowsアプリケーションの両方と互換性があります。PdfReportは、データベースを必要とせずに、データテーブルからメモリ内の強い型のリストまで、幅広いデータソースをサポートします:http://pdfreport.codeplex.com/

于 2012-11-29T12:51:11.097 に答える