解決 GDL 設定衝突
雖然 GDL 剖析器會自動修改設定以避免違反條件約束,但請記住下列資訊,讓剖析器知道您的意圖。
例如,如果傳遞至剖析器函式的組態包含 Weather.Rain、Today.Sunday、Health.Well 的參數設定,則可以藉由變更此條件約束中任何一個參數的設定來解決上一節不正確組合。 剖析器必須決定要變更的參數設定。 在許多情況下,您可能會知道應該變更哪一個設定。 一般而言,更重要的參數會保持不變。 在此情況下,您可以將參數分別變更為 Weather:Weather:Weather、Today:Monday 或 Health:Weather:Weather,來移除衝突。 大部分的人都偏好先變更天氣,今天第二個,希望避免變更健康情況。
*ConflictPriority 指示詞可讓您指定要在衝突中變更的參數喜好設定。 *ConflictPriority 接受正整數值,指定每個參數的相對重要性。 當兩個或多個參數發生衝突時,剖析器會修改優先順序較低的參數參數設定。 此指示詞符合最高優先順序專案以最小序數標示的常見用法。 因此,應指派最高優先順序參數 *ConflictPriority:1。 針對 *ConflictPriority 選取的值不一定是連續的,但它們應該是唯一的。 *ConflictPriority 應該會顯示為 *Feature 建構的子專案。
*FeatureType 指示詞也會影響參數的優先順序。 *FeatureType 實際上是 GPD/Unidrv 特定關鍵字。 對於非 Unidrv 用戶端,您只需要設定 *FeatureType:PARAMETER_PROPERTY。 此設定將會避免未來發生非預期的行為。 *FeatureType 應該會顯示為 *Feature 建構的子專案。
當 GDL 變更參數的設定以解決衝突時,除非也受到限制,否則會使用預設設定。 在某些情況下,您可能會想要剖析器在不同的組態下解決衝突時使用不同的預設設定。 若要設定這類不同的預設設定,請在 Switch 和 Case 指示詞或巢狀的 Switch Case 指示詞集中定義多個 *DefaultOption 指示詞。 剖析器會根據目前的組態來評估 Switch 和 Case,以判斷要使用的 *DefaultOption。 因為解析程式演算法會決定從最高優先順序開始的參數設定, (也就是最小序數) ,所以評估下參數優先順序低於評估中參數優先順序的參數設定未知。 您必須確定任何圍繞 *DefaultOption 指示詞的 Switch 建構都會使用優先順序較高 (的參數,也就是比使用 *DefaultOption 定義其預設值的參數較小的序數) 。 如果您未觀察到此規則,剖析器函式將會失敗。 由於這種困難,您應該盡可能避免將 *DefaultOption 插入 Switch 和 Case 建構中。
您可以呼叫 ResolveConstraint () 剖析器介面函式,明確檢查條件約束違規的組態,並在找到任何專案時解決衝突。 新的組態會傳回給呼叫端。 接著,呼叫端可以檢查設定是否可接受,或使用組態來取得 快照集。 快照集指出在建立時所指定的組態下,哪些參數設定會受到限制。 此資訊對於建立使用者介面的用戶端可能很有用。