Introduction aux DiffGrams dans SQLXML 4.0
Cette rubrique fournit une brève introduction aux DiffGrams.
Format DiffGram
Voici le format DiffGram général :
<?xml version="1.0"?>
<diffgr:diffgram
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<DataInstance>
...
</DataInstance>
[<diffgr:before>
...
</diffgr:before>]
[<diffgr:errors>
...
</diffgr:errors>]
</diffgr:diffgram>
Le format DiffGram est constitué des blocs suivants :
<DataInstance>
Le nom de cet élément, DataInstance, est utilisé à des fins d'explication dans cette documentation. Par exemple, si le DiffGram était généré à partir d'un dataset dans le .NET Framework, la valeur de la propriété Name du dataset serait utilisée comme nom de cet élément. Ce bloc contient toutes les données pertinentes après la modification, y compris éventuellement les données qui n'ont pas été modifiées. La logique de traitement DiffGram ignore les éléments dans ce bloc pour lesquels l'attribut diffgr:hasChanges n'est pas spécifié.<diffgr:before>
Ce bloc facultatif contient les instances (éléments) de l'enregistrement d'origine qui doivent être mises à jour ou supprimées. Toutes les tables de base de données qui sont modifiées (mises à jour ou supprimées) par le DiffGram doivent apparaître comme éléments de niveau supérieur dans le bloc <before> .<diffgr:errors>
Ce bloc facultatif est ignoré par la logique de traitement DiffGram.
Annotations DiffGram
Les annotations suivantes sont définies dans l'espace de noms DiffGram "urn:schemas-microsoft-com:xml-diffgram-01" :
id
Cet attribut est utilisé pour associer les éléments dans les blocs <before> et <DataInstance>.hasChanges
Pour une insertion ou une opération de mise à jour, le DiffGram doit spécifier cet attribut avec la valeur inserted ou modified. Si cet attribut n'est pas présent, l'élément correspondant dans le <DataInstance> est ignoré par la logique de traitement et aucune mise à jour n'est effectuée. Pour obtenir des exemples fonctionnels, consultez Exemples de DiffGrams (SQLXML 4.0).parentID
Cet attribut est utilisé pour spécifier les relations parent-enfant parmi les éléments du DiffGram. Cet attribut apparaît uniquement dans le bloc <before>. Il est utilisé par SQLXML lors de l'application de mises à jour. La relation parent-enfant est utilisée pour déterminer l'ordre dans lequel les éléments du DiffGram sont traités.
Fonctionnement de la logique de traitement DiffGram
La logique de traitement DiffGram utilise certaines règles pour déterminer si une opération est une opération d'insertion, de mise à jour ou de suppression. Ces règles sont décrites dans le tableau suivant.
Opération |
Description |
---|---|
Insertion |
Un DiffGram indique une opération d'insertion lorsqu'un élément apparaît dans le bloc <DataInstance> mais pas dans le bloc <before> correspondre, et que l'attribut diffgr:hasChanges est spécifié (diffgr:hasChanges=inserted) sur l'élément. Dans ce cas, le DiffGram insère l'instance de l'enregistrement spécifiée dans le bloc <DataInstance> dans la base de données. Si l'attribut diffgr:hasChanges n'est pas spécifié, l'élément est ignoré par la logique de traitement et aucune insertion n'est effectuée. Pour obtenir des exemples fonctionnels, consultez Exemples de DiffGrams (SQLXML 4.0). |
Mise à jour |
Le DiffGram indique une opération de mise à jour lorsqu'il y a un élément dans le bloc <before> pour lequel il y a un élément correspondant dans le bloc <DataInstance> (autrement dit, les deux éléments ont un attribut diffgr:id avec la même valeur) et que l'attribut diffgr:hasChanges est spécifié avec la valeur modified sur l'élément dans le bloc <DataInstance>. Si l'attribut diffgr:hasChanges n'est pas spécifié sur l'élément dans le bloc <DataInstance>, une erreur est retournée par la logique de traitement. Pour obtenir des exemples fonctionnels, consultez Exemples de DiffGrams (SQLXML 4.0). Si diffgr:parentID est spécifié dans le bloc <before>, la relation parent-enfant des éléments spécifiés par parentID est utilisée pour déterminer l'ordre dans lequel les enregistrements sont mis à jour. |
Suppression |
Un DiffGram indique une opération de suppression lorsqu'un élément apparaît dans le bloc <before> mais pas dans le bloc <DataInstance> correspondant. Dans ce cas, le DiffGram supprime de la base de données l'instance de l'enregistrement spécifiée dans le bloc <before>. Pour obtenir des exemples fonctionnels, consultez Exemples de DiffGrams (SQLXML 4.0). Si diffgr:parentID est spécifié dans le bloc <before>, la relation parent-enfant des éléments spécifiés par parentID est utilisée pour déterminer l'ordre dans lequel les enregistrements sont supprimés. |
Notes
Les paramètres ne peuvent pas être passés aux DiffGrams.