Résolution des conflits de configuration GDL
Bien que l’analyseur GDL modifie automatiquement la configuration pour éviter de violer une contrainte, gardez à l’esprit les informations suivantes afin que l’analyseur connaisse vos intentions.
Par exemple, si la configuration passée à la fonction d’analyseur contient les paramètres de Weather.Rain, Today.Sunday, Health.Well, la combinaison non valide de la section précédente peut être résolue en modifiant le paramètre de l’un des paramètres nommés dans cette contrainte. L’analyseur doit décider du paramètre à modifier. Dans de nombreux cas, vous pouvez savoir quel paramètre doit être modifié. en règle générale, le paramètre le plus important reste inchangé. Dans ce cas, le conflit peut être supprimé en modifiant les paramètres sur Weather:Sunny, Today:Monday ou Health:Sick, respectivement. La plupart des gens préféreront changer le temps d’abord, aujourd’hui deuxième, et espèrent éviter de changer de santé.
La directive *ConflictPriority vous permet de spécifier des préférences sur le paramètre à modifier dans un conflit. *ConflictPriority accepte une valeur entière positive qui spécifie l’importance relative de chaque paramètre. Lorsque plusieurs paramètres entrent en conflit, l’analyseur modifie le paramètre du paramètre avec la priorité inférieure. Cette directive est conforme à l’utilisation courante selon laquelle l’élément de priorité la plus élevée est étiqueté avec le plus petit ordinal. Par conséquent, le paramètre de priorité la plus élevée doit être attribué *ConflictPriority: 1. Les valeurs sélectionnées pour *ConflictPriority : n’ont pas besoin d’être consécutives, mais elles doivent être uniques. *ConflictPriority doit apparaître en tant qu’entrée enfant de la construction *Feature.
La directive *FeatureType influence également la priorité d’un paramètre. *FeatureType est en fait un mot clé spécifique au GPD/Unidrv. Pour les clients non-Unidrv, vous devez simplement définir *FeatureType : PARAMETER_PROPERTY. Ce paramètre évitera les comportements imprévus à l’avenir. *FeatureType doit apparaître en tant qu’entrée enfant de la construction *Feature.
Lorsque GDL modifie le paramètre d’un paramètre pour résoudre un conflit, il utilise le paramètre par défaut, sauf si cela est également limité. Dans certains cas, vous pouvez souhaiter que l’analyseur utilise un paramètre par défaut différent lors de la résolution des conflits sous différentes configurations. Pour définir un paramètre par défaut différent, définissez plusieurs directives *DefaultOption dans les directives Switch et Case ou dans un ensemble imbriqué de directives Switch Case. L’analyseur évalue le commutateur et la casse en fonction de la configuration actuelle pour déterminer l’option *DefaultOption à utiliser. Étant donné que l’algorithme du programme de résolution détermine le paramètre de paramètres commençant par la priorité la plus élevée (c’est-à-dire le plus petit ordinal), les paramètres des paramètres dont les priorités sont inférieures à la priorité du paramètre en cours d’évaluation sont inconnus. Vous devez vous assurer que toute construction Switch qui entoure la directive *DefaultOption utilise des paramètres dont les priorités sont plus élevées (c’est-à-dire des ordinaux plus petits) que le paramètre dont la valeur par défaut est définie à l’aide de *DefaultOption. Si vous n’observez pas cette règle, les fonctions d’analyseur échouent. En raison de cette difficulté, vous devez éviter d’insérer *DefaultOption dans une construction Switch et Case si possible.
La fonction d’interface d’analyseur ResolveConstraint() peut être appelée pour case activée explicitement une configuration pour les violations de contraintes et pour résoudre le conflit le cas échéant. La nouvelle configuration est retournée à l’appelant. L’appelant peut ensuite examiner la configuration pour en vérifier l’acceptabilité ou peut utiliser la configuration pour obtenir un instantané. Le instantané indique quels paramètres sont limités dans la configuration spécifiée dans sa création. Ces informations peuvent être utiles pour les clients qui créent des interfaces utilisateur.