Compartir a través de


Resolución de conflictos de configuración de GDL

Aunque el analizador de GDL modificará automáticamente la configuración para evitar infringir una restricción, tenga en cuenta la siguiente información para que el analizador conozca sus intenciones.

Por ejemplo, si la configuración que se pasa a la función del analizador contiene la configuración de parámetros de Weather.Rain, Today.Sunday, Health.Well, la combinación no válida de la sección anterior se puede resolver cambiando la configuración de cualquiera de los parámetros con nombre en esta restricción. El analizador tiene que decidir qué configuración del parámetro se va a cambiar. En muchos casos, es posible que sepa qué configuración debe cambiarse. normalmente, el parámetro más importante se deja sin cambios. En este caso, el conflicto se puede quitar cambiando los parámetros a Weather:Sunny, Today:Monday o Health:Sick, respectivamente. La mayoría de las personas prefieren cambiar weather first, Today second, y espero evitar cambiar la salud.

La directiva *ConflictPriority permite especificar las preferencias sobre qué parámetro cambiar en un conflicto. *ConflictPriority acepta un valor entero positivo que especifica la importancia relativa de cada parámetro. Cuando dos o más parámetros entran en conflicto, el analizador modificará el valor de parámetro del parámetro con la prioridad más baja. Esta directiva se ajusta al uso común que el elemento de prioridad más alta está etiquetado con el ordinal más pequeño. Por lo tanto, se debe asignar el parámetro de prioridad más alta *ConflictPriority: 1. Los valores seleccionados para *ConflictPriority: no necesitan ser consecutivos, pero deben ser únicos. *ConflictPriority debe aparecer como una entrada secundaria de la construcción *Característica.

La directiva *FeatureType también influye en la prioridad de un parámetro. *FeatureType es realmente una palabra clave específica de GPD/Unidrv. En el caso de los clientes que no son Unidrv, simplemente debe establecer *FeatureType: PARAMETER_PROPERTY. Esta configuración evitará comportamientos imprevistos en el futuro. *FeatureType debe aparecer como una entrada secundaria de la construcción *Característica.

Cuando GDL cambia la configuración de un parámetro para resolver un conflicto, usará la configuración predeterminada, a menos que también esté restringida. En algunos casos, es posible que desee que el analizador use una configuración predeterminada diferente al resolver conflictos en configuraciones diferentes. Para establecer este valor predeterminado diferente, defina varias directivas *DefaultOption dentro de las directivas Switch y Case o dentro de un conjunto anidado de directivas Switch Case. El analizador evaluará el modificador y el caso según la configuración actual para determinar el *DefaultOption que se va a usar. Dado que el algoritmo de resolución determina el valor de los parámetros que comienzan por la prioridad más alta (es decir, el ordinal más pequeño), se desconoce la configuración de parámetros con prioridades inferiores a la prioridad del parámetro bajo evaluación. Debe asegurarse de que cualquier construcción Switch que rodea la directiva *DefaultOption usa parámetros que tienen prioridades superiores (es decir, ordinales más pequeños) que el parámetro cuyo valor predeterminado se está definiendo mediante *DefaultOption. Si no observa esta regla, se producirá un error en las funciones del analizador. Debido a esta dificultad, debe evitar insertar *DefaultOption en una construcción Switch y Case si es posible.

Se puede llamar a la función de interfaz del analizador ResolveConstraint() para comprobar explícitamente una configuración de infracciones de restricción y resolver el conflicto si se encuentra alguno. La nueva configuración se devuelve al autor de la llamada. Después, el autor de la llamada puede examinar la configuración de aceptabilidad o puede usar la configuración para obtener una instantánea. La instantánea indica qué parámetros están restringidos en la configuración especificada en su creación. Esta información puede ser útil para los clientes que crean interfaces de usuario.