GlideFilter - スコープ対象、グローバル

  • リリースバージョン: Washingtondc
  • 更新日 2024年02月01日
  • 読む13読むのに数分
  • GlideFilter API を使用すると、フィルタークエリを有効にして、1 つ以上のレコードが指定された一連の要件を満たしているかどうかを判断できます。

    この API のメソッドは、GlideFilter グローバルオブジェクトを使用してアクセスできます。

    大文字と小文字の区別

    GlideFilter API はデフォルトで大文字と小文字を区別します。大文字と小文字の区別を有効または無効にするには、setCaseSensitive() メソッドを使用します。GlideRecord クエリは大文字と小文字を区別しません。

    次の例は、GlideRecord クエリが大文字と小文字を区別しないで、大文字または小文字を使用した同じユーザーレコードを結果として得る方法を示しています。

    var gr = new GlideRecord('sys_user');
    gr.addQuery('first_name', 'Abel');
    gr.query();
    while (gr.next())
      gs.info("Upper case query: " + gr.getDisplayValue());
    
    var gr = new GlideRecord('sys_user');
    gr.addQuery('first_name', 'abel');
    gr.query();
    while (gr.next())       
      gs.info("Lower case query: " + gr.getDisplayValue());
    GlideRecord query() の出力は、大文字と小文字を区別せずに同じ結果を表示します。
    Upper case query: Abel Tuter
    Lower case query: Abel Tuter

    次の例は、GlideFilter が大文字の条件に一致するレコードの値のみを取得する方法を示しています。小文字の条件では一致しません。

    // Matches the 'Abel Tuter' user record
    var gr = new GlideRecord('sys_user');
    gr.query();
    var condition = 'first_name=Abel';
    var glideFilter = new GlideFilter(condition, 'filterCondition');
    while (gr.next()) {
       if (glideFilter.match(gr, true))
            gs.info("Upper case condition: " + gr.getDisplayValue());
    }
    
    // The following code does not match 'Abel Tuter' user record
    var gr = new GlideRecord('sys_user');
    gr.query();
    var condition = 'first_name=abel';
    var glideFilter = new GlideFilter(condition, 'filterCondition');
    while (gr.next()) {
       if (glideFilter.match(gr, true))
            gs.info("Lower case condition: " + gr.getDisplayValue());
    }
    出力を見ると、フィルターがデフォルトの大文字と小文字を区別する大文字の結果のみを返すことがわかります。
    Upper case condition: Abel Tuter

    次の例は、setCaseSensitive() メソッドを使用して GlideFilter の大文字と小文字の区別を無効にする方法を示しています。大文字と小文字がフィールド値と一致しない場合でも、条件に一致するとしてフィルターされます。

    // Matches the 'Abel Tuter' user record
    var gr = new GlideRecord('sys_user');
    gr.query();
    var condition = 'first_name=Abel';
    var glideFilter = new GlideFilter(condition, 'filterCondition');
    while (gr.next()) {
       if (glideFilter.match(gr, true))
         gs.info("Upper case condition: " + gr.getDisplayValue());
    }
    
    // The following code disables case sensitivity and matches the same record
    var gr = new GlideRecord('sys_user');
    gr.query();
    
    var condition = 'first_name=abel';
    var glideFilter = new GlideFilter(condition, 'filterCondition');
    glideFilter.setCaseSensitive(false);
    
    while (gr.next()) {
      if (glideFilter.match(gr, true))
        gs.info("Lower case condition: " + gr.getDisplayValue());
    }
    出力には、GlideFilter の大文字と小文字を区別しない結果が表示されます。
    Upper case condition: Abel Tuter
    Lower case condition: Abel Tuter

    フィルター null 値

    GlideFilter クエリ結果から null 値を除外するには、クエリ条件に ISNOTEMPTY を追加します。次の例は、GlideRecordGlideFilter で同じエンコードクエリ使用すると異なる結果が生成されることを示しています。
    var insertRecordsGr = new GlideRecord('u_test_table');
    insertRecordsGr.deleteMultiple();
    var dates = ['', '2021-01-29', '2021-01-30', '2021-01-31'];
    dates.forEach(function(val) {
      insertRecordsGr.initialize();
      insertRecordsGr.u_date_field = val;
      insertRecordsGr.insert();
    });
    
    var now_GR = new GlideRecord('u_test_table');
    now_GR.addEncodedQuery('u_date_field<javascript:gs.beginningOfToday()');
    now_GR.query();
    
    // Encoded query includes null values with GlideFilter, which might cause unexpected results
    var condition = 'u_date_field<javascript:gs.beginningOfToday()';
    
    var grWithGlideFilter = new GlideRecord('u_test_table');
    grWithGlideFilter.query();
    var filter = new GlideFilter(condition, 'filterCondition');
      
    var countWithGlideFilter = 0;
    while (grWithGlideFilter.next()) {
      if (GlideFilter.checkRecord(grWithGlideFilter, condition))
         countWithGlideFilter++;
    }
    
    gs.info('Record RowCount: ' + now_GR.getRowCount() + ' - Filter Count: ' + countWithGlideFilter);
    出力は、GlideRecord が空の日付値をスキップして 3 つのレコードを返すことを示しています。GlideFilter クエリは空の日付値をカウントし、4 つのレコードのカウントを返します。
    Record RowCount: 3 - Filter Count: 4
    GlideFilter の結果から null 値を除外するには、クエリしたフィールドに AND 条件と ISNOTEMPTY を追加します。
    // Encoded query includes null values with GlideFilter
    var condition = 'u_date_field<=javascript:gs.beginningOfToday()^u_date_fieldISNOTEMPTY';
    出力は、GlideFilter でエンコードされたクエリが null の日付値をスキップし、3 つの結果をカウントすることを示しています。
    Record RowCount: 3 - Filter Count: 3

    GlideFilter – GlideFilter(文字列 filter, 文字列 title)

    GlideFilter オブジェクトをインスタンス化します。

    表 : 1. パラメーター
    名前 タイプ 説明
    filter 文字列 標準の Glide 形式のエンコードされたクエリ文字列。「 エンコードされたクエリ文字列」を参照してください。 setCaseSensitive() メソッドを使用して無効にしない限り、結果は大文字と小文字を区別します。

    GlideFilter クエリ結果から null 値を除外するには、クエリ条件に ISNOTEMPTY を追加します。

    title 文字列 フィルターのわかりやすいタイトル。

    次の例は、Rebekah という名前のユーザーの数をフィルターする方法を示しています。

    var now_GR = new GlideRecord('sys_user');
    now_GR.query();
    var condition = 'first_name=rebekah';
    var filter = new GlideFilter(condition, 'filterCondition');
    filter.setCaseSensitive(false);
      
    var countResults = 0;
    while (now_GR.next()) {
      if (filter.match(now_GR, true))
         countResults++;
    }
    
    gs.info('Number of users named Rebekah: ' + countResults);
    出力:
    Number of users named Rebekah: 2

    GlideFilter - checkRecord(GlideRecord now_GR, 文字列 filter, ブーリアン match)

    指定されたフィルターを指定された GlideRecord の内容と比較します。

    指定されたフィルターに 1 つの条件が含まれている場合、レコードが条件を満たしていれば true が返されます。

    フィルターは、"active=true^number=abc^category=request" など、複数の条件をサポートしています。match パラメーターを使用して、一致を判断するためにすべての条件を満たす必要があるかどうか、1 つの条件のみを満たす必要があるのかを定義できます。

    表 : 2. パラメーター
    名前 タイプ 説明
    now_GR GlideRecord 評価する GlideRecord
    フィルター 文字列 標準の Glide 形式のエンコードされたクエリ文字列。「 エンコードされたクエリ文字列」を参照してください。

    GlideFilter クエリ結果から null 値を除外するには、クエリ条件に ISNOTEMPTY を追加します。

    注:
    filter 値の大文字と小文字は区別されます。また、setCaseSensitive(false) を使用して大文字と小文字を区別する値を変更することはできません。
    一致 ブーリアン オプション。filter パラメーターに複数の条件が含まれている場合に、すべての条件を満たす必要があるかどうかを示すフラグ。

    有効な値:

    • true:メソッドが true を返すには、すべての条件を満たす必要があります。
    • false:メソッドが true を返すには、1 つの条件のみを満たす必要があります。

    デフォルト:true

    表 : 3. 返される内容
    タイプ 説明
    ブーリアン フィルター比較の結果。
    • true:フィルター条件が満たされました。
    • false:フィルター条件が満たされませんでした。

    次の例は、インシデントテーブル内のフィルター条件を満たす各レコードについて true を表示する方法を示しています。それ以外の場合は false です。

    var rec = new GlideRecord('incident');
    rec.query();
    
    var bool = true;
     
    while(rec.next())
    {
       bool = GlideFilter.checkRecord(rec, "active=true");
       gs.info("number "+ rec.number + " is " + bool);
    }
    出力:
    number INC0000060 is false
    number INC0009002 is false
    number INC0000009 is false
    ...
    number INC0000015 is true
    number INC0000016 is true
    number INC0000017 is true
    ...

    GlideFilter - match(GlideRecord now_GR, ブーリアン match)

    指定された GlideRecord に対してフィルターを評価します。

    表 : 4. パラメーター
    名前 タイプ 説明
    now_GR GlideRecord 評価する GlideRecord
    一致 ブーリアン

    すべてのフィルター条件が一致する必要があるかどうかを示すフラグ。

    有効な値:
    • true:すべてのフィルター条件が一致する必要があります。
    • false:フィルター条件の一致は必要ありません。

    デフォルト値:false

    表 : 5. 返される内容
    タイプ 説明
    ブーリアン 一致チェックの結果。
    • true:フィルター条件が満たされました。
    • false:フィルター条件が満たされませんでした。

    次の例は、フィルター条件が指定された GlideRecord と一致することを確認する方法を示しています。

    var now_GR = new GlideRecord('sys_user');
    now_GR.query();
    var condition = 'first_name=rebekah';
    var filter = new GlideFilter(condition, 'filterCondition');
    filter.setCaseSensitive(false);
      
    var countResults = 0;
    while (now_GR.next()) {
      if (filter.match(now_GR, true))
         countResults++;
    }
    
    gs.info('Number of users named Rebekah: ' + countResults);
    出力:
    Number of users named Rebekah: 2

    GlideFilter - setCaseSensitive(ブーリアン caseSensitive)

    大文字と小文字を区別するフィルター結果を有効または無効にします。

    表 : 6. パラメーター
    名前 タイプ 説明
    caseSensitive ブーリアン フィルターが大文字と小文字を区別するかどうかを示すフラグ。
    有効な値:
    • true:フィルターは大文字と小文字を区別します。
    • false:フィルターは大文字と小文字を区別しません。

    デフォルト:true

    表 : 7. 返される内容
    タイプ 説明
    なし

    次の例は、大文字と小文字を区別する結果を無効にする方法を示しています。

    var now_GR = new GlideRecord('sys_user');
    now_GR.query();
    
    var condition = 'first_name=rebekah';
    var filter = new GlideFilter(condition, 'filterCondition');
    
    // Disable case-sensitive filtering
    filter.setCaseSensitive(false);
    
    while (now_GR.next()) {
      if (filter.match(now_GR, true))
         gs.info(now_GR.getDisplayValue());
    }

    出力は、フィルターが小文字の条件で大文字の結果を取得することを示しています。

    Rebekah Padley
    Rebekah Lindboe