Resolvendo conflitos de configuração de GDL
Embora o analisador de GDL modifique automaticamente a configuração para evitar violar uma restrição, tenha em mente as informações a seguir para que o analisador conheça suas intenções.
Por exemplo, se a configuração passada para a função analisador contiver as configurações de parâmetro de Weather.Rain, Today.Sunday, Health.Well, a combinação inválida da seção anterior poderá ser resolvida alterando a configuração de qualquer um dos parâmetros nomeados nessa restrição. O analisador precisa decidir qual configuração de parâmetro alterar. Em muitos casos, você pode saber qual configuração deve ser alterada. normalmente, o parâmetro mais importante é deixado inalterado. Nesse caso, o conflito pode ser removido alterando os parâmetros para Weather:Sunny, Today:Monday ou Health:Sick, respectivamente. A maioria das pessoas prefere mudar o Clima primeiro, Hoje em segundo, e espera evitar mudar a saúde.
A diretiva *ConflictPriority permite que você especifique preferências sobre qual parâmetro alterar em um conflito. *ConflictPriority aceita um valor inteiro positivo que especifica a importância relativa de cada parâmetro. Quando dois ou mais parâmetros entram em conflito, o analisador modificará a configuração de parâmetro do parâmetro com a prioridade mais baixa. Essa diretiva está em conformidade com o uso comum de que o item de prioridade mais alta é rotulado com o menor ordinal. Portanto, o parâmetro de prioridade mais alta deve ser atribuído a *ConflictPriority: 1. Os valores selecionados para *ConflictPriority: não precisam ser consecutivos, mas devem ser exclusivos. *ConflictPriority deve aparecer como uma entrada filho do constructo *Feature.
A diretiva *FeatureType também influencia a prioridade de um parâmetro. *FeatureType é, na verdade, um palavra-chave específico de GPD/Unidrv. Para clientes não Unidrv, você deve simplesmente definir *FeatureType: PARAMETER_PROPERTY. Essa configuração evitará comportamentos inesperados no futuro. *FeatureType deve aparecer como uma entrada filho do constructo *Feature.
Quando o GDL alterar a configuração de um parâmetro para resolve um conflito, ele usará a configuração padrão, a menos que isso também seja restrito. Em alguns casos, talvez você queira que o analisador use uma configuração padrão diferente ao resolver conflitos em configurações diferentes. Para definir uma configuração padrão diferente, defina várias diretivas *DefaultOption dentro das diretivas Switch e Case ou dentro de um conjunto aninhado de diretivas Switch Case. O analisador avaliará o Switch e o Case, considerando a configuração atual para determinar o *DefaultOption a ser usado. Como o algoritmo resolvedor determina a configuração de parâmetros começando com a prioridade mais alta (ou seja, o menor ordinal), as configurações de parâmetros com prioridades inferiores à prioridade do parâmetro em avaliação são desconhecidas. Você deve garantir que qualquer constructo Switch que envolva a diretiva *DefaultOption use parâmetros que tenham prioridades mais altas (ou seja, ordinais menores) do que o parâmetro cujo valor padrão está sendo definido usando o *DefaultOption. Se você não observar essa regra, as funções do analisador falharão. Devido a essa dificuldade, você deve evitar inserir *DefaultOption em uma construção Switch e Case, se possível.
A função de interface do analisador ResolveConstraint() pode ser chamada para marcar explicitamente uma configuração para violações de restrição e para resolve o conflito se algum for encontrado. A nova configuração é retornada ao chamador. Em seguida, o chamador pode examinar a configuração quanto à aceitabilidade ou pode usar a configuração para obter um instantâneo. O instantâneo indica quais configurações de parâmetro são restritas sob a configuração especificada em sua criação. Essas informações podem ser úteis para clientes que criam interfaces do usuário.