2

Delphi2010で記述されたwin32DelphiVCLアプリケーションを多層アーキテクチャに移行しています。
このアプリケーションは、データバインディングにdevexpressによるExpressGrid(TcxGrid)を広範囲に使用します。

  • dbContextオブジェクトとデータ転送オブジェクトを使用して、EntityFrameworkに基づいてデータ層を設計しました。
  • エンティティデータモデルに基づくT4テンプレートを使用して、WCFを介してCRUD操作を公開しました。

これですべて正常に機能し、DelphiクライアントはWCFサービスと正常に通信して、データ転送オブジェクトを交換します。

問題は、データバインディング機能をどのように維持するかです。私は、汎用データテーブルまたはデータセットを返すサービスメソッドを作成することに傾倒しています。linqステートメントの結果をデータセット、テーブル、またはビューに変換できますか?Expressgridsをオブジェクトの配列にバインドできるかどうかわかりません(WCFはエンティティコレクションを返しますが、Delphiは配列を認識します)。この種の相互運用性を経験した人はいますか?

編集

データセットを返すデータサービスがありますが、どうでしょう?.netのxmlデータセットはDelphi(少なくとも2010)と互換性がありません。Gekkoの例(変更)を使用してそれを機能させることができましたが、クライアントから実行する必要のあるクエリが複雑なため、実用的ではありません。現在のオプションは、BLLが完了するまでグリッドをそのままにして、新しいプロジェクトを開始してクライアントをC#で(WebまたはWindowsアプリケーションとして)再書き込みするか、RemObjectsHydraを使用して汎用グリッドプラグインを作成することです。グリッド付きのフォームに埋め込む-今それを理解しようとしています。

更新 DelphiでTClientDataSetに必要なxml形式を調べて、独自の実装を作成するために、GekkoDataSetの実装を削除しました。サーバー側では、TClientDataSet準拠のxmlをバイト配列の形式で返すサービスを実装しました。クライアントで、これをTStringStreamにロードしてから、ストリームをTclientDataSetコンポーネントにロードします。Hydraソリューションを展開する際に、これを小さなコレクションに使用して、ルックアップとデータバインディングを提供します。

xmlはおおまかに次の形式に従います。

"2.0">
  <METADATA>
    <FIELDS>
      <FIELD attrname="ID" fieldtype="i4"/>
      <FIELD attrname="Status" fieldtype="string" WIDTH="10"/>
      <FIELD attrname="Created" fieldtype="date"/>


<ROWDATA>
    <ROW RowState="4" ID="1" Status="Code1" Created="20130707" Made="20130707T21:37:55341" Stopped="00:00:00000" Volume="1174" IsReady="TRUE"/>
    <ROW RowState="4" ID="2" Status="Code2" Created="20130707" Made="20130707T21:37:55341" Stopped="00:00:00000" Volume="2149" IsReady="FALSE"/>

これは、xml形式に関する数少ない情報源の1つです。

質問が古いことは知っていますが、相互運用性とレガシーコードの移行に関する洞察をいただければ幸いです。

ありがとう

4

0 に答える 0