Introduzione ai DiffGram in SQLXML 4.0
In questo argomento viene fornita una breve introduzione ai DiffGram.
Formato DiffGram
Il formato DiffGram generale è il seguente:
<?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>
Il formato DiffGram è costituito dai blocchi seguenti:
<DataInstance>
Il nome dell'elemento DataInstance viene utilizzato in questa documentazione a scopo illustrativo. Se, ad esempio, il DiffGram è stato generato da un set di dati in .NET Framework, il valore della proprietà Name del set di dati viene utilizzato come nome di questo elemento. Questo blocco contiene tutti i dati rilevanti dopo la modifica, inclusi eventualmente i dati che non sono stati modificati. La logica di elaborazione DiffGram ignora gli elementi di questo blocco per i quali non viene specificato l'attributo diffgr:hasChanges.<diffgr:before>
Questo blocco facoltativo contiene le istanze dei record originali (elementi) che devono essere aggiornate o eliminate. Tutte le tabelle di database modificate (aggiornate o eliminate) dal DiffGram devono essere visualizzate come elementi di livello superiore nel blocco <before>.<diffgr:errors>
Questo blocco facoltativo viene ignorato dalla logica di elaborazione DiffGram.
Annotazioni DiffGram
Queste annotazioni sono definite nello spazio dei nomi DiffGram "urn:schemas-microsoft-com:xml-diffgram-01":
id
Questo attributo viene utilizzato per abbinare gli elementi nei blocchi <before> e <DataInstance>.hasChanges
Per un'operazione di inserimento o aggiornamento, è necessario che il DiffGram specifichi questo attributo con il valore inserted o modified. Se tale attributo non è presente, l'elemento corrispondente in <DataInstance> viene ignorato dalla logica di elaborazione e non vengono eseguiti aggiornamenti. Per esempi reali, vedere Esempi di DiffGram (SQLXML 4.0).parentID
Questo attributo viene utilizzato per specificare relazioni padre-figlio tra gli elementi nel DiffGram. L'attributo viene visualizzato solo nel blocco <before> e viene utilizzato da SQLXML durante l'applicazione di aggiornamenti. La relazione padre-figlio viene utilizzata per determinare l'ordine in cui gli elementi vengono elaborati nel DiffGram.
Informazioni sulla logica di elaborazione DiffGram
La logica di elaborazione DiffGram utilizza determinate regole per stabilire se un'operazione è di inserimento, aggiornamento o eliminazione. Tali regole sono descritte nella tabella seguente:
Operazione |
Descrizione |
|---|---|
Inserimento |
Un DiffGram indica un'operazione di inserimento quando un elemento viene visualizzato nel blocco <DataInstance> ma non nel blocco <before> corrispondente e sull'elemento viene specificato l'attributo diffgr:hasChanges (diffgr:hasChanges=inserted). In questo caso, il Diffgram inserisce nel database l'istanza del record specificata nel blocco <DataInstance>. Se non viene specificato l'attributo diffgr:hasChanges, l'elemento viene ignorato dalla logica di elaborazione e non viene eseguito alcun inserimento. Per esempi reali, vedere Esempi di DiffGram (SQLXML 4.0). |
Aggiornamento |
Il Diffgram indica un'operazione di aggiornamento quando nel blocco <before> è presente un elemento per il quale è disponibile un elemento corrispondente nel blocco <DataInstance>, ovvero entrambi gli elementi hanno un attributo diffgr:id con valore identico, e viene specificato l'attributo diffgr:hasChanges con il valore modified sull'elemento nel blocco <DataInstance>. Se non viene specificato l'attributo diffgr:hasChanges sull'elemento nel blocco <DataInstance>, la logica di elaborazione restituisce un errore. Per esempi reali, vedere Esempi di DiffGram (SQLXML 4.0). Se viene specificato diffgr:parentID nel blocco <before>, viene utilizzata la relazione padre-figlio degli elementi specificati da parentID per determinare l'ordine in cui vengono aggiornati i record. |
Eliminazione |
Un DiffGram indica un'operazione di eliminazione quando un elemento viene visualizzato nel blocco <before> ma non nel blocco <DataInstance> corrispondente. In questo caso, il DiffGram elimina dal database l'istanza del record specificata nel blocco <before>. Per esempi reali, vedere Esempi di DiffGram (SQLXML 4.0). Se viene specificato diffgr:parentID nel blocco <before>, viene utilizzata la relazione padre-figlio degli elementi specificati da parentID per determinare l'ordine in cui vengono eliminati i record. |
[!NOTA]
Non è possibile passare parametri ai DiffGram.