2012-02-03 12 views
4

モデルのプロパティがWebサービスによって公開されるデータの構造に依存するBusiness Connectivity Services(BCS)モデルソリューションを展開しようとしています。Business Connectivity Servicesを動的に生成する方法

理想的には、BCSモデルはキー/値ペアのコレクションを公開し、後で共有リストの列に変換します。これは、同じモデルを複数の異なるデータセットに使用できることを意味するためですこれは、BCSモデルが設計された方法ではなく、インポートされるエンティティを反映するためにモデルに強く型付けされるためです。

したがって、私たちは共有ポイントセントラル管理者のカスタムページを使ってURLをリモートデータセットに提供することで、ユーザが新しい外部リストを「作成」できるようにするソリューションを検討しています。モデルプロジェクト(プロジェクトテンプレートを変更して)を実行し、結果フィーチャをコンパイルして即座に解放します。

このようにして、インポートされるデータの構造を表すプロパティで「固定」クラスを作成できます。

例えば、データソースAは、我々は2つのパブリックプロパティを持つ「車」のためのBCSモデルを必要とし、その場合には

<cars> 
<car> 
<color>blue</color> 
<make>ford</make> 
</car> 
<car> 
<color>red</color> 
<make>lotus</make> 
</car> 
</cars> 

を公開した色と しかし、データソースBが

<invoices> 
<invoice> 
<amount>£34.00</amount> 
</invoice> 
<invoice> 
<amount>£34.00</amount> 
</invoice> 
</invoices> 
を公開することができ作ることができます

この場合、金額に対して1つの公共財産を持つBCSモデル "請求書"が必要です。

このアプローチやこれを達成するための「ベストプラクティス」の方法については、誰もがフィードバックをいただきたいと思います。

答えて

1

[Iは、.NETに似た何かをやった経験を持っていた - 。私は、これはあなたになりますどのように関連するかわからない]

私は、任意のファイル形式を扱うことができるインポートツールを書かなければなりませんでした。これを適切に処理するために、xml形式の定義(名前、データ型、フォーマット文字列、カスタムパーサーなど)を取り、ファイルを読み取り、IQueryable<FileFormat>といくつかの追加のメタデータを公開するクラスを生成する小さなクラスを作成しました。

完全に柔軟にするためには、フォーマット定義にコンパイルされ実行されるC#/ VBラムダを提供する必要がありました(たとえば、入力日付フォーマットが非標準でカスタムパーサー)。これは明らかにセキュリティ上のリスクです。動的クラスをインスタンス化するときは、非常に少ない特権で個別のAppDomainで行いました。これはあなたの状況には当てはまらないかもしれません。

カスタムテンプレートエンジンを使用して、System.Codedom.Compiler名前空間を使用してコンパイルしたコードを生成しました。これにより、アセンブリを作成し、定義が変更されるまでキャッシュすることができました。似たようなことをすれば、Razorテンプレートエンジンを検討する価値があります。

われわれが唯一の未知のデータ型に対してコーディングすることから生じた唯一の問題は、カスタムクラスが標準的な方法(実際にはxml仕様と同じ情報)で公開された独自のIImportFileインターフェイスを実装することにより、あまり努力することなく、回避することができます。

これは信頼できるユーザーのためのツールであり(少なくとも信頼できるユーザーのみが新しいファイル形式仕様を提供できる)、セキュリティリスクが限定されていたことは幸運でした。ユーザーの入力に基づいてコードをコンパイルする場合は、適切な保護対策が施されていることを確認してください。