エンコードされたクエリで演算子 (^NQ) を使用するとリストビューで誤った参照リンクが発生する説明 ビジネスルール内のエンコードされたクエリで演算子 ^NQ を使用すると、結果はリストビューに表示されますが、参照リンクが正しくありません。演算子 ^NQ (第 2 レベルの条件) を含むクエリを持つビジネスルールのフィルターは、クエリの最初の部分にのみ適用されます。ビジネスルールはリスト内で正しく機能しますが、Active=true のようなフィルターが追加された場合、フィルターはクエリの最初の部分 (^NQ の前) にのみ適用されます。 再現手順 ビジネスルールを作成します。 名前 (Name):テスト条件テーブル (Table):Incident [インシデント]タイミング (When):ドロップダウンリストから [前 (before)] を選択します。クエリ (Query):[チェックボックスをオンにします]詳細 (Advanced):[チェックボックスをオンにします]条件 (Condition):gs.getSession().isInteractive()スクリプト(Script):function onBefore(current, previous) { current.addEncodedQuery('active=false^NQactive=true'); } インシデントリストビューをロードします。不整合に注意してください。インシデント番号をクリックすると、別のインシデントのフォームが開きます。 ワークアラウンド 以下の動作が想定されます。この問題が発生する理由を理解するために、NQ 演算子の仕組みとビジネスルールに適さない理由に関する次の詳細情報が確認してください。 NQ (最上位の OR) 演算子は、次のクエリ用語を使用して、以前のすべてのクエリ用語に対して OR を実行します。以前のクエリ用語がない場合は、通常の OR と同等です。 たとえば、クエリ式が次のようになっているとします。 active=true^NQactive=false クエリは次のとおりです。 (active = true OR active = false) ただし、クエリ式 (number=INC000004 など) がすでに存在する場合は、クエリ式 active=true^NQactive=false を追加すると、次のようになります。 number=INC000004^active=true^NQactive=false これは、次のクエリと同じです。 (number=INC000004 AND active = true) OR (active = false)想定されたクエリではありません。 (number=INC000004) AND (active = true OR active = false) クエリが評価される際に、レコード INC000004 が active=false の場合、OR 部分が実行され、active=false の最初のレコードが返されます。 データベースではレコードが任意の順序に並び替えられるため、これは active=false の任意のレコードにすることができます。具体的には INC000004 にする必要はありません。 そのため、既存のクエリに追加されるコンテキストで NQ 演算子を使用すると、予期しない結果が生じます。これには、ビジネスルールなどが含まれます。クエリ式全体が判明しているコンテキストで使用する場合、同等のクエリはクリアされます。既存のクエリに NQ を追加すると、同等のクエリ式によって元のクエリ自体の意味が変わる場合があります。 特にクエリ前のビジネスルールの場合、クエリ用語を追加する目的は、結果が元のクエリのサブセットになるようにすることです。NQ を追加すると、クエリ全体の意味が変わります。また、クエリ前のビジネスルールを追加すると、特定のユースケース (リストビューなど) だけでなく、クエリが実行されるすべてのユースケース (フォームビュー) でクエリが変更されることにも注意してください。 関連する問題:PRB647484