GlideQuery - スコープ指定、グローバル
GlideQuery スクリプトインクルードは、サーバーサイドスクリプトのレコードデータに対して CRUD 操作を実行するための GlideRecord API の代替です。
GlideQuery スクリプトインクルードを使用すると、次のことができます。
- クエリと結果には、標準の JavaScript オブジェクトとタイプを使用します。
- 追加のチェックを使用してクエリエラーを迅速に診断し、エラーメッセージをクリアします。
- 定型的なクエリパターンを回避することで、コードを簡素化します。
- GlideRecord に関するより深い知識がなくても、一般的なパフォーマンスの問題を回避できます。
new global.GlideQuery('sys_user')
// ...このスクリプトインクルードには GlideQuery [com.sn_glidequery] プラグインが必要です。実装
このスクリプトインクルードは、 ストリーム および オプション の API と連携して機能します メソッドの呼び出しが連鎖するビルダーパターンで、各メソッドは前のメソッドの返された結果に基づいて構築されます。メソッドを使用してクエリーの属性を定義します。メソッドは、ターミナルメソッド (クエリ結果を返すメソッド) を呼び出すまで実行されません。これにより、クエリを実行する前にクエリの要件を定義できます。
クエリーが単一のレコードを返す場合、システムは結果をオプションのオブジェクトにラップします。クエリーがレコードのストリームを返す場合、システムは結果を Stream オブジェクトにラップします。これらのオブジェクトを使用すると、各 API の一連のメソッドを使用して結果を管理できます。
たとえば、このスクリプトはタスク テーブルに対してクエリを実行し、レコードを優先度別にグループ化して、合計再アサイン回数が 4 回を超える各優先度を返します。
var query = new global.GlideQuery('task')
.where('active', true) //Returns new GlideQuery object with a "where" clause.
.groupBy('priority') //Returns new GlideQuery object with a "group by" clause.
.aggregate('sum', 'reassignment_count') //Returns new GlideQuery object with a "sum(reassignment_count)" clause.
.having('sum', 'reassignment_count', '>', 4) //Returns new GlideQuery object with a "having reassignment_count > 4" clause.
.select() //Returns a stream of records wrapped in a Stream object.
.forEach(function (priority){ //Terminal method in the Stream class that executes the query and returns the result.
gs.info("Priority " + priority.group.priority + ": " + priority.sum.reassignment_count + " reassignments");
});Priority 1: 11 reassignments
Priority 3: 6 reassignments
Priority 5: 5 reassignmentsエラー処理
GlideQuery スクリプトインクルードは、クエリに問題がある場合にエラーをスローし、それをガイドするのに役立つ明確な説明を含めます。このスクリプトインクルードは次をチェックします。
- 無効なフィールド
- フィールドの無効な値タイプ
- 選択肢フィールドの値が無効です
- 無効なクエリ演算子
たとえば、次のコードサンプルでは、クエリされたフィールドがテーブルに存在しないため、エラーがスローされます。
new global.GlideQuery('task')
.where('id', '4717dfe5a9fe198100450448b2404c16') // should be 'sys_id'
.select('description', 'severity')
.toArray(100);
// Error: Unable to find field 'id' in table 'task'. Known fields: active, activity_due, ...このコードサンプルでは、引数の 1 つのデータ型が正しくないため、エラーがスローされます。
new global.GlideQuery('task')
.where('priority', 'one') // priority is an integer (should be 1)
.select('description', 'severity')
.toArray(100);
// Error: Unable to match value ['one'] with field 'priority' in table 'task'. Expecting type 'integer'再利用
GlideQuery オブジェクトは不変であるため、後でコードの他の部分で再利用できます。たとえば、このスクリプトはクエリを作成し、後で GlideQuery オブジェクトを使用してレポートを生成します。
var highPriorityTasks = new global.GlideQuery('task')
.where('active', true)
.where('priority', 1);
generateReport(highPriorityTasks);
notifyOwners(highPriorityTasks);
var avgReassignmentCount = highPriorityTasks
.avg('reassignment_count')
.orElse(0)
制限事項
GlideQuery スクリプトインクルードは、以下をサポートしていません。
- 他のスコープからのアクセスを許可しないテーブルの読み取りまたは書き込み。
- エンコードされたクエリの読み取り。
- JavaScript 文字列として読み取られる GlideDate または GlideDateTime オブジェクト。
- FX 通貨フィールド。
- ジャーナルフィールドタイプを更新しています。
- あいまいな条件付きロジックを使用したクエリ。たとえば、次のクエリは、実行
(active = true AND name != null) OR last_name = Luddyまたはactive = true AND (name != null OR last_name = Luddy)を実行するかどうかがシステムにわからないため不明瞭です。var user = new global.GlideQuery('sys_user') .where('active', true) .whereNotNull('name') .orWhere('last_name', 'Luddy') .selectOne() .get()代わりに子クエリをネストする方法を理解するには、 where() メソッドを参照してください。
GlideQuery の中間メソッドとターミナルメソッド
GlideQuery スクリプトインクルードでは、中間とターミナルの 2 つのカテゴリのメソッドを使用します。中間メソッドは、レコードなどのアイテムのストリームと対話するために使用される API である Stream を返すメソッドであり、呼び出しが連鎖する流暢なスタイルの構文を可能にします。ターミナル メソッドは、ストリームを返さないため、 Stream メソッド呼び出しのチェーンを停止するメソッドです。
GlideQuery スクリプトインクルードでは、where()、orderBy()、disableWorkflow() などのメソッドは、新しい GlideQuery オブジェクトを返す中間メソッドです。同様に、 GlideQuery スクリプトインクルードの最も一般的なターミナルメソッドである select() と selectOne() はターミナルメソッドです。これらのメソッドは、 GlideQuery の構成が完了し、レコードの処理を開始する準備ができたときに呼び出されます。特定のユースケースに従って GlideQuery スクリプトインクルードの呼び出しを構成する際には、これら 2 つのメソッドタイプの違いを念頭に置いておくことが重要です。中間メソッドとターミナルメソッドの詳細については、「 GlideQuery - ストリーム処理パート 1」の記事を参照してください。
次の方法は中間として分類されます。
- aggregate(文字列 aggregateType, 文字列フィールド)
- disableAutoSysFields()
- disableWorkflow()
- forceUpdate()
- groupBy(文字列フィールド)
- having(文字列 aggregateType, 文字列フィールド, 文字列演算子, 数値)
- limit(数制限)
- orderBy(文字列フィールド)
- orderByDesc(String fieldOrAggregate, String field)
- orWhere(文字列 fieldOrQuery, 文字列演算子, 任意の値)
- orWhereNotNull(文字列フィールド)
- orWhereNull(文字列フィールド)
- where(文字列 fieldOrQuery, 文字列演算子, 任意の値)
- whereNotNull(文字列フィールド)
- whereNull(文字列フィールド)
- withAcls()
次のメソッドはターミナルとして分類されます。
- avg (文字列フィールド)
- count()
- deleteMultiple()
- get(文字列キー, アレイ selectedFields)
- getBy(オブジェクト keyValues, アレイ selectedFields)
- insert(オブジェクト keyValues, オブジェクト selectedFields)
- insertOrUpdate(オブジェクト変更、オブジェクト selectedFields)
- max(文字列フィールド)
- min(文字列フィールド)
- select (文字列フィールド)
- selectOne(文字列フィールド)
- sum(文字列フィールド)
- toGlideRecord()
- update(オブジェクトの変更、オブジェクト selectedFields)
- updateMultiple(オブジェクト変更)
GlideQuery:GlideQuery(文字列テーブル)
レコードクエリのビルドと実行に使用する GlideQuery オブジェクトをインスタンス化します。
| 名前 | タイプ | 説明 |
|---|---|---|
| table | 文字列 | クエリ対象のテーブル。 |
| タイプ | 説明 |
|---|---|
| なし |
この例では、User テーブルのクエリをインスタンス化します。
var query = new global.GlideQuery('sys_user');
GlideQuery - aggregate(文字列 aggregateType, 文字列フィールド)
指定されたアグリゲーション関数を使用してフィールドをアグリゲートします。
このメソッドは、複数のフィールドに対して集計するクエリをビルドする場合や、複数の集計関数を使用する場合、または groupBy() メソッドを使用する必要がある場合に使用します。1つの関数で1つのフィールドに対してのみ集計し、 groupBy()を使用する必要がない場合は、代わりに次のいずれかのメソッドを使用します。
- avg()
- 最小値
- max()
- count()
| 名前 | タイプ | 説明 |
|---|---|---|
| aggregateType | 文字列 | 実行するアグリゲーション関数のタイプ。次のオプションが含まれます。
|
| フィールド | 文字列 | 操作を実行するフィールド。 |
| タイプ | 説明 |
|---|---|
| GlideQuery | ビルド中のクエリオブジェクト。 |
var query = new global.GlideQuery('task')
.where('active', true) //Returns new GlideQuery object with a "where" clause.
.groupBy('priority') //Returns new GlideQuery object with a "group by" clause.
.aggregate('sum', 'reassignment_count') //Returns new GlideQuery object with a "sum(reassignment_count)" clause.
.having('sum', 'reassignment_count', '>', 4) //Returns new GlideQuery object with a "having reassignment_count > 4" clause.
.select() //Returns a stream of records wrapped in a Stream object.
.forEach(function (priority){ //Terminal method in the Stream class that executes the query and returns the result.
gs.info("Priority " + priority.group.priority + ": " + priority.sum.reassignment_count + " reassignments");
});Priority 1: 11 reassignments
Priority 3: 6 reassignments
Priority 5: 5 reassignmentsGlideQuery - avg(文字列フィールド)
指定された数値フィールドのアグリゲート平均を返します。
- 整数
- 長
- 浮動小数点数
- 倍精度
- 通貨
| 名前 | タイプ | 説明 |
|---|---|---|
| フィールド | 文字列 | 操作を実行するフィールド。 |
| タイプ | 説明 |
|---|---|
| オプション | 指定されたフィールドのアグリゲート平均を含むオブジェクト。 |
この例は、cmdb_ciテーブル内の障害の平均数を返す方法を示しています。
var faults = new global.GlideQuery('cmdb_ci')
.avg('fault_count')
.orElse(0);
gs.info(JSON.stringify(faults));
出力:
0.0037
GlideQuery:count()
クエリに一致するレコードの数を返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| 番号 | クエリに一致するレコードの数。 |
この例では、ユーザーテーブル内のアクティブなレコードの数を返します。
var userCount = new global.GlideQuery('sys_user')
.where('active', true)
.count();
出力:
612
GlideQuery - deleteMultiple()
前の Where 節で指定されたテーブル内のすべてのレコードを削除します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| なし |
この例では、姓が Jeter であるユーザーテーブル内のすべてのアクティブなレコードを削除します。
var query = new global.GlideQuery('sys_user')
.where('active', true)
.where('last_name', 'Jeter')
.deleteMultiple();
GlideQuery - disableAutoSysFields()
システムフィールド、または sys_created_on、sys_updated_on、sys_mod_count など、 システム プリフィックスで始まる名前を持つフィールドの更新を無効にします。指定したクエリにのみ適用されます。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| GlideQuery | ビルド中のクエリオブジェクト。 |
この例では、タスクテーブルにレコードを追加しますが、システムフィールドは設定しません。このメソッドを呼び出さない場合、以下の例では sys_updated_on、sys_mod_count などが更新されます。
var query = new global.GlideQuery('task')
.disableAutoSysFields()
.insert({ description: 'example', priority: 1 });
GlideQuery - disableWorkflow()
クエリの結果として実行または作成されるビジネスルール、フロー、ワークフロー、または監査レコードを無効にします。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| GlideQuery | ビルド中のクエリオブジェクト。 |
この例では、自動ビジネスプロセスをトリガーせずにタスクテーブルの複数のレコードを更新します。
var query = new global.GlideQuery('task')
.disableWorkflow()
.where('active', true)
.updateMultiple({ priority: 1 });
GlideQuery - forceUpdate()
レコードが変更されていない場合でも、データベースを強制的に更新します。たとえば、このメソッドを使用してビジネスルールを強制的に実行できます。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| GlideQuery | ビルド中のクエリオブジェクト。 |
この例では、タスクレコードを特定のsys_idで強制的に更新します。
var forceUpdate = new global.GlideQuery('task')
.forceUpdate()
.where('sys_id', taskId)
.update()
GlideQuery - get(文字列キー, アレイ selectedFields)
クエリから単一のレコードを返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| key | 文字列 | 返されるレコードのSys_id。 |
| selectedFields | アレイ | オプション。結果で返す追加フィールド。 デフォルト:システムは常にsys_idを返します。 |
| タイプ | 説明 |
|---|---|
| オプション | 単一のレコードを操作するために使用されるオブジェクト。 |
sys_idに基づいてレコードを返す例。
var user = new global.GlideQuery('sys_user')
.get('5137153cc611227c000bbd1bd8cd2005', ['first_name', 'last_name']) //Returns an Optional object.
.orElse({ first_name: 'Default', last_name: 'User' }); //Method in the Optional class to return a default value.
gs.info(JSON.stringify(user, null, 2));
出力:
{
"sys_id":"5137153cc611227c000bbd1bd8cd2005",
"first_name":"Fred",
"last_name":"Luddy"
}
GlideQuery - getBy(Object keyValues, Array selectedFields)
クエリーする名前と値のペアのセットに基づいて、単一レコードを含むオプションのオブジェクトを返します。名前と値のペアごとに「=」演算子を想定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| キー値 | オブジェクト | ここで、キーはフィールドの名前で、値はクエリ対象の値となるオブジェクトです。 |
| selectedFields | アレイ | オプション。結果で返す追加フィールド。 デフォルト:システムは常にsys_idを返します。 |
| タイプ | 説明 |
|---|---|
| オプション | 単一のレコードを操作するために使用されるオブジェクト。 |
ユーザーの名前を照会してレコードを返す例。
var user = new global.GlideQuery('sys_user')
.getBy({
first_name: 'Fred',
last_name: 'Luddy'
}, ['first_name', 'last_name', 'city', 'active']) // select first_name, last_name, city, active
.orElse({
first_name: 'Nobody',
last_name: 'Found',
city: 'Nowhere',
active: false
});
gs.info(JSON.stringify(user, null, 2));
出力:
{
"first_name":"Fred",
"last_name":"Luddy",
"city":null,
"active":true,
"sys_id":"5137153cc611227c000bbd1bd8cd2005"
}
GlideQuery - groupBy(文字列フィールド)
指定されたフィールド別にクエリ結果をグループ化します。
このメソッドは aggregate() メソッドで使用する必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| フィールド | 文字列または文字列のアレイ | 結果をグループ化するフィールド。 |
| タイプ | 説明 |
|---|---|
| GlideQuery | ビルド中のクエリオブジェクト。 |
var query = new global.GlideQuery('task')
.where('active', true) //Returns new GlideQuery object with a "where" clause.
.groupBy('priority') //Returns new GlideQuery object with a "group by" clause.
.aggregate('sum', 'reassignment_count') //Returns new GlideQuery object with a "sum(reassignment_count)" clause.
.having('sum', 'reassignment_count', '>', 4) //Returns new GlideQuery object with a "having reassignment_count > 4" clause.
.select() //Returns a stream of records wrapped in a Stream object.
.forEach(function (priority){ //Terminal method in the Stream class that executes the query and returns the result.
gs.info("Priority " + priority.group.priority + ": " + priority.sum.reassignment_count + " reassignments");
});Priority 1: 11 reassignments
Priority 3: 6 reassignments
Priority 5: 5 reassignmentsGlideQuery - having(String aggregateType, String field, String operator, Number value)
フィルターは、指定した条件に一致する結果のグループのみを表示できるように、グループを集計します。
このメソッドは aggregate() メソッドまたは groupBy() メソッドで使用する必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| aggregateType | 文字列 | 実行するアグリゲーション関数のタイプ。次のオプションが含まれます。
|
| フィールド | 文字列 | 操作を実行するフィールド。 |
| オペレーター | 文字列 | 演算で使用する数値演算子。 次のオプションが含まれます。
|
| value | 番号 | 操作で使用する数値。 |
| タイプ | 説明 |
|---|---|
| GlideQuery | ビルド中のクエリオブジェクト。 |
var query = new global.GlideQuery('task')
.where('active', true) //Returns new GlideQuery object with a "where" clause.
.groupBy('priority') //Returns new GlideQuery object with a "group by" clause.
.aggregate('sum', 'reassignment_count') //Returns new GlideQuery object with a "sum(reassignment_count)" clause.
.having('sum', 'reassignment_count', '>', 4) //Returns new GlideQuery object with a "having reassignment_count > 4" clause.
.select() //Returns a stream of records wrapped in a Stream object.
.forEach(function (priority){ //Terminal method in the Stream class that executes the query and returns the result.
gs.info("Priority " + priority.group.priority + ": " + priority.sum.reassignment_count + " reassignments");
});Priority 1: 11 reassignments
Priority 3: 6 reassignments
Priority 5: 5 reassignmentsGlideQuery - insert(Object keyValues, Object selectedFields)
レコードを挿入し、そのレコードを含むオプションのオブジェクトを返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| キー値 | オブジェクト | レコードに挿入する名前と値のペアを含むオブジェクト。指定されていないフィールドは null になります。 |
| selectedFields | アレイ | オプション。結果で返す追加フィールド。 デフォルト:システムは常にsys_idを返します。 |
| タイプ | 説明 |
|---|---|
| オプション | 単一のレコードを操作するために使用されるオブジェクト。 |
この例では、ユーザーの姓と名に基づいてレコードを挿入する方法を示します。
var fred = new global.GlideQuery('sys_user')
.insert({ first_name: 'Fred', last_name: 'Luddy' })
.get();
gs.info(JSON.stringify(fred, null, 2));
出力:
{
"sys_id":"cf16eed0e82a9010f8778bda83d255d2",
"first_name":"Fred",
"last_name":"Luddy"
}
GlideQuery - insertOrUpdate(Object changes, Object selectedFields)
既存のレコードを更新するか、まだ存在しない場合は新しいレコードを挿入します。
| 名前 | タイプ | 説明 |
|---|---|---|
| 変更 | オブジェクト | 更新する、またはレコードに挿入する名前と値のペアを含むオブジェクト。 |
| selectedFields | アレイ | オプション。結果で返す追加フィールド。 デフォルト:システムは常にsys_idを返します。 |
| タイプ | 説明 |
|---|---|
| オプション | 単一のレコードを操作するために使用されるオブジェクト。 |
この例では、システムにまだ存在しない新しいレコードを挿入する方法を示します。
// insert a new record
var user = new GlideQuery('sys_user')
.insertOrUpdate({
first_name: 'George',
last_name: 'Griffey'
})
.orElse(null);
この例では、既存のレコードを更新する方法を示します。
// update existing record
var user = new global.GlideQuery('sys_user')
.insertOrUpdate({
sys_id: '2d0efd6c73662300bb513198caf6a72e',
first_name: 'George',
last_name: 'Griffey' })
.orElse(null);
GlideQuery - limit(数制限)
クエリで返されるレコードの数を制限します。
| 名前 | タイプ | 説明 |
|---|---|---|
| limit | 番号 | 返されるレコードの数。 |
| タイプ | 説明 |
|---|---|
| GlideQuery | ビルド中のクエリオブジェクト。 |
この例は、返される結果を 5 レコードに制限する方法を示しています。
var incidents = new global.GlideQuery('incident')
.limit(5)
.select('priority', 'description')
.forEach(function (incident){
gs.info(JSON.stringify(incident, null, 2));
});
出力:
*** Script: {
"priority": 1,
"description": "User can't get to any of his files on the file server.",
"sys_id": "9d385017c611228701d22104cc95c371"
}
*** Script: {
"priority": 1,
"description": "I just moved from floor 2 to floor 3 and my laptop cannot connect to any wireless network.",
"sys_id": "e8caedcbc0a80164017df472f39eaed1"
}
*** Script: {
"priority": 1,
"description": "User forgot their email password.",
"sys_id": "9d3c1197c611228701cd1d94bc32d76d"
}
*** Script: {
"priority": 1,
"description": "When I try to print, my whole computer just freezes and stops working.",
"sys_id": "8d6246c7c0a80164012fb063cecd4ace"
}
*** Script: {
"priority": 3,
"description": "Unable to login even though login credentials are correct.",
"sys_id": "a9e30c7dc61122760116894de7bcc7bd"
}
GlideQuery - max(文字列フィールド)
指定されたフィールドのアグリゲート最大値を返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| フィールド | 文字列 | 操作を実行するフィールド。 |
| タイプ | 説明 |
|---|---|
| オプション | 単一のレコードを操作するために使用されるオブジェクト。 |
この例は、指定されたフィールドの最大値、つまり最大の英数字値を返す方法を示しています。
var name = new global.GlideQuery('sys_user')
.max('last_name')
.orElse('');
gs.info(JSON.stringify(name));
出力:
"Zortman"
GlideQuery - min(文字列フィールド)
指定されたフィールドのアグリゲート最小値を返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| フィールド | 文字列 | 操作を実行するフィールド。 |
| タイプ | 説明 |
|---|---|
| オプション | 単一のレコードを操作するために使用されるオブジェクト。 |
この例は、指定されたフィールドの最小値、つまり英数字の最小値を返す方法を示しています。
var name = new global.GlideQuery('sys_user')
.min('last_name')
.orElse('');
gs.info(JSON.stringify(name));
出力:
"Abel"
GlideQuery - orderBy(文字列フィールド)
返された結果を指定されたフィールドの昇順で並べ替えます。
| 名前 | タイプ | 説明 |
|---|---|---|
| フィールド | 文字列 | 結果を昇順で並べ替えるカンマ区切りフィールド。 |
| タイプ | 説明 |
|---|---|
| GlideQuery | ビルド中のクエリオブジェクト。 |
この例では、結果をレコード番号の昇順で並べ替える方法を示します。
var query = new global.GlideQuery('incident')
.orderBy('number')
.limit(5)
.select('number', 'description') //Returns a stream of records wrapped in a Stream object.
.forEach(function (incident){ //Terminal method in the Stream class that executes the query and returns the result.
gs.info(JSON.stringify(incident, null, 2));
});
出力:
*** Script: {
"number": "INC0000001",
"description": "User can't access email on mail.company.com.",
"sys_id": "9c573169c611228700193229fff72400"
}
*** Script: {
"number": "INC0000002",
"description": "User can't get to any of his files on the file server.",
"sys_id": "9d385017c611228701d22104cc95c371"
}
*** Script: {
"number": "INC0000003",
"description": "I just moved from floor 2 to floor 3 and my laptop cannot connect to any wireless network.",
"sys_id": "e8caedcbc0a80164017df472f39eaed1"
}
*** Script: {
"number": "INC0000004",
"description": "User forgot their email password.",
"sys_id": "9d3c1197c611228701cd1d94bc32d76d"
}
*** Script: {
"number": "INC0000005",
"description": "CPU was 100% busy for more than 10 minutes",
"sys_id": "e8e875b0c0a80164009dc852b4d677d5"
}
GlideQuery - orderByDesc(String fieldOrAggregate, String field)
返された結果を指定されたフィールドの降順に並べ替えます。
| 名前 | タイプ | 説明 |
|---|---|---|
| フィールドまたは集計 | 文字列 | クエリーで aggregate() メソッドを使用しない場合は、結果を並べ替えるためのフィールドを渡します。 クエリで aggregate() メソッドを使用する場合は、実行するアグリゲーション関数のタイプを渡します。 次のオプションが含まれます。
|
| フィールド | 文字列 | オプション。結果を降順で並べ替えるフィールド。aggregate() メソッドを使用するクエリに必要です。 |
| タイプ | 説明 |
|---|---|
| GlideQuery | ビルド中のクエリオブジェクト。 |
この例では、結果を番号の降順で並べ替える方法を示します。
var query = new global.GlideQuery('incident')
.orderByDesc('number')
.limit(5)
.select('number', 'description') //Returns a stream of records wrapped in a Stream object.
.forEach(function (incident){ //Terminal method in the Stream class that executes the query and returns the result.
gs.info(JSON.stringify(incident, null, 2));
});
出力:
*** Script: {
"number": "INC0009009",
"description": "Unable to access the shared folder. Please provide access.",
"sys_id": "57af7aec73d423002728660c4cf6a71c"
}
*** Script: {
"number": "INC0009005",
"description": "Unable to send or receive emails.",
"sys_id": "ed92e8d173d023002728660c4cf6a7bc"
}
*** Script: {
"number": "INC0009004",
"description": "While launching the defect tracking base URL, it is redirecting to an error page.",
"sys_id": "e329de99731423002728660c4cf6a73c"
}
*** Script: {
"number": "INC0009003",
"description": "Having an issue with users trying to access the company portal app",
"sys_id": "9fffc328731823002728660c4cf6a742"
}
*** Script: {
"number": "INC0009002",
"description": "My computer is not detecting the headphone device. It could be an issue with the USB port.",
"sys_id": "1c832706732023002728660c4cf6a7b9"
}
この例では、子インシデントの合計で集計結果を並べ替える方法を示します。
var aggQuery = new GlideQuery('incident')
.aggregate('sum', 'child_incidents')
.groupBy('category')
.orderByDesc('sum', 'child_incidents')
.select()
.forEach(function (category){
gs.info(JSON.stringify(category, null, 2));
});
出力:
*** Script: {
"group": {
"category": "hardware"
},
"sum": {
"child_incidents": 2
}
}
*** Script: {
"group": {
"category": "inquiry"
},
"sum": {
"child_incidents": 1
}
}
*** Script: {
"group": {
"category": "software"
},
"sum": {
"child_incidents": 0
}
}
*** Script: {
"group": {
"category": ""
},
"sum": {
"child_incidents": null
}
}
*** Script: {
"group": {
"category": "database"
},
"sum": {
"child_incidents": null
}
}
*** Script: {
"group": {
"category": "network"
},
"sum": {
"child_incidents": null
}
}
GlideQuery - orWhere(文字列 fieldOrQuery, 文字列演算子, 任意の値)
指定された条件に基づいて値を返すクエリに OR 句を追加します。
| 名前 | タイプ | 説明 |
|---|---|---|
| fieldOrQuery | 文字列または GlideQuery | フィールドまたは where 節で使用される別の GlideQuery オブジェクト。フィールドを渡す場合は、目的の値にドット連結することができます。たとえば、「 company.name」です。 |
| オペレーター | 文字列 | オプション。OR 節で使用される演算子。引数を渡さない場合は、= 演算子が使用されます。プレースホルダー値を含める必要はありません。 |
| value | 任意 | OR 節で使用される値。 |
| タイプ | 説明 |
|---|---|
| GlideQuery | ビルド中のクエリオブジェクト。 |
この例では、単純な OR 節をクエリーに追加する方法を示します。
var query = new global.GlideQuery('sys_user')
.where('failed_attempts', '>', 0)
.orWhere('last_login', '<', '2019-04-15')
.select()
.forEach(function (user){
gs.info(JSON.stringify(user, null, 2));
});
出力:
*** Script: {
"sys_id": "005d500b536073005e0addeeff7b12f4"
}
*** Script: {
"sys_id": "d999e5fc77e72300454792718a10611d"
}
*** Script: {
"sys_id": "30ad318577ab2300454792718a10619e"
}
*** Script: {
"sys_id": "4ac73ecd738123002728660c4cf6a72c"
}
*** Script: {
"sys_id": "3883f4c0730123002728660c4cf6a754"
}
*** Script: {
"sys_id": "3988a3ca732023002728660c4cf6a757"
}
*** Script: {
"sys_id": "8ff5b254b33213005e3de13516a8dcf7"
}
この例では、個別のクエリーを含む orWhere 句を追加する方法を示します。
// active = true OR (title = 'Vice President' AND state = 'CA')
var query = new GlideQuery('sys_user')
.where('active', true)
.orWhere(new GlideQuery()
.where('title', 'Vice President')
.where('state', 'CA'))
.select('name')
.limit(5)
.forEach(function (user){
gs.info(JSON.stringify(user, null, 2));
});
出力:
*** Script: {
"name": "ITIL User",
"sys_id": "681b365ec0a80164000fb0b05854a0cd"
}
*** Script: {
"name": "SOAP Guest",
"sys_id": "155699460a0a0b2b009e27c10b7f68f6"
}
*** Script: {
"name": "System Administrator",
"sys_id": "6816f79cc0a8016401c5a33be04be441"
}
*** Script: {
"name": "Alva Pennigton",
"sys_id": "ca826bf03710200044e0bfc8bcbe5d89"
}
*** Script: {
"name": "Benchmark Scheduler",
"sys_id": "d3383a875b0132003d1c484c11f91a5b"
}
GlideQuery - orWhereNotNull(文字列フィールド)
指定されたフィールドに null 値を含まないレコードを返す OR 句を追加します。
| 名前 | タイプ | 説明 |
|---|---|---|
| フィールド | 文字列 | クエリで使用されるフィールド。 |
| タイプ | 説明 |
|---|---|
| GlideQuery | ビルド中のクエリオブジェクト。 |
この例では、ユーザーテーブルにクエリを実行し、姓と名が null でない結果を返す方法を示します。
var query = new global.GlideQuery('sys_user')
.whereNotNull('first_name')
.orWhereNotNull('last_name')
.select('name')
.limit(5)
.forEach(function (user){
gs.info(JSON.stringify(user, null, 2));
});
出力:
*** Script: {
"name": "ITIL User",
"sys_id": "681b365ec0a80164000fb0b05854a0cd"
}
*** Script: {
"name": "System Administrator",
"sys_id": "6816f79cc0a8016401c5a33be04be441"
}
*** Script: {
"name": "Alva Pennigton",
"sys_id": "ca826bf03710200044e0bfc8bcbe5d89"
}
*** Script: {
"name": "Benchmark Scheduler",
"sys_id": "d3383a875b0132003d1c484c11f91a5b"
}
*** Script: {
"name": "Allyson Gillispie",
"sys_id": "06826bf03710200044e0bfc8bcbe5d8a"
}
GlideQuery - orWhereNull(文字列フィールド)
指定されたフィールドに null 値を含むレコードを返すクエリに OR 句を追加します。
| 名前 | タイプ | 説明 |
|---|---|---|
| フィールド | 文字列 | クエリで使用されるフィールド。 |
| タイプ | 説明 |
|---|---|
| GlideQuery | ビルド中のクエリオブジェクト。 |
この例は、ユーザーテーブルにクエリを実行し、姓または名が null のレコードを返す方法を示しています。
var query = new global.GlideQuery('sys_user')
.whereNull('last_name')
.orWhereNull('first_name')
.select('first_name', 'last_name')
.forEach(function (user){
gs.info(JSON.stringify(user, null, 2));
});
出力:
*** Script: {
"first_name": "ml.admin",
"last_name": null,
"sys_id": "88aad6c5c73003005f1b78d48b9763a5"
}
*** Script: {
"first_name": "Sitemap Scheduler User",
"last_name": null,
"sys_id": "85388c25b71011104eed4643ae11a993"
}
*** Script: {
"first_name": null,
"last_name": "Guest",
"sys_id": "5136503cc611227c0183e96598c4f706"
}
*** Script: {
"first_name": "ml_report.user",
"last_name": null,
"sys_id": "b6bad6c5c73003005f1b78d48b97632a"
}
GlideQuery - parse(String table, String encoded_query )
エンコードされたクエリを新しい GlideQuery クエリに追加します。
このメソッドは、すべての GlideRecord エンコードクエリ演算子をサポートしているわけではありません。現在、次の演算子がサポートされています。
= |
ANYTHING |
GT_FIELD |
NOT IN |
!= |
次の間 |
GT_OR_EQUALS_FIELD |
好きではありません |
> |
次の値を含む |
IN |
NSAMEAS |
>= |
DOES NOT CONTAIN |
INSTANCEOF |
オン |
< |
動的 |
高評価 |
SAMEAS |
<= |
空文字列 |
LT_FIELD |
STARTSWITH |
ENDSWITH |
LT_OR_EQUALS_FIELD |
| 名前 | タイプ | 説明 |
|---|---|---|
| table | 文字列 | タスクやインシデントなど、クエリするテーブル。 |
| encoded_query | 文字列 | 指定されたテーブルのレコードに適用するエンコードされたクエリ。 |
| タイプ | 説明 |
|---|---|
| GlideQuery | エンコードされたクエリを含む GlideQuery オブジェクト。 |
次の例では、タスクテーブル内のすべてのアクティブなレコードを含む GlideQuery オブジェクトを優先度フィールド順に並べて作成し、説明フィールドのみを含むストリームオブジェクトとして返されます。
GlideQuery.parse('task', 'active=true^ORDERBYpriority') // Pass the encoded query to use to parse the Task records
.select('description') // Return the records that match the encoded query
.forEach(doSomething); // Do some processing on each of the returned records
GlideQuery - select(文字列フィールド)
クエリの結果を、指定されたフィールドを含むストリームオブジェクトとして返します。
フィールド名にフラグを追加すると、フィールドの値の代わりにフィールドのメタデータを返すことができます。たとえば、 フィールド名 company$DISPLAY を使用すると、会社フィールドの表示値が返されます。可能なフラグは次のとおりです。
DISPLAY:フィールドの表示値を返します。CURRENCY_CODE:通貨フィールドの通貨コードを返します。たとえば、USDです。CURRENCY_DISPLAY:通貨フィールドの通貨表示値を返します。例:¥123.45。CURRENCY_STRING:通貨フィールドの通貨文字列を返します。例:JPY。123.45.
| 名前 | タイプ | 説明 |
|---|---|---|
| フィールド | 文字列または文字列のアレイ | オプション。結果に表示するフィールド。任意の数のフィールドを引数として指定したり、目的の値にドット連結したり、フラグを使用したりすることができます。例: または
デフォルト:システムは常にsys_idを返します。 |
| タイプ | 説明 |
|---|---|
| ストリーム | レコードなどのアイテムのストリームを操作するために使用されるオブジェクト。 |
この例では、クエリから表示するフィールドを選択し、 $DISPLAY を使用してフィールドの表示値を返す方法を示します。
var stream = new global.GlideQuery('sys_user')
.select('first_name', 'last_name', 'company$DISPLAY')
.limit(5)
.forEach(function (user){
gs.info(JSON.stringify(user, null, 2));
});
出力:
*** Script: {
"first_name": "System",
"last_name": "Administrator",
"company$DISPLAY": "",
"sys_id": "6816f79cc0a8016401c5a33be04be441"
}
*** Script: {
"first_name": "Alva",
"last_name": "Pennigton",
"company$DISPLAY": "ACME North America",
"sys_id": "ca826bf03710200044e0bfc8bcbe5d89"
}
*** Script: {
"first_name": "Benchmark",
"last_name": "Scheduler",
"company$DISPLAY": "",
"sys_id": "d3383a875b0132003d1c484c11f91a5b"
}
*** Script: {
"first_name": "Allyson",
"last_name": "Gillispie",
"company$DISPLAY": "ACME North America",
"sys_id": "06826bf03710200044e0bfc8bcbe5d8a"
}
*** Script: {
"first_name": "SOAP",
"last_name": "Guest",
"company$DISPLAY": "",
"sys_id": "155699460a0a0b2b009e27c10b7f68f6"
}
GlideQuery - selectOne(文字列フィールド)
クエリの結果を、指定されたフィールドを含むオプションのオブジェクトとして返します。
このメソッドは、単一のレコードを返す場合、またはレコードが存在するかどうかをテストする場合に使用します。複数のレコードを返す場合は、 select() メソッドを使用して Stream オブジェクトを返します。
フィールド名にフラグを追加すると、フィールドの値の代わりにフィールドのメタデータを返すことができます。たとえば、 フィールド名 company$DISPLAY を使用すると、会社フィールドの表示値が返されます。可能なフラグは次のとおりです。
DISPLAY:フィールドの表示値を返します。CURRENCY_CODE:通貨フィールドの通貨コードを返します。たとえば、USDです。CURRENCY_DISPLAY:通貨フィールドの通貨表示値を返します。例:¥123.45。CURRENCY_STRING:通貨フィールドの通貨文字列を返します。例:JPY。123.45.
| 名前 | タイプ | 説明 |
|---|---|---|
| フィールド | 文字列または文字列のアレイ | オプション。結果に表示するフィールド。任意の数のフィールドを引数として指定したり、目的の値にドット連結したり、フラグを使用したりすることができます。例: または
デフォルト:システムは常にsys_idを返します。 |
| タイプ | 説明 |
|---|---|
| オプション | 単一のレコードを操作するために使用されるオブジェクト。 |
この例では、単一のレコードをオプションのオブジェクトとして返し、指定されたフィールドを表示する方法を示します。
var user = new global.GlideQuery('sys_user')
.where('zip', '12345')
.whereNotNull('last_name')
.selectOne('first_name', 'last_name', 'company$DISPLAY')
.get();
gs.info(JSON.stringify(user, null, 2));
出力:
{
"first_name":"Abel",
"last_name":"Tuter",
"company$DISPLAY":"ACME South America",
"sys_id":"62826bf03710200044e0bfc8bcbe5df1"
}
GlideQuery - sum(文字列フィールド)
指定された数値フィールドの集計を返します。
- 整数
- 長
- 浮動小数点数
- 倍精度
- 通貨
| 名前 | タイプ | 説明 |
|---|---|---|
| フィールド | 文字列 | 操作を実行するフィールド。 |
| タイプ | 説明 |
|---|---|
| オプション | 単一のレコードを操作するために使用されるオブジェクト。 |
この例では、cmdb_ciテーブル内のすべての障害の合計を返す方法を示します。
var totalFaults = new global.GlideQuery('cmdb_ci')
.sum('fault_count')
.orElse(0);
gs.info(JSON.stringify(totalFaults));
出力:
10
GlideQuery - toGlideRecord()
現在のクエリを表す GlideRecord オブジェクトを返します。クエリで GlideQuery.aggregate() メソッドを使用する場合は、GlideAggregrate オブジェクトを返します。
クエリを変換した後、GlideRecord クラスまたは GlideAggregate クラスの query() メソッドを使用してデータベースをクエリします。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| GlideRecord または GlideAggregate | クエリを含む GlideRecord オブジェクト。GlideQuery.aggregate() メソッドを使用した場合、このメソッドは代わりに GlideAggregrate オブジェクトを返します。 |
この例では、GlideQuery オブジェクトを GlideRecord に変換する方法を示します。
var userGr = new global.GlideQuery('sys_user')
.where('active', true)
.whereNotNull('first_name')
.limit(10)
.toGlideRecord();
userGr.query();
GlideQuery - update(Object changes, Object selectedFields)
定義された条件に一致する既存のレコードを更新します。
このメソッドを使用する前に、 where() メソッドを呼び出して、レコードを更新するために満たす必要がある条件を指定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| 変更 | オブジェクト | レコード内で更新する名前と値のペアを含むオブジェクト。名前はテーブル内のフィールドと一致する必要があります。 |
| selectedFields | アレイ | オプション。結果で返す追加フィールド。 デフォルト:システムは常にsys_idを返します。 |
| タイプ | 説明 |
|---|---|
| オプション | 単一のレコードを操作するために使用されるオブジェクト。 |
この例では、レコードを新しい値で更新する方法を示します。
var updateRecord = new global.GlideQuery('sys_user')
.where('sys_id', '0a826bf03710200044e0bfc8bcbe5d7a')
.update({ city: 'Los Angeles' });
GlideQuery - updateMultiple(オブジェクト変更)
定義された条件に一致する既存のすべてのレコードを更新します。更新されたレコードの数を返します。
このメソッドを使用する前に、 where() メソッドを呼び出して、レコードを更新するために満たす必要がある条件を指定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| 変更 | オブジェクト | レコード内で更新する名前と値のペアを含むオブジェクト。名前はテーブル内のフィールドと一致する必要があります。 |
| タイプ | 説明 |
|---|---|
| オブジェクト | 更新されたレコードの数を含むオブジェクト。キーは次のとおりです。
|
この例は、定義された基準に適合するレコードを更新する方法を示しています。
var update = new global.GlideQuery('sys_user')
.where('active', false)
.where('last_name', 'Griffey')
.updateMultiple({ active: true });
gs.info(JSON.stringify(update));
出力:
{"rowCount":1}
GlideQuery - where(文字列 fieldOrQuery, 文字列演算子, 任意の値)
指定された条件に基づいて値を返す Where 節をクエリに追加します。
| 名前 | タイプ | 説明 |
|---|---|---|
| fieldOrQuery | 文字列または GlideQuery | フィールドまたは where 節で使用される別の GlideQuery オブジェクト。フィールドを渡す場合は、目的の値にドット連結することができます。たとえば、「 company.name」です。 |
| オペレーター | 文字列 | オプション。where 節で使用される演算子。引数を渡さない場合は、= 演算子が使用されます。 |
| value | 任意 | where 節で使用される値。 |
| タイプ | 説明 |
|---|---|
| GlideQuery | ビルド中のクエリオブジェクト。 |
この例では、active が true で、ユーザーの最終ログインが指定された日付より後であるユーザーテーブルからレコードを返す方法を示します。
var query = new global.GlideQuery('sys_user')
.where('active', true)
.where('last_login', '>', '2018-01-01')
.limit(5)
.select()
.forEach(function (user){
gs.info(JSON.stringify(user, null, 2));
});
出力:
*** Script: {
"sys_id": "6816f79cc0a8016401c5a33be04be441"
}
*** Script: {
"sys_id": "005d500b536073005e0addeeff7b12f4"
}
*** Script: {
"sys_id": "d999e5fc77e72300454792718a10611d"
}
*** Script: {
"sys_id": "30ad318577ab2300454792718a10619e"
}
*** Script: {
"sys_id": "3883f4c0730123002728660c4cf6a754"
}
この例は、「アクティブ」が true で、優先度または重大度が 1 のインシデントテーブルからレコードを返す方法を示しています。
// active = true AND (priority = 1 OR severity = 1)
var query = new GlideQuery('incident')
.where('active', true)
.where(new GlideQuery()
.where('priority', 1)
.orWhere('severity', 1))
.limit(5)
.select()
.toArray(5)
gs.info(JSON.stringify(query, null, 2));
出力:
[
{
"sys_id":"b0f31e5673500010c2e7660c4cf6a711"
},
{
"sys_id":"8ff5b254b33213005e3de13516a8dcf7"
},
{
"sys_id":"d999e5fc77e72300454792718a10611d"
},
{
"sys_id":"30ad318577ab2300454792718a10619e"
},
{
"sys_id":"3883f4c0730123002728660c4cf6a754"
}
]
GlideQuery - whereNotNull(文字列フィールド)
指定されたフィールドに null 値を含まないレコードを返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| フィールド | 文字列 | クエリで使用されるフィールド。 |
| タイプ | 説明 |
|---|---|
| GlideQuery | ビルド中のクエリオブジェクト。 |
この例では、ユーザーテーブルにクエリを実行し、first_nameフィールドが null でない結果を返す方法を示します。
var query = new global.GlideQuery('sys_user')
.whereNotNull('first_name')
.select('name')
.limit(5)
.forEach(function (user){
gs.info(JSON.stringify(user, null, 2));
});
出力:
*** Script: {
"name": "System Administrator",
"sys_id": "6816f79cc0a8016401c5a33be04be441"
}
*** Script: {
"name": "Alva Pennigton",
"sys_id": "ca826bf03710200044e0bfc8bcbe5d89"
}
*** Script: {
"name": "Benchmark Scheduler",
"sys_id": "d3383a875b0132003d1c484c11f91a5b"
}
*** Script: {
"name": "Allyson Gillispie",
"sys_id": "06826bf03710200044e0bfc8bcbe5d8a"
}
*** Script: {
"name": "SOAP Guest",
"sys_id": "155699460a0a0b2b009e27c10b7f68f6"
}
GlideQuery - whereNull(文字列フィールド)
指定されたフィールドに null 値を含むレコードを返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| フィールド | 文字列 | クエリで使用されるフィールド。 |
| タイプ | 説明 |
|---|---|
| GlideQuery | ビルド中のクエリオブジェクト。 |
この例は、ユーザーテーブルにクエリを実行し、姓または名が null のレコードを返す方法を示しています。
var query = new global.GlideQuery('sys_user')
.whereNull('last_name')
.orWhereNull('first_name')
.select('first_name', 'last_name')
.forEach(function (user){
gs.info(JSON.stringify(user, null, 2));
});
出力:
*** Script: {
"first_name": "ml.admin",
"last_name": null,
"sys_id": "88aad6c5c73003005f1b78d48b9763a5"
}
*** Script: {
"first_name": "Sitemap Scheduler User",
"last_name": null,
"sys_id": "85388c25b71011104eed4643ae11a993"
}
*** Script: {
"first_name": null,
"last_name": "Guest",
"sys_id": "5136503cc611227c0183e96598c4f706"
}
*** Script: {
"first_name": "ml_report.user",
"last_name": null,
"sys_id": "b6bad6c5c73003005f1b78d48b97632a"
}
GlideQuery - withAcls()
GlideRecordSecure API を使用してクエリを実行し、ACL を遵守しながらデータベースを安全にクエリします。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| GlideQuery | ビルド中のクエリオブジェクト。 |
この例では、ACL を使用して安全なクエリーを実行する方法を示します。
var users = new global.GlideQuery('sys_user')
.withAcls()
.limit(5)
.orderByDesc('first_name')
.select('first_name')
.forEach(function (user){
gs.info(JSON.stringify(user, null, 2));
});
出力:
*** Script: {
"first_name": "Zane",
"sys_id": "16826bf03710200044e0bfc8bcbe5dbc"
}
*** Script: {
"first_name": "Zackary",
"sys_id": "8a826bf03710200044e0bfc8bcbe5d69"
}
*** Script: {
"first_name": "Yvette",
"sys_id": "4e826bf03710200044e0bfc8bcbe5d57"
}
*** Script: {
"first_name": "Winnie",
"sys_id": "f682abf03710200044e0bfc8bcbe5d1d"
}
*** Script: {
"first_name": "Wilmer",
"sys_id": "42826bf03710200044e0bfc8bcbe5d7b"
}