Auflösen von GDL-Konfigurationskonflikten
Obwohl der GDL-Parser die Konfiguration automatisch ändert, um zu vermeiden, dass eine Einschränkung verletzt wird, sollten Sie die folgenden Informationen berücksichtigen, damit der Parser Ihre Absichten kennt.
Wenn beispielsweise die an die Parserfunktion übergebene Konfiguration die Parametereinstellungen von Weather.Rain, Today.Sunday, Health.Well enthält, kann die ungültige Kombination aus dem vorherigen Abschnitt aufgelöst werden, indem die Einstellung für einen der Parameter geändert wird, die in dieser Einschränkung benannt sind. Der Parser muss entscheiden, welche Parametereinstellung geändert werden soll. In vielen Fällen wissen Sie möglicherweise, welche Einstellung geändert werden soll. in der Regel bleibt der wichtigere Parameter unverändert. In diesem Fall kann der Konflikt durch Ändern der Parameter in Weather:Sunny, Today:Monday oder Health:Sick entfernt werden. Die meisten Menschen werden es vorziehen, das Wetter zuerst zu ändern, heute zweiten, und hoffen, änderungen der Gesundheit zu vermeiden.
Mit der *ConflictPriority-Direktive können Sie Einstellungen dazu angeben, welcher Parameter in einem Konflikt geändert werden soll. *ConflictPriority akzeptiert einen positiven ganzzahligen Wert, der die relative Wichtigkeit der einzelnen Parameter angibt. Wenn zwei oder mehr Parameter in Konflikt geraten, ändert der Parser die Parametereinstellung des Parameters mit der niedrigeren Priorität. Diese Direktive entspricht der allgemeinen Verwendung, dass das Element mit der höchsten Priorität mit der kleinsten Ordnungszahl bezeichnet wird. Daher sollte dem Parameter mit der höchsten Priorität *ConflictPriority: 1 zugewiesen werden. Die werte, die für *ConflictPriority: ausgewählt sind, müssen nicht aufeinander folgen, aber sie sollten eindeutig sein. *ConflictPriority sollte als untergeordneter Eintrag des *Feature-Konstrukts angezeigt werden.
Die *FeatureType-Direktive beeinflusst auch die Priorität eines Parameters. *FeatureType ist eigentlich eine GPD/Unidrv-spezifische Schlüsselwort (keyword). Für Nicht-Unidrv-Clients müssen Sie einfach *FeatureType: PARAMETER_PROPERTY festlegen. Mit dieser Einstellung werden unerwartete Verhaltensweisen in Zukunft vermieden. *FeatureType sollte als untergeordneter Eintrag des *Feature-Konstrukts angezeigt werden.
Wenn GDL die Einstellung eines Parameters ändert, um einen Konflikt zu lösen, wird die Standardeinstellung verwendet, es sei denn, dies ist ebenfalls eingeschränkt. In einigen Fällen sollte der Parser möglicherweise eine andere Standardeinstellung verwenden, wenn Konflikte unter verschiedenen Konfigurationen aufgelöst werden. Um eine solche andere Standardeinstellung festzulegen, definieren Sie mehrere *DefaultOption-Direktiven innerhalb der Switch- und Case-Direktiven oder innerhalb einer geschachtelten Gruppe von Switch Case-Direktiven. Der Parser wertet den Switch und die Groß-/Kleinschreibung unter Berücksichtigung der aktuellen Konfiguration aus, um die zu verwendende *DefaultOption zu bestimmen. Da der Resolveralgorithmus die Einstellung von Parametern bestimmt, die mit der höchsten Priorität (d. h. der kleinsten Ordnungszahl) beginnen, sind die Einstellungen von Parametern mit Prioritäten, die niedriger als die Priorität des ausgewerteten Parameters sind, unbekannt. Sie müssen sicherstellen, dass jedes Switch-Konstrukt, das die *DefaultOption-Direktive umgibt, Parameter verwendet, deren Prioritäten höher sind (d. h. kleinere Ordnungszahlen) als der Parameter, dessen Standardwert mithilfe von *DefaultOption definiert wird. Wenn Sie diese Regel nicht beachten, schlagen die Parserfunktionen fehl. Aufgrund dieser Schwierigkeit sollten Sie das Einfügen von *DefaultOption in eine Switch- und Case-Konstruktion vermeiden, wenn dies überhaupt möglich ist.
Die ResolveConstraint() -Parserschnittstellenfunktion kann aufgerufen werden, um eine Konfiguration explizit auf Einschränkungsverletzungen zu überprüfen und den Konflikt ggf. zu beheben. Die neue Konfiguration wird an den Aufrufer zurückgegeben. Der Aufrufer kann dann die Konfiguration auf Zulässigkeit überprüfen oder die Konfiguration verwenden, um eine Momentaufnahme zu erhalten. Die Momentaufnahme gibt an, welche Parametereinstellungen unter der Konfiguration eingeschränkt sind, die bei der Erstellung angegeben wird. Diese Informationen können für Clients nützlich sein, die Benutzeroberflächen erstellen.