Validation interne

Lors de la création d’un package d’installation, vous pouvez utiliser la fonction MsiViewModify ou la méthode View.Modify pour vous assurer que les données que vous entrez sont correctes du point de vue syntaxique. Pour plus d’informations, consultez Modifier la méthode. Au niveau le plus bas, la colonne d’une table de bases de données peut stocker des entiers (courts ou longs), des chaînes ou des données binaires. Toutefois, un package d’installation nécessite des entiers ou des chaînes spécifiques dans certaines tables. Ces spécifications sont conservées dans la table _Validation. Par exemple, la colonne FileName de la table Fichier est une colonne de chaîne, mais elle stocke spécifiquement un nom de fichier. Par conséquent, non seulement votre entrée doit être une chaîne, mais elle doit également respecter les conditions requises pour nommer les fichiers.

Les différentes valeurs d’énumération de validation utilisées avec la fonction MsiViewModify permettent une validation immédiate à différents niveaux. L’énumération MSIMODIFY_VALIDATE_FIELD peut être utilisée pour valider des champs individuels d’un enregistrement. Il ne valide pas les clés étrangères. L’énumération MSIMODIFY_VALIDATE valide une ligne entière et inclut la validation de clé étrangère. Si vous insérez une nouvelle ligne dans une table, utilisez l’énumération MSIMODIFY_VALIDATE_NEW pour vérifier que vous ajoutez des données valides et que vous utilisez des clés primaires uniques. Une insertion échoue si les clés primaires ne sont pas uniques. Si un appel à MsiViewModify avec l’une des énumérations de validation retourne une erreur, vous pouvez effectuer des appels répétés à MsiViewGetError pour diagnostiquer le problème. MsiViewGetError indique la colonne dans laquelle l’erreur s’est produite, ainsi que la valeur d’énumération pour aider à résoudre le problème. Pour plus d’informations, consultez Méthode GetError.

Vous pouvez également utiliser la validation interne pour vous assurer que d’autres auteurs entrent correctement des données dans votre table personnalisée. Ajoutez chacune des colonnes de votre table personnalisée à la table _Validation en utilisant le nom de la table personnalisée et le nom de la colonne comme clé primaire. Fournissez une description ou un objectif de chaque colonne dans la colonne Description de la table _Validation. Entrez les exigences applicables pour chaque colonne à l’aide des colonnes Nullable, MinValue, MaxValue, KeyTable, KeyColumn, Category et Set :

  • si la colonne est Nullable, entrez un « O ». Si ce n’est pas le cas, entrez un « N ».
  • Si la colonne est une colonne d’entiers et peut contenir une plage d’entiers, entrez cette plage à l’aide des colonnes MinValue et MaxValue.
  • Les colonnes de clé étrangère sont identifiées à l’aide des colonnes KeyTable et KeyColumn.
  • Pour les colonnes de chaîne, spécifiez une catégorie telle que Filename, GUID ou Identifier. Pour plus d'informations, consultez Types de données de colonnes.
  • Si les données ne peuvent se rapporter qu’à un nombre spécifique de valeurs (chaîne ou entier), utilisez la colonne Set pour répertorier les valeurs acceptables.

Voici la liste des colonnes (en plus de Table, Colonne et Description) de la table _Validation qui peuvent être renseignées si votre colonne est du type spécifié. (Notez que vous n’avez pas besoin de remplir toutes les colonnes.)

Type Colonnes
Integer Nullable, MinValue, MaxValue, KeyTable, KeyColumn, Set
String Nullable, KeyTable, KeyColumn, Category, Set, MinValue, MaxValue
Binaire Nullable, Category (Category must be « Binaire »)

 

Les environnements de création peuvent utiliser MSIMODIFY_VALIDATE_DELETE. Cette énumération suppose que vous souhaitez supprimer la ligne. Aucune validation de champ ou de clé étrangère n’est effectuée. Cette énumération effectue en fait une validation de clé étrangère inversée. Elle recherche des références dans la table _Validation dans les colonnes KeyTable et KeyColumn pour la table à laquelle appartient la ligne « supprimée ». S’il existe des colonnes qui répertorient la table contenant la ligne « supprimée » en tant que clé étrangère potentielle, elle effectue un cycle dans cette colonne pour voir si l’une des valeurs référence des valeurs dans la ligne « supprimé ». Un retour d’erreur signifie que vous interrompez l’intégrité relationnelle de la base de données en supprimant la ligne.