Extension de la génération à l'aide d'instructions Before et After

Vous pouvez étendre les instructions de génération de script afin de compléter la génération en utilisant les instructions d'extension. Le mécanisme d'extension permet de générer des instructions immédiatement avant ou après les instructions Create, Drop et Modify, et de récupérer ces instructions lors du reverse engineering.

Les instructions d'extension sont rédigées en langage de génération par template (voir Personnalisation de la génération à l'aide du langage de génération par template). Lors de la génération, les instructions et variables sont évaluées et le résultat est ajouté dans le script global.

Remarque : Nous vous recommandons d'éviter d'utiliser des macros du langage de génération par template (à l'exception de .if) dans des scripts de génération, car elles peuvent s'avérer impossibles à résoudre après un reverse engineering par script. Cette restriction ne porte pas sur la génération et le reverse engineering via une connexion directe.

Exemple - Ajout d'une instruction AfterCreate

L'instruction d'extension AfterCreate est définie dans la catégorie Table afin de compléter l'instruction Create de la table en ajoutant des partitions à la table si la valeur de l'attribut étendu de la partition le requiert :
.if (%ExtTablePartition% > 1)
%CreatePartition%
go
.endif
La macro .if évalue la variable %ExtTablePartition%, qui est un attribut étendu qui contient le nombre de partitions de la table. Si la valeur est supérieure à 1, alors %CreatePartition%, défini dans la catégorie Table, sera généré comme suit :
alter table [%QUALIFIER%]%TABLE%
 partition %ExtTablePartition%

Cet élément génère l'instruction permettant de créer le nombre de partitions spécifié dans %ExtTablePartition%.

Exemple - Ajout d'une instruction BeforeCreate

L'instruction d'extension BeforeCreate est définie dans la catégorie User pour créer l'ID utilisateur d'un utilisateur avant l'exécution de l'instruction Create sur l'utilisateur :

sp_addlogin %Name% %Password%
go

L'ID utilisateur généré automatiquement aura le même nom et le même mot de passe que l'utilisateur. L'instruction BeforeCreate est affichée avant l'instruction de création de l'utilisateur dans l'Aperçu :



Exemple - Instructions Modify

Vous pouvez également ajouter des instructions BeforeModify et AfterModify aux instructions Modify standard.

Les instructions Modify sont exécutées afin de synchroniser la base de données avec le schéma créé dans le MPD. Par défaut, la fonctionnalité de modification de base de données ne prend pas en compte les attributs étendus lorsqu'elle compare les changements effectués dans le modèle depuis la dernière génération. Vous pouvez passer outre cette règle en ajoutant des attributs étendus dans la liste ModifiableAttributes. Les attributs étendus définis dans cette liste seront pris en compte dans la boîte de dialogue de fusion lors de la synchronisation de base de données.

Pour détecter qu'une valeur d'attribut étendu a été modifiée, vous pouvez utiliser les variables suivantes :
  • %OLDOBJECT% - pour accéder à une ancienne valeur de l'objet

  • %NEWOBJECT% - pour accéder à une nouvelle valeur de l'objet

Par exemple, vous pouvez vérifier que la valeur de l'attribut étendu ExtTablePartition a été modifiée grâce à la syntaxe de langage de génération par template suivante :

.if (%OLDOBJECT.ExtTablePartition% != %NEWOBJECT.ExtTablePartition%)

Si la valeur de l'attribut étendu a été changée, une instruction étendue sera générée pour mettre à jour la base de données. Dans la syntaxe Sybase ASE, l'instruction étendue ModifyPartition se présente comme suit car en cas de changement de partition vous devez être en mesure de supprimer la partition précédente puis de la recréer :

.if (%OLDOBJECT.ExtTablePartition% != %NEWOBJECT.ExtTablePartition%)
 .if (%NEWOBJECT.ExtTablePartition% > 1)
  .if (%OLDOBJECT.ExtTablePartition% > 1)
%DropPartition%
  .endif
%CreatePartition%
 .else
%DropPartition%
 .endif
.endif