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 Tuternull 値をフィルター
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(文字列フィルター、文字列タイトル)
GlideFilter オブジェクトをインスタンス化します。
| 名前 | タイプ | 説明 |
|---|---|---|
| フィルター | 文字列 | 標準の Glide 形式でエンコードされたクエリ文字列。「 エンコードされたクエリ文字列」を参照してください。setCaseSensitive() メソッドを使用して無効にしない限り、結果は大文字と小文字が区別されます。 GlideFilter クエリ結果から null 値を除外するには、クエリ条件に ISNOTEMPTY を追加します。 |
| タイトル | 文字列 | フィルターのわかりやすいタイトル。 |
次の例は、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, 文字列フィルター, ブール値一致)
指定されたフィルターを指定された GlideRecord の内容と比較します。
指定されたフィルターに条件が 1 つ含まれている場合、レコードが条件を満たすと true が返されます。
フィルターは複数の条件をサポートします ( 例:「active=true^number=abc^category=request」)。match パラメーターを使用して、一致を判断するためにすべての条件を満たす必要があるか、または単一の条件のみを満たす必要があるかを定義できます。
| 名前 | タイプ | 説明 |
|---|---|---|
| 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, ブール一致)
指定された 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 | ブーリアン | フィルターで大文字と小文字を区別するかどうかを示すフラグ。 有効な値:
デフォルト: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