スクリプトでのテーブルのクエリ
GlideRecord API のメソッドを使用すると、テーブルからすべてのレコードを返したり、テーブルから特定の条件を満たすレコードを返したり、テキストインデックスグループ内の単一のテーブルまたは複数のテーブルから文字列を含むレコードを返したりできます。
GlideRecord API を使用してテーブルにクエリを実行します。API リファレンスについては、「GlideRecord - スコープ対象」を参照してください。
テーブルからすべてのレコードを返す
var target = new GlideRecord('incident');GlideRecord を作成すると、インシデントテーブルの GlideRecord オブジェクトである target 変数が作成されます。
target.query(); // Issue the query to the database to get all records
while (target.next()) {
// add code here to process the incident record
}このスクリプトは、データベースに query() を発行します。next() を呼び出すたびに、処理のために次のレコードがロードされます。
クエリ条件を満たすテーブルからレコードを返す
var target = new GlideRecord('incident');
target.addQuery('priority',1);
target.query(); // Issue the query to the database to get relevant records
while (target.next()) {
// add code here to process the incident record
}target.addQuery('priority', 1); が含まれていることに注目してください。この行は、priority フィールドが 1 に等しいレコードのみを要求していることを示しています。一般に、実行するクエリのほとんどは等価クエリです。つまり指定した値と等しいフィールドを持つレコードを検索するクエリです。そのため、等価演算子を指定する必要はありません。ただし、たとえば priority フィールドが 1 より大きいすべてのインシデントを検索するとします。この場合には、クエリに適用する演算子を指定します。var target = new GlideRecord('incident') ;
target.addQuery('priority','>',1);
target.query(); // Issue the query to the database to get relevant records
while (target.next()) {
// add code here to process the incident record
}テーブルから文字列を含むレコードを返す
予約名 '123TEXTQUERY321' を使用して、テーブルのすべてのフィールドで一致する文字列を検索します。たとえば、このスクリプトは、文字列 'email' を含むフィールド値を持つレコードをインシデントテーブルから返します。
var now_GR = new GlideRecord('incident');
gr.addQuery('123TEXTQUERY321', 'email');
gr.query();
'123TEXTQUERY321' は、addQuery() メソッドの name パラメーターの予約済みオプションです。このオプションは、エンコードされたクエリ文字列で使用できます。たとえば、gr.addQuery('123TEXTQUERY321', 'email'); の代わりに、gr.addEncodedQuery('123TEXTQUERY321=email') を使用できます。
文字列の検索では大文字と小文字が区別されません。email、Email、または EMAIL のいずれを検索しても、同じ結果が返されます。
テキストインデックスグループの複数のテーブルから文字列を含むレコードを返す
テキストインデックスグループのテーブル内の文字列を検索するには、'123TEXTINDEXGROUP321' 予約名を使用します。このオプションは、テキストインデックスグループの設定を使用して計算された関連性スコアの結果を返します。
var now_GR = new GlideRecord('kb_knowledge');
gr.addQuery('123TEXTQUERY321', 'email');
gr.addQuery('123TEXTINDEXGROUP321', 'portal');
gr.query();検索する「ポータル」インデックスグループ内の追加のテーブルごとに同様のクエリを作成し、個々のクエリの結果を結合して、関連性スコアが最も高い結果を最初に表示することができます。これらの検索クエリはすべて同じテキストインデックスグループ検索設定を使用するため、結果の関連性スコアはすべて一貫して正規化されます。gr.addQuery('123TEXTINDEXGROUP321', 'portal') メソッドを使用せずに同じテーブルセットを検索した場合、個々のクエリの関連性スコアは異なる方法で正規化され、結合された結果セットをソートするための基準として役立ちません。
'123TEXTINDEXGROUP321' は、addQuery() メソッドの name パラメーターの予約済みオプションです。このオプションは、エンコードされたクエリ文字列で使用できます。たとえば、gr.addQuery('123TEXTINDEXGROUP321', 'portal'); の代わりに、gr.addEncodedQuery('123TEXTINDEXGROUP321=portal') を使用できます。
複数のテーブルの文字列の検索では大文字と小文字が区別されません。email、Email、または EMAIL のいずれを検索しても、同じ結果が返されます。
使用可能な JavaScript 演算子
addQuery() 要求内で使用できる演算子について説明します。
| フィールド | 定義 | addQuery |
|---|---|---|
| = | フィールドは、指定された値と等しい必要があります。 | addQuery('priority', '=', 1); |
| > | フィールドは、指定された値より大きい必要があります。 | addQuery('priority', '>', 1); |
| < | フィールドは、指定された値より小さい必要があります。 | addQuery('priority', '<', 3); |
| >= | フィールドは、指定された値以上である必要があります。 | addQuery('priority', '>=', 1); |
| <= | フィールドは、指定された値以下である必要があります。 | addQuery('priority', '<=', 3); |
| != | フィールドは、指定された値と等しくなっていない必要があります。 | addQuery('priority', '!=', 1); |
| STARTSWITH | フィールドは、指定された値で始まる必要があります。右側の例は、short_description フィールドが「Error」というテキストで始まるすべてのレコードを返します。 | addQuery('short_description', 'STARTSWITH', 'Error'); |
| CONTAINS | フィールドは、テキストのどこかに、指定された値が含まれている必要があります。右側の例では、short_description フィールド内のどこかに「Error」というテキストが含まれているすべてのレコードが返されます。 注: LIKE 演算はサポートされていません。アドミニストレーターは、クエリで CONTAINS を使用する必要があります。 |
addQuery('short_description', 'CONTAINS', 'Error'); |
| IN | カンマを許可する値のマップを取得し、他の要件を満たすレコードのコレクションを収集します。Select * from <table> where short_description IN ('Error', 'Success', 'Failure') と同じように動作します。これは Select * from <table> where short_description='Error' と同じです。たとえば、特定のアクティビティに属するすべての変数値のクエリを実行するには、IN 節を使用して、その sys_id をマップまたはカンマ区切りリストに格納します。次に、変数値テーブルにクエリを実行し、この sys_id のリストを指定します。 |
addQuery('short_description', 'IN', 'Error,Success,Failure'); |
| ENDSWITH | フィールドは、指定された値で終了する必要があります。右側の例では、short_description フィールドが「Error」というテキストで終わるすべてのレコードを返します。 | addQuery('short_description', 'ENDSWITH', 'Error'); |
| DOES NOT CONTAIN | フィールドのパターンに一致しないレコードを選択します。この演算子は空のフィールドを取得しません。空の値の場合は、「is empty」または「is not empty」という演算子を使用します。右側の例では、short_description フィールドに「Error」という語が含まれていないすべてのレコードが返されます。 | addQuery('short_description', 'DOES NOT CONTAIN', 'Error'); |
| NOT IN | カンマを許可する値のマップを取得し、他の要件を満たすレコードのコレクションを収集します。次と同じように動作します。Select * from <table> where short_description NOT IN ('Error') |
addQuery('short_description', 'NOT IN', 'Error,Success,Failure'); |
| INSTANCEOF | 拡張テーブルの指定された「クラス」のレコードのみを取得する特殊な演算子。右側のコード例は、コンピューターとして分類されているすべての構成アイテムを取得する方法を示しています。 | addQuery('sys_class_name', 'INSTANCEOF', 'cmdb_ci_computer'); |
フィルターとクエリに使用できる演算子の詳細については、「Operators available for filters and queries」を参照してください。
var target = new GlideRecord('incident');
target.addNullQuery('short_description');
target.query(); // Issue the query to the database to get all records
while (target.next()) {
// add code here to process the incident record
}var target = new GlideRecord('incident');
target.addNotNullQuery('short_description');
target.query(); // Issue the query to the database to get all records
while (target.next()) {
// add code here to process the incident record
}GlideRecord API とその使用可能なメソッドの詳細については、「GlideRecord」を参照してください。
GlideRecord クエリの例
これらの例は、さまざまな GlideRecord クエリを実行する方法を示しています。
query
var rec = new GlideRecord('incident');
rec.query();
while(rec.next()) {
gs.print(rec.number + ' exists'); }
update
var rec = new GlideRecord('incident');
rec.addQuery('active',true);
rec.query();
while(rec.next()) {
rec.active = false;
gs.print('Active incident ' + rec.number = ' closed');
rec.update(); }
insert
var rec = new GlideRecord('incident');
rec.initialize();
rec.short_description = 'Network problem';
rec.caller_id.setDisplayValue('Joe Employee');
rec.insert();
delete
var rec = new GlideRecord('incident');
rec.addQuery('active',false);
rec.query();
while(rec.next()) {
gs.print('Inactive incident ' + rec.number + ' deleted');
rec.deleteRecord(); }
サービスカタログテーブルのクエリ
var now_GR = new GlideRecord('sc_item_option_mtom');
gr.addQuery('sc_item_option.item_option_new.name','item_name');
gr.addQuery('sc_item_option.value','item_value');
gr.query();
while(gr.next()) {
gs.addInfoMessage(gr.request_item.number); }詳細については、「GlideRecord」を参照してください。