XML ドキュメントのプロバイダのクライアントとしての利用

提供: RAD Studio
移動先: 案内検索

データベース アプリケーションでの XML の利用:インデックス への移動

Datasnap.Xmlxform.TXMLTransformClient コンポーネントは、XML ドキュメント(または一連の XML ドキュメント)をアプリケーション サーバーのクライアントとして(あるいは、単に、TDataSetProvider コンポーネントを通じて接続するデータセットのクライアントとして)使用できるようにするアダプタの役目を果たします。つまり、TXMLTransformClient クライアントを使用することで、データベース データを XML ドキュメントとして公開したり、外部アプリケーションから XML ドキュメント形式で渡された更新要求(挿入や削除)を利用することができます。

TXMLTransformClient オブジェクトによるデータの取得元および更新の適用先となるプロバイダを指定するには、ProviderName プロパティを設定します。クライアント データセットの ProviderName プロパティの場合と同様に、ProviderName はリモート アプリケーション サーバー上のプロバイダの名前とすることもできますし、TXMLTransformClient オブジェクトと同じフォームまたはデータ モジュール内のローカル プロバイダとすることもできます。プロバイダについては、「プロバイダ コンポーネントの使い方」を参照してください。

プロバイダがリモート アプリケーション サーバー上にある場合は、DataSnap 接続コンポーネントを使用して、そのアプリケーション サーバーに接続する必要があります。接続コンポーネントを指定するには、RemoteServer プロパティを使用します。DataSnap 接続コンポーネントについては、「アプリケーション サーバーへの接続」を参照してください。

プロバイダからの XML ドキュメントの取得

TXMLTransformClient では、内部 TXMLTransform コンポーネントを使用して、プロバイダからのデータ パケットを XML ドキュメントに変換します。この TXMLTransform コンポーネントには、TransformGetData プロパティの値としてアクセスできます。

プロバイダからのデータを表す XML ドキュメントを作成するには、まず、TransformGetData でデータ パケットを適切な XML 形式に変換するのに使用される変換ファイルを指定する必要があります。それには、TXMLTransform コンポーネントの TransformationFile プロパティまたは TransformationDocument プロパティを設定します。これは、スタンドアロンの TXMLTransform コンポーネントを使用する場合とちょうど同じです。その変換にユーザー定義ノードが含まれる場合は、TransformGetDataXmlxform.OnTranslate イベント ハンドラも渡すようにします。

TransformGetData のソース ドキュメントを指定する必要はありません。TXMLTransformClient によってプロバイダから取得されるからです。ただし、プロバイダ側で入力パラメータを想定している場合は、データを取得する前にそれらを設定しておくとよいでしょう。プロバイダからデータを取得する前に、SetParams メソッドを使用して、それらの入力パラメータを指定します。SetParams は引数を 2 つ取ります。パラメータ値の抽出元となる XML の文字列と、その XML をデータ パケットに変換するための変換ファイルの名前です。SetParams は、その変換ファイルを使用して XML の文字列をデータ パケットに変換した後、そのデータ パケットからパラメータ値を抽出します。

メモ:  パラメータ ドキュメントまたは変換を別の方法で指定する場合は、これらの引数のいずれかを指定変更できます。それには、TransformSetParams プロパティに含まれるプロパティの 1 つを、パラメータまたは使用する変換が記述されているドキュメントを指すように設定した後、SetParams の呼び出し時に、指定変更する引数を空文字列に設定するだけです。使用可能なプロパティの詳細については、「データ パケットへの XML ドキュメントの変換」を参照してください。

いったん TransformGetData を設定し入力パラメータを指定したら、GetDataAsXml メソッドを呼び出して、XML を取得できます。GetDataAsXml は、現在のパラメータ値をプロバイダに送信し、データ パケットを取得し、それを XML ドキュメントに変換し、そのドキュメントを文字列として返します。この文字列は、以下のようにしてファイルに保存できます。



 var
   XMLDoc: TFileStream;
   XML: string;
 begin
   XMLTransformClient1.ProviderName := 'Provider1';
   XMLTransformClient1.TransformGetData.TransformationFile := 'CustTableToCustXML.xtr';
   XMLTransformClient1.TransFormSetParams.SourceXmlFile := 'InputParams.xml';
   XMLTransformClient1.SetParams('', 'InputParamsToDP.xtr');
   XML := XMLTransformClient1.GetDataAsXml('');
   XMLDoc := TFileStream.Create('Customers.xml', fmCreate or fmOpenWrite);
   try
     XMLDoc.Write(XML, Length(XML));
   finally
     XMLDoc.Free;
   end;
 end;



 XMLTransformClient1->ProviderName = "Provider1";
 XMLTransformClient1->TransformGetData->TransformationFile = "CustTableToCustXML.xtr";
 XMLTransformClient1->TransFormSetParams->SourceXmlFile = "InputParams.xml";
 XMLTransformClient1->SetParams("", "InputParamsToDP.xtr");
 AnsiString XML = XMLTransformClient1->GetDataAsXml("");
 TFileStream pXMLDoc = new TFileStream("Customers.xml", fmCreate || fmOpenWrite);
 __try
 {
   pXMLDoc->Write(XML.c_str(), XML.Length());
 }
 __finally
 {
   delete pXMLDoc;
 }



XML ドキュメントからプロバイダへの更新の適用

さらに、TXMLTransformClient を使用すれば、XML ドキュメントのすべてのデータをプロバイダのデータセットに挿入したり、XML ドキュメント内のすべてのレコードをプロバイダのデータセットから削除することもできます。これらの更新を実行するには、ApplyUpdates メソッドを呼び出します。その際に渡すパラメータは以下のとおりです。

  • 挿入または削除するデータを記述した XML ドキュメントの内容を値とする文字列。
  • その XML データを挿入または削除デルタ パケットに変換するための変換ファイルの名前(XML マッパー ユーティリティを使って変換ファイルを定義する際に、変換が挿入デルタ パケット用なのか削除デルタ パケット用なのかを指定します)。
  • 更新操作の中止に至るまでに許容可能な更新エラーの数。挿入または削除できないレコードの数が指定数より少ない場合、ApplyUpdates は実際に発生したエラーの数を返します。挿入または削除できないレコードの数が指定数より多い場合、更新操作全体がロールバックされ、更新は実行されません。

以下の呼び出しでは、XML ドキュメント Customers.xml がデルタ パケットに変換され、エラーの数に関係なくすべての更新が適用されます。



 StringList1.LoadFromFile('Customers.xml');
 nErrors := ApplyUpdates(StringList1.Text, 'CustXMLToInsert.xtr', -1);



 StringList1->LoadFromFile("Customers.xml");
 nErrors = ApplyUpdates(StringList1->Text, "CustXMLToInsert.xtr", -1);



関連項目