GlideRecord - クライアント
GlideRecord API は、データベース操作を実行するメソッドを提供します。この API を使用すると、クライアントスクリプトや UI ポリシースクリプトなどのクライアント側スクリプトで一部の GlideRecord 機能を使用できます。
GlideRecord にはレコードとフィールドの両方が含まれます。クライアントサイドの GlideRecord メソッドで実行されるクエリーは、サーバーで実行されます。そのため、クライアントのブラウザーからレコードデータを取得する要求が行われます。
クライアント側の GlideRecord API はスコープ対象のアプリケーションではサポートされていません。代わりに、スクリプトインクルードを作成し、 GlideAJAX API または REST API を使用します。さらに、この API は、スクリプトを実行しているユーザーの認証情報に基づいてアクセス制御リスト (ACL) を適用します。ACL なしでサーバー上でコードを実行するには、 GlideAjax API を使用します。
クライアント側 GlideRecord - GlideRecord(文字列 tableName)
指定されたテーブルの GlideRecord クラスのインスタンスを作成します。
| 名前 | タイプ | 説明 |
|---|---|---|
| tableName | 文字列 | 使用されるテーブル。 |
var now_GR = new GlideRecord('incident');
クライアント側 GlideRecord - addOrderBy(文字列 column)
並べ替える列をクエリに追加します。
| 名前 | タイプ | 説明 |
|---|---|---|
| column | 文字列 | 結果セットを並べ替える列。 |
| タイプ | 説明 |
|---|---|
| なし |
クライアント側 GlideRecord - addQuery(文字列 name, オブジェクト value)
指定されたフィールド名が指定された値と等しい (または値のリスト内にある) レコードを返すクエリを追加します。
SQL に精通している場合、このメソッドは「where」句に似ています。このメソッドを複数回呼び出すことで、1 つのフィルターに対して 1 つ以上のクエリを作成できます。このメソッドでは、クエリは AND 化されます。目的のクエリをすべて定義したら、クライアント側 GlideRecord - query(文字列 name, 関数 responseFunction, 文字列 value) を呼び出して指定されたクエリ句 (フィルター) を実行します。
AND 以外の操作を実行するには、addQuery(文字列 name, オブジェクト operator, オブジェクト value) メソッドまたは setEncodedQuery() メソッドのいずれかを使用します。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | チェックするフィールドの名前。 |
| value | オブジェクト | クエリする値または値のリスト。 |
| タイプ | 説明 |
|---|---|
| なし |
複数のクエリを示す例。
var now_GR = new GlideRecord('incident');
now_GR.addQuery('priority', 4); // Priority is 4 – Low and,
now_GR.addQuery('state', 3); // State is On Hold
now_GR.query(response);
function response(result) {
while(result.next()) {
// Print all INC with priority 4 – Low AND state is On Hold
console.log(result.getValue('number'));
}
}
文字列オブジェクトを渡す方法を示す例。
var now_GR = new GlideRecord('incident');
now_GR.addQuery('short_description', new String('USB device not working')); // string object
now_GR.addQuery('priority', 4); //number
now_GR.query(response);
function response(result) {
while(result.next()) {
// Print all INC with priority 4 – Low AND short description contains 'USB device not working'
console.log(result.getValue('number'));
}
}
クライアント側 GlideRecord - addQuery(文字列 name, オブジェクト operator, オブジェクト value)
フィールドが指定された条件 (field、operator、value) を満たすレコードを返すフィルターを追加します。
SQL に精通している場合、このメソッドは「where」句に似ています。このメソッドを複数回呼び出すことで、1 つのフィルターに対して 1 つ以上のクエリを作成できます。目的のクエリをすべて定義したら、クライアント側 GlideRecord - query(文字列 name, 関数 responseFunction, 文字列 value) を呼び出して指定されたクエリ句 (フィルター) を実行します。
より複雑なクエリを作成するには、setEncodedQuery() メソッドを使用します。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | チェックするフィールドの名前。 |
| operator | オブジェクト | クエリ演算子。使用可能な値は、value パラメーターのデータタイプによって異なります。 数値:
文字列 (大文字である必要があります):
注: LIKE 演算子は使用しないでください。代わりに CONTAINS を使用してください。 |
| 値 | オブジェクト | クエリ対象の値 (大文字と小文字は区別されません)。 |
| タイプ | 説明 |
|---|---|
| なし |
複数のクエリをフィルターに追加する方法を示す例。
var now_GR = new GlideRecord('incident');
now_GR.addQuery('priority', '<=', 2); // Priority is 2 or higher and,
now_GR.addQuery('short_description', 'CONTAINS', 'crash'); // Short description contains the word crash
now_GR.query(response);
function response(result) {
while(result.next()) {
// Print all INC with priority of 2 or higher AND short description contains "crash"
console.log(result.getValue('number'));
}
}
アレイを渡して単一のクエリで複数の条件を検証する方法を示す例。
var priorities = [4,2];
var now_GR = new GlideRecord('incident');
now_GR.addQuery('priority', 'IN', priorities);
now_GR.query(response);
function response(result) {
while(result.next()) {
console.log(result.getValue('number'));
}
}
クライアント側 GlideRecord - deleteRecord(関数 responseFunction)
現在のレコードを削除し、完了時に指定された応答関数を呼び出します。
| 名前 | タイプ | 説明 |
|---|---|---|
| responseFunction | 関数 | コールバックの応答関数。 |
| タイプ | 説明 |
|---|---|
| なし |
この例では、レコードを削除してから、応答関数 response を呼び出してアラートメッセージを記録します。
var recordGR = new GlideRecord('incident');
if (recordGR.get('99ebb4156fa831005be8883e6b3ee4b9')) {
recordGR.deleteRecord(response);
}
function response(result) {
alert('Deleted record sys_id: ' + result.getValue('sys_id'));
}
出力:
Deleted record sys_id: 99ebb4156fa831005be8883e6b3ee4b9
クライアント側 GlideRecord - get(文字列 sys_id)
指定された sys_id を持つレコードの GlideRecord クエリを実行します。このメソッドは単一のレコードのクエリに使用されることが想定されているため、返される前に次の操作が実行されます。
| 名前 | タイプ | 説明 |
|---|---|---|
| sys_id | 文字列 | 検索するレコードの sys_id。 |
| タイプ | 説明 |
|---|---|
| ブーリアン | 一致するレコードが 1 つ以上見つかった場合は true。レコードが見つからない場合は false。 |
クライアント側 GlideRecord - getEncodedQuery()
現在の結果セットのクエリ条件をエンコードされたクエリ文字列として取得します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| 文字列 | クエリに追加されたすべての条件を含むエンコードクエリ文字列。 |
クライアント側 GlideRecord - getLimit()
GlideRecord クエリによって返されるレコードの制限を返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| 数値 | GlideRecord クエリによって返されるレコードの制限。 |
クライアント側 GlideRecord - getTableName()
この GlideRecord に関連付けられたテーブル名を取得します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| 文字列 | テーブル名 |
var item = new GlideRecord('sc_request');
item.addQuery('sys_id', current.request);
item.query(itemResponse);
function itemResponse(item) {
alert('The table is ' + item.getTableName());
}
クライアント側 GlideRecord - hasNext()
GlideRecord にまだレコードがあるかどうかを判断します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| ブーリアン | クエリセットにさらにレコードがある場合は true。 |
クライアント側 GlideRecord - insert(関数 responseFunction)
現在のレコードに設定されているフィールド値を使用して、新しいレコードを挿入します。
| 名前 | タイプ | 説明 |
|---|---|---|
| responseFunction | 関数 | レコードが挿入されたときに 1 回実行する関数。 |
| タイプ | 説明 |
|---|---|
| 文字列 | 挿入されたレコードの sys_id。レコードが挿入されなかった場合は null。 |
var now_GR = new GlideRecord('incident');
now_GR.short_description = 'Learn about GlideRecord';
var recResponse = now_GR.insert(handleResponse);
function handleResponse(recResponse, answer) {
// Answer will be the sys_id of the created record or null
alert('Newly created sys_id is - ' + answer + ' exists');
}
クライアント側 GlideRecord - next()
GlideRecord の次のレコードに移動します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| ブーリアン | クエリセットにレコードがない場合は false。 |
var rec = new GlideRecord('incident');
rec.query(recResponse);
function recResponse(rec) {
while (rec.next()) {
alert(rec.number + ' exists');
}
}
クライアント側 GlideRecord - orderBy(文字列 column)
orderBy 列を指定します。複数の列で並べ替えるために複数回呼び出される場合があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| column | 文字列 | 結果セットを並べ替えるために使用される列名。 |
| タイプ | 説明 |
|---|---|
| なし |
function UpdateProjectWBS(project) {
var count = 0;
var child = new GlideRecord('pm_project_task');
child.addQuery('parent', project.sys_id);
child.orderBy('order');
child.orderBy('number');
child.query(childResponse);
g_form.addInfoMessage(count + ' Project Tasks updated');
}
function childResponse(child) {
var len = child.getRowCount().toString().length;
var seq = 0;
while (child.next()) {
count += UpdateProjectTaskWBS(child, 1, ++seq, len, '');
}
}
クライアント側 GlideRecord - query(文字列 name, 関数 responseFunction, 文字列 value)
addQuery() フィルターに基づいて、テーブルに対してサーバーへのクエリを実行します。このメソッドは、GlideRecord テーブルおよびそのテーブルの参照に対してクエリを実行します。
同期クエリ呼び出しを行わないでください。応答関数なしでクエリを実行すると、呼び出しが同期されるため、表示はクエリの応答を待ってから続行します。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | オプション。クエリするフィールドの名前。 |
| responseFunction | 関数 | クエリ結果が利用可能になったときに呼び出される関数。 |
| value | 文字列 | オプション。クエリするフィールド値。リテラルの任意のペアは、クエリのペア (フィールド:値) と見なされます。 |
| タイプ | 説明 |
|---|---|
| なし |
応答関数を使用した基本的な例を次に示します。
var rec = new GlideRecord('incident');
rec.query(recResponse);
function recResponse(rec) {
while (rec.next()) {
alert(rec.number + ' exists');
}
}
次の例は、非同期の例による、同期構文と非同期構文の違いを示しています。
// synchronous call syntax (no response function): DO NOT USE
query();
// asynchronous call syntax
// performs query with current conditions, calls responseFunction when done
query(responseFunction)
// synchronous call syntax (no response function): DO NOT USE
// adds "category=hardware" to current query conditions and performs query
query('category', 'hardware')
// asynchronous call syntax
// adds "category=hardware" to current query conditions, performs query, and calls responseFunction when done
query('category', 'hardware', responseFunction)
// asynchronous call example
// adds "user_name=abel.tuter" to current query conditions, performs query, and calls defined response function when done
function onLoad() {
var now_GR = new GlideRecord("sys_user");
now_GR.query("user_name", "abel.tuter", function(now_GR) {
if (now_GR.next()) {
alert("You can access fields by name from the client API, just like in the server API:\n now_GR.name = " + now_GR.name);
alert("You can also access fields using getValue():\n now_GR.getValue(\"email\") = " + now_GR.getValue("email"));
if (now_GR.getDisplayValue) {
alert("In Service Portal, Mobile, and Agent Workspace, you can access a field's display value:\n now_GR.getDisplayValue(\"company\") = " + now_GR.getDisplayValue("company"));
} else {
alert("On the desktop, you cannot access a field's display value, but can get its sys_id:\n now_GR.company = " + now_GR.company);
}
alert("You cannot dot-walk in the client API:\n now_GR.company.name = " + now_GR.company.name);
}
});
}
クライアント側 GlideRecord - setEncodedQuery(文字列 encodedQuery)
指定されたエンコードクエリ文字列を現在のクエリ句に追加します。
このメソッドを使用すると、他のクライアント側の addQuery() メソッドとは異なり、単一のクエリ呼び出しで複雑なフィルター (エンコードクエリ文字列) を指定できます。目的のクエリをすべて定義したら、クライアント側 GlideRecord - query(文字列 name, 関数 responseFunction, 文字列 value) を呼び出して指定されたクエリ句 (フィルター) を実行します。エンコードされたクエリ文字列の詳細については、「 エンコードされたクエリ文字列」を参照してください。
query() メソッドを呼び出す前にこのメソッドを複数回呼び出すと、クエリは AND 化されます。
| 名前 | タイプ | 説明 |
|---|---|---|
| encodedQuery | 文字列 | 現在のクエリ句に追加するエンコードクエリ文字列。 |
| タイプ | 説明 |
|---|---|
| なし |
var now_GR = new GlideRecord('incident');
now_GR.setEncodedQuery('priority=4^ORstate=3');
now_GR.query(response);
function response(result) {
while(result.next()) {
console.log(result.getValue('number'));
}
}
クライアント側 GlideRecord - setLimit(数値 maxQuery)
GlideRecord 内のレコード数の制限を設定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| maxQuery | 数値 | 取得するレコード数の制限。 |
| タイプ | 説明 |
|---|---|
| なし |