Utilisation d'un document XML comme client d'un fournisseur

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation de XML dans les applications de bases de données - Index


Le composant Datasnap.Xmlxform.TXMLTransformClient se comporte comme adaptateur pour vous permettre d'utiliser un document (ou un ensemble de documents) XML comme client pour un serveur d'applications (ou simplement comme client d'un ensemble de données auquel il se connecte par l'intermédiaire d'un composant TDataSetProvider). Cela veut dire que TXMLTransformClient vous permet de publier des données d'une base de données en tant que document XML et d'utiliser des requêtes de mise à jour (insertions ou suppressions) à partir d'une application externe qui les fournit sous la forme de documents XML.

Pour spécifier le fournisseur à partir duquel l'objet TXMLTransformClient lit des données et auquel il applique des mises à jour, utilisez la propriété ProviderName>.

Si le fournisseur se trouve sur un serveur d'applications distant, vous devez utiliser un composant de connexion DataSnap pour vous connecter à ce serveur d'applications. Spécifiez le composant de connexion au moyen de Connexion au serveur d'applications.

Lecture d'un document XML à partir d'un fournisseur

TXMLTransformClient utilise un composant TXMLTransform interne pour traduire les paquets de données du fournisseur en document XML. Vous pouvez accéder à ce composant TXMLTransform avec la valeur de la propriété TransformGetData.

Pour pouvoir créer un document XML représentant les données d'un fournisseur, vous devez spécifier le composant autonome TXMLTransform. Si cette transformation inclut des noeuds définis par l'utilisateur, vous pouvez également fournir à TransformGetData un gestionnaire d'événement Xml.XmlTransform.TXMLTransform.OnTranslate à l'aide d'un composant autonome TXMLTransform. Si cette transformation inclut des noeuds définis par l'utilisateur, vous pouvez également fournir à TransformGetData un gestionnaire d'événement Xmlxform.OnTranslate.

Il n'est pas nécessaire de spécifier le document source pour TransformGetData car TXMLTransformClient le récupère à partir du fournisseur. Toutefois, si le fournisseur attend des paramètres d'entrée, vous pouvez les définir avant de lire les données. Utilisez la méthode SetParams pour fournir ces paramètres d'entrée avant de lire les données à partir du fournisseur. SetParams accepte deux arguments : une chaîne XML à partir de laquelle extraire les valeurs des paramètres, et le nom d'un fichier de transformation pour traduire ce code XML en paquet de données. SetParams utilise le fichier de transformation pour convertir la chaîne XML en paquet de données, puis extrait les valeurs des paramètres de ce paquet de données.

Remarque : Vous pouvez outrepasser l'un quelconque de ces arguments si vous souhaitez spécifier le document ou la transformation d'une autre manière. Il vous suffit de définir l'une des propriétés dans Conversion de documents XML en paquets de données.

Après avoir configuré TransformGetData et spécifié les éventuels paramètres d'entrée, vous pouvez appeler la méthode GetDataAsXml pour récupérer le code XML. GetDataAsXml envoie les valeurs de paramètres en cours au fournisseur, récupère un paquet de données, le convertit en document XML puis renvoie ce document sous forme de chaîne de caractères. Vous pouvez enregistrer cette chaîne dans un fichier :


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;
}

Application de mises à jour d'un document XML à un fournisseur

TXMLTransformClient vous permet aussi d'insérer toutes les données d'un document XML dans l'ensemble de données du fournisseur ou de supprimer tous les enregistrements d'un document XML de l'ensemble de données du fournisseur. Pour effectuer ces mises à jour, appelez la méthode ApplyUpdates, en transmettant :

  • Une chaîne dont la valeur est le contenu du document XML avec les données à insérer ou à supprimer.
  • Le nom d'un fichier de transformation capable de convertir ces données XML en paquet delta d'insertion ou de suppression. En définissant le fichier de transformation à l'aide de l'utilitaire mappeur XML, vous indiquez si la transformation est destinée à un paquet delta d'insertion ou de suppression.
  • Le nombre d'erreurs de mise à jour qui peuvent être tolérées sans que l'opération de mise à jour ne soit abandonnée. Si le nombre d'enregistrements qui ne peuvent pas être insérés ou supprimés est inférieur à ce paramètre, ApplyUpdates renvoie le nombre d'erreurs réelles. Si le nombre d'enregistrements qui ne peuvent pas être insérés ou supprimés est égal à ce paramètre, l'opération de mise à jour tout entière est annulée et aucune mise à jour n'est effectuée.

L'appel suivant transforme le document XML Customers.xml en paquet delta et applique toutes les mises à jour quel que soit le nombre d'erreurs :


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

Voir aussi