GlideFilter - スコープ対象、グローバル
GlideFilter API を使用すると、クエリをフィルタリングして、1 つ以上のレコードが指定された一連の要件を満たしているかどうかを判断できます。
この API のメソッドは、GlideFilter グローバルオブジェクトを使用してアクセスできます。
大文字と小文字の区別
GlideFilter API はデフォルトで大文字と小文字を区別します。大文字と小文字の区別を有効または無効にするには、setCaseSensitive() メソッドを使用します。GlideRecord クエリは大文字と小文字を区別しません。
次の例は、GlideRecord クエリが大文字と小文字を区別しないで、大文字または小文字を使用した同じユーザーレコードを結果として得る方法を示しています。
var gr_Query = new GlideRecord('sys_user');
gr_Query.addQuery('first_name', 'Abel');
gr_Query.query();
while (gr_Query.next())
gs.info("Upper case query: " + gr_Query.getDisplayValue());
var gr_Query = new GlideRecord('sys_user');
gr_Query.addQuery('first_name', 'abel');
gr_Query.query();
while (gr_Query.next())
gs.info("Lower case query: " + gr_Query.getDisplayValue());
Upper case query: Abel Tuter
Lower case query: Abel Tuter次の例は、GlideFilter が大文字の条件に一致するレコードの値のみを取得する方法を示しています。小文字の条件では一致しません。
// Matches the 'Abel Tuter' user record
var gr_Query = new GlideRecord('sys_user');
gr_Query.query();
var condition = 'first_name=Abel';
var glideFilter = new GlideFilter(condition, 'filterCondition');
while (gr_Query.next()) {
if (glideFilter.match(gr_Query, true))
gs.info("Upper case condition: " + gr_Query.getDisplayValue());
}
// The following code does not match 'Abel Tuter' user record
var gr_Query = new GlideRecord('sys_user');
gr_Query.query();
var condition = 'first_name=abel';
var glideFilter = new GlideFilter(condition, 'filterCondition');
while (gr_Query.next()) {
if (glideFilter.match(gr_Query, true))
gs.info("Lower case condition: " + gr_Query.getDisplayValue());
}
Upper case condition: Abel Tuter次の例は、setCaseSensitive() メソッドを使用して GlideFilter の大文字と小文字の区別を無効にする方法を示しています。大文字と小文字がフィールド値と一致しない場合でも、条件に一致するとしてフィルターされます。
// Matches the 'Abel Tuter' user record
var gr_Query = new GlideRecord('sys_user');
gr_Query.query();
var condition = 'first_name=Abel';
var glideFilter = new GlideFilter(condition, 'filterCondition');
while (gr_Query.next()) {
if (glideFilter.match(gr_Query, true))
gs.info("Upper case condition: " + gr_Query.getDisplayValue());
}
// The following code disables case sensitivity and matches the same record
var gr_Query = new GlideRecord('sys_user');
gr_Query.query();
var condition = 'first_name=abel';
var glideFilter = new GlideFilter(condition, 'filterCondition');
glideFilter.setCaseSensitive(false);
while (gr_Query.next()) {
if (glideFilter.match(gr_Query, true))
gs.info("Lower case condition: " + gr_Query.getDisplayValue());
}
Upper case condition: Abel Tuter
Lower case condition: Abel Tuterフィルター null 値
ISNOTEMPTY を追加します。次の例は、GlideRecord と GlideFilter で同じエンコードクエリ使用すると異なる結果が生成されることを示しています。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: 4AND 条件 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: 3GlideFilter – GlideFilter(文字列 filter, 文字列 title)
GlideFilter オブジェクトをインスタンス化します。
| 名前 | タイプ | 説明 |
|---|---|---|
| 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: 2GlideFilter - checkRecord(GlideRecord now_GR, 文字列 filter, ブーリアン match)
指定されたフィルターを指定された GlideRecord の内容と比較します。
指定されたフィルターに 1 つの条件が含まれている場合、レコードが条件を満たしていれば true が返されます。
フィルターは、"active=true^number=abc^category=request" など、複数の条件をサポートしています。match パラメーターを使用して、一致を判断するためにすべての条件を満たす必要があるかどうか、1 つの条件のみを満たす必要があるのかを定義できます。
| 名前 | タイプ | 説明 |
|---|---|---|
| now_GR | GlideRecord | 評価する GlideRecord。 |
| フィルター | 文字列 | 標準の Glide 形式のエンコードされたクエリ文字列。「エンコードされたクエリ文字列」を参照してください。 GlideFilter クエリ結果から null 値を除外するには、クエリ条件に ISNOTEMPTY を追加します。 注: filter 値の大文字と小文字は区別されます。また、setCaseSensitive(false) を使用して大文字と小文字を区別する値を変更することはできません。 |
| 一致 | ブーリアン | オプション。filter パラメーターに複数の条件が含まれている場合に、すべての条件を満たす必要があるかどうかを示すフラグ。 有効な値:
デフォルト:true |
| タイプ | 説明 |
|---|---|
| ブーリアン | フィルター比較の結果。
|
次の例は、インシデントテーブル内のフィルター条件を満たす各レコードについて 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 に対してフィルターを評価します。
| 名前 | タイプ | 説明 |
|---|---|---|
| now_GR | GlideRecord | 評価する GlideRecord。 |
| 一致 | ブーリアン | すべてのフィルター条件が一致する必要があるかどうかを示すフラグ。 有効な値:
デフォルト値: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: 2GlideFilter - setCaseSensitive(ブーリアン caseSensitive)
大文字と小文字を区別するフィルター結果を有効または無効にします。
| 名前 | タイプ | 説明 |
|---|---|---|
| caseSensitive | ブーリアン | フィルターが大文字と小文字を区別するかどうかを示すフラグ。 有効な値:
デフォルト:true |
| タイプ | 説明 |
|---|---|
| なし |
次の例は、大文字と小文字を区別する結果を無効にする方法を示しています。
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
GlideFilter - setEnforceSecurity(ブール値:enforceSecurity)
フィルター文字列のサンドボックス評価を有効または無効にします。
| 名前 | タイプ | 説明 |
|---|---|---|
| エンフォーストセキュリティ | ブール |
サンドボックスでフィルターを評価するかどうかを示すフラグ。 有効な値:
デフォルト値:false |
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、このメソッドを呼び出す方法を示しています。
var now_GR = new GlideRecord('sys_user');
now_GR.query();
var condition = 'first_name=rebekah';
var filter = new GlideFilter(condition, 'filterCondition');
filter.setEnforceSecurity(true);
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