4

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

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

したがって、現状では、SharePoint中央管理者のカスタムページを介してリモートデータセットにURLを提供することにより、ユーザーが新しい外部リストを「作成」できるソリューションを検討しています。これにより、BCSモデルプロジェクトが自動的に構築されます。プロジェクトテンプレートを変更する)、結果の機能をその場でコンパイルしてリリースします。

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

たとえば、データソースAが公開する可能性があります

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

この場合、「車」のBCSモデルが必要です。これには、色と作成の2つのパブリックプロパティがありますが、データソースBが公開する可能性があります。

<invoices>
<invoice>
<amount>£34.00</amount>
</invoice>
<invoice>
<amount>£34.00</amount>
</invoice>
</invoices>

この場合、金額に対して単一の公的資産を含むBCSモデルの「請求書」が必要です。

このアプローチまたはこれを達成するための「ベストプラクティス」の方法に関するフィードバックをいただければ幸いです。

4

1 に答える 1

1

[私は .Net で似たようなことをした経験があります - これがあなたにどの程度関連するかはわかりません.]

あらゆるファイル形式を処理できるインポート ツールを作成する必要がありました。これを適切に処理するために、xml 形式の定義 (名前、データ型、形式文字列、カスタム パーサーなど) を受け取り、ファイルを読み取ってIQueryable<FileFormat>追加のメタデータを公開できるクラスを生成する小さなクラスを作成しました。

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

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

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

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

于 2012-02-12T00:58:44.480 に答える