Compartir a través de


Introducción a los DiffGrams en SQLXML 4.0

En este tema se ofrece una breve introducción a los DiffGrams.

Formato de un DiffGram

Éste es el formato general de un DiffGram:

<?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>

El formato de un DiffGram consta de estos bloques:

  • <DataInstance>
    El nombre de este elemento, DataInstance, se utiliza con fines explicativos en esta documentación. Por ejemplo, si el DiffGram se generó a partir de un conjunto de datos de .NET Framework, el valor de la propiedad Name del conjunto de datos se utilizará como nombre de este elemento. Este bloque contiene todos los datos relevantes tras el cambio, y es posible que incluya incluso los datos que no se han modificado. La lógica de procesamiento de DiffGram omite los elementos de este bloque para los que no se haya especifica el atributo diffgr:hasChanges.

  • <diffgr:before>
    Este bloque opcional contiene las instancias de registro (elementos) originales que deben actualizarse o eliminarse. Todas las tablas de base de datos que va modificar (actualizar o eliminar) el DiffGram deben aparecer como elementos de nivel superior en el bloque <before>.

  • <diffgr:errors>
    La lógica de procesamiento de DiffGram omite este bloque opcional.

Anotaciones de DiffGram

Estas anotaciones se definen en el espacio de nombres de DiffGram "urn:schemas-microsoft-com:xml-diffgram-01":

  • id
    Este atributo se utiliza para emparejar los elementos de los bloques <before> y <DataInstance>.

  • hasChanges
    Para una operación de inserción o actualización, el DiffGram debe especificar este atributo con el valor inserted o modified. Si este atributo no está presente, la lógica de procesamiento omite el elemento correspondiente de <DataInstance> y no se realiza ninguna actualización. Para obtener algunos ejemplos funcionales, vea Ejemplos de DiffGram (SQLXML 4.0).

  • parentID
    Este atributo se usa para especificar las relaciones entre los elementos primarios y secundarios del DiffGram. Este atributo sólo aparece en el bloque <before>. SQLXML lo utiliza cuando aplica actualizaciones. La relación entre elementos primarios y secundarios se utiliza para determinar el orden en que deben procesarse los elementos del DiffGram.

Descripción de la lógica de procesamiento de DiffGram

La lógica de procesamiento de DiffGram utiliza ciertas reglas para determinar si una operación es una operación de inserción, actualización o eliminación. Estas reglas se describen en la siguiente tabla.

Operación

Descripción

Inserción

Un DiffGram indica una operación de inserción cuando aparece un elemento en el bloque <DataInstance> pero no aparece en el bloque <before> correspondiente y se especifica el atributo diffgr:hasChanges (diffgr:hasChanges=inserted) en el elemento. En este caso, el DiffGram inserta en la base de datos la instancia de registro especificada en el bloque <DataInstance>.

Si no se especifica el atributo diffgr:hasChanges, la lógica de procesamiento omite el elemento y no se realiza ninguna inserción. Para obtener algunos ejemplos funcionales, vea Ejemplos de DiffGram (SQLXML 4.0).

Actualización

El DiffGram indica una operación de actualización cuando hay un elemento en el bloque <before> para el que hay un elemento correspondiente en el bloque <DataInstance> (es decir, ambos elementos tienen un atributo diffgr:id con el mismo valor) y el atributo diffgr:hasChanges se especifica con el valor modified en el elemento del bloque <DataInstance>.

Si no se especifica el atributo diffgr:hasChanges en el elemento del bloque <DataInstance>, la lógica de procesamiento devuelve un error. Para obtener algunos ejemplos funcionales, vea Ejemplos de DiffGram (SQLXML 4.0).

Si diffgr:parentID se especifica en el bloque <before>, la relación entre los elementos primarios y secundarios especificados por parentID se usa para determinar el orden en que deben actualizarse los registros.

Eliminación

Un DiffGram indica una operación de eliminación cuando un elemento aparece en el bloque <before> pero no aparece en el bloque <DataInstance> correspondiente. En este caso, el DiffGram elimina de la base de datos la instancia de registro especificada en el bloque <before>. Para obtener algunos ejemplos funcionales, vea Ejemplos de DiffGram (SQLXML 4.0).

Si diffgr:parentID se especifica en el bloque <before>, la relación entre los elementos primarios y secundarios especificados por parentID se usa para determinar el orden en que deben eliminarse los registros.

[!NOTA]

No pueden pasarse parámetros a los DiffGrams.