HistoryWalker - スコープ指定、グローバル
HistoryWalker API は、監査/履歴テーブルを使用して既存のレコードの履歴バージョンを生成します。
この API は、GlideRecord を、適切な GlideElement が設定された以前の更新回数 (これまでの GlideRecord) に戻す機能をサポートしています。これまでの GlideRecord の取得後、API を使用して、その履歴更新内を移動して更新番号を前後に移動することができます。
sn_hw 名前空間識別子を使用します。HistoryWalker API にアクセスするには、デフォルトで有効になっている History Walker プラグイン (com.glide.history_walker) が必要です。- 履歴セットの使用:ウォークスルーするレコードのシステム監査 [sys_audit] テーブルのデータから履歴セットエントリーが作成されます (エントリーが利用できない場合または最新でない場合)。履歴セットテーブルには、発生したフィールド値に加えた実際の変更を含めたレコード (履歴ライン) が含まれます。HistoryWalker API のメソッドは、sys_audit テーブルをクエリーするのではなく、生成された履歴ラインから履歴データを取得します。
- システム監査テーブルの使用:この場合、HistoryWalker API は sys_audit テーブルを直接クエリーしてデータを抽出します。
デフォルトでは、これまでのレコードの changes()、changesFrom()、および changesTo() メソッドに対応するデータを入力するほか、レコードおよびフィールドレベルのセキュリティを提供します。さらに、更新を行っていく過程で、通過した GlideRecord にジャーナルフィールドと変数を入力することもできます。
この API を使用すると、次のことができます。
- 適切な履歴/監査データを適用して、既存の GlideRecord を特定の更新回数の状態に戻します。
- sys_history_set テーブルや sys_history_line テーブルの代わりに sys_audit テーブルを使用してデータを取得するように、HistoryWalker API に命令します。
- 行レベルのアクセス制御をオフにします。
- フィールドレベルのアクセス制御をオフにします。
- 「変更」データの取得と処理をオフにします。
- ジャーナルフィールドを有効にします。
- 変数を有効にします。
HistoryWalker - HistoryWalker(文字列 tableName, 文字列 sysId)
履歴データを取得するための履歴セットを使用して、パラメーターに基づいてデータベースレコードをフェッチします。
| 名前 | タイプ | 説明 |
|---|---|---|
| tableName | 文字列 | 取得するレコードを含むテーブルの名前。 |
| sydId | 文字列 | 取得するレコードの sys_id。 |
例:
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
if (hw.walkTo(3)) {
var oldPriority = hw.getWalkedRecord().priority;
gs.info('Incident priority in update number ' + hw.getUpdateNumber() + ' was ' + oldPriority);
} else
gs.info('Incident does not have update number 3');
出力:
Incident priority in update number 3 was 4
HistoryWalker - HistoryWalker(文字列 tableName, 文字列 sysId, ブーリアン useAudit)
履歴データを取得するための履歴セットまたは監査データ (3 つ目のパラメーターによって異なる) を使用して、パラメーターに基づいてデータベースレコードをフェッチします。
| 名前 | タイプ | 説明 |
|---|---|---|
| tableName | 文字列 | 取得するレコードを含むテーブルの名前。 |
| sydId | 文字列 | 取得するレコードの sys_id。 |
| useAudit | ブーリアン |
|
例
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue(), true);
if (hw.walkTo(3)) {
var oldPriority = hw.getWalkedRecord().priority;
gs.info('Incident priority in update number ' + hw.getUpdateNumber() + ' was ' + oldPriority);
} else
gs.info('Incident does not have update number 3');
出力:
Incident priority in update number 3 was 4
HistoryWalker - getUpdateNumber()
現在までに通過してきた Glide レコードの更新番号を取得します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| int | 現在の更新番号。レコードが見つからない場合は -1 |
例:
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
hw.walkTo(3);
gs.info('Update number: ' + hw.getUpdateNumber());
出力:
Update number: 3
HistoryWalker - getWalkedRecord()
更新番号に移動してから履歴データや監査データが入力されたレコードを取得します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| GlideRecord | これまでの GlideRecord。 |
例:
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
hw.walkTo(0);
var walkedRecord = hw.getWalkedRecord();
gs.info('Priority in update number 0: ' + walkedRecord.priority);
hw.walkTo(1);
walkedRecord = hw.getWalkedRecord();
gs.info('Short description in update number 1: ' + walkedRecord.short_description);
出力:
Priority in update number 0: 4
Short description in update number 1: My monitor has stopped working
HistoryWalker - getWalkedRecordCopy()
更新番号に移動してから履歴データや監査データが入力されたレコードのコピーを返します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| GlideRecord | これまでの GlideRecord のコピー。 |
例:
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var walkedRecord = [];
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
hw.walkTo(0);
walkedRecord[0] = hw.getWalkedRecordCopy();
hw.walkTo(1);
walkedRecord[1] = hw.getWalkedRecordCopy();
gs.info('Priority in update number 0: ' + walkedRecord[0].priority);
gs.info('Short description in update number 1: ' + walkedRecord[1].short_description);
出力:
Priority in update number 0: 4
Short description in update number 1: My monitor has stopped working
HistoryWalker - isFieldLevelSecurity()
データベースからの取得時にレコードレベルの読み取りアクセスを適用するかどうかを指定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| ブーリアン | フィールドレベルのセキュリティが有効であれば true を返し、そうでない場合は false を返します。 |
例:
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
gs.info('Field level security is active: ' + hw.isFieldLevelSecurity());
出力:
Field level security is active: true
HistoryWalker - isRecordLevelSecurity()
データベースからの取得時にレコードレベルの読み取りアクセスを適用するかどうかを指定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| ブーリアン | レコードレベルのセキュリティが有効であれば true を返し、そうでない場合は false を返します。 |
例:
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
gs.info('Record level security is active: ' + hw.isRecordLevelSecurity());
出力:
Record level security is active: true
HistoryWalker - isWithChanges()
ある更新から別の更新へとレコードを通過するメソッドが、各要素の「変更」データをサポートするかどうかを指定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| ブーリアン | 変更のサポートが有効であれば true を返し、そうでない場合は false を返します。 |
例:
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
gs.info('Changes is active: ' + hw.isWithChanges());
出力:
Changes is active: true
HistoryWalker - isWithJournalFields()
ジャーナルタイプフィールドを過去の値から設定するかどうかを指定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| ブーリアン | ジャーナルフィールドが設定されている場合は true を返し、そうでない場合は false を返します。 |
例:
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
gs.info('Populating journal fields is active: ' + hw. isWithJournalFields());
出力:
Populating journal fields is active: false
HistoryWalker - isWithVariables()
履歴に記録される変数に値を設定するかどうかを指定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| ブーリアン | 変数の値を含める場合は true を返し、そうでない場合は false を返します。 |
例:
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
gs.info('Populating variables is active: ' + hw. isWithVariables());
出力:
Populating variables is active: false
HistoryWalker - setFieldLevelSecurity(ブーリアン fieldLevelSecurity)
GlideRecord でその要素の過去の値を設定する前に、各要素にフィールドレベルの読み取りアクセス権を設定します。フィールドレベルのセキュリティを有効にすると、API のユーザーがアクセスできない過去のレコードのフィールドが API で入力されなくなります。
| 名前 | タイプ | 説明 |
|---|---|---|
| fieldLevelSecurity | ブーリアン | true に設定すると、フィールドレベルのセキュリティが有効になります。デフォルト値は true です。 |
| タイプ | 説明 |
|---|---|
| なし |
例:
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
hw.setFieldLevelSecurity(false);
hw.walkTo(0);
HistoryWalker - setRecordLevelSecurity(ブーリアン recordLevelSecurity)
データベースからの取得時の、レコードにおけるレコードレベルの読み取りアクセスを設定します。レコードレベルのセキュリティにより、API のユーザーが GlideRecord にアクセスできない場合、API は過去のレコードを取得できません。
| 名前 | タイプ | 説明 |
|---|---|---|
| recordLevelSecurity | ブーリアン | true に設定すると、レコードレベルの読み取りアクセスのセキュリティが有効になります。デフォルト値は true です。 |
| タイプ | 説明 |
|---|---|
| なし |
例:
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
hw.setRecordLevelSecurity(false);
hw.walkTo(0);
HistoryWalker - setWithChanges(ブーリアン withChanges)
ある更新から別の更新へとレコードを通過するメソッドの各要素の「変更」データサポートを設定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| withChanges | ブーリアン | 変更データが各要素でサポートされているかどうかを示すフラグ。 有効な値:
デフォルト:true |
| タイプ | 説明 |
|---|---|
| なし |
このコード例は、変更データをサポートするこのメソッドを呼び出す方法を示しています。この例は、グローバルスコープで実行する必要があります。
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
hw.walkTo(0);
do {
printChangedFields(hw);
} while (hw.walkForward());
function printChangedFields(hw) {
var walkedGr = hw.getWalkedRecord();
var fields = GlideScriptRecordUtil.get(walkedGr).getChangedFieldNames();
gs.info("Fields changed at update " + hw.getUpdateNumber() + " were:");
for (var j = 0; j < fields.size(); j++)
gs.info(" " + fields.get(j));
gs.info("");
}
このコード例は、変更データのサポートなしでこのメソッドを呼び出す方法を示しています。この例は、スコープ指定された環境とグローバル環境の両方で実行されます。
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
hw.setWithChanges(false);
hw.walkTo(0);
do {
var oldPriority = hw.getWalkedRecord().priority;
gs.info('Incident priority in update number ' + hw.getUpdateNumber() + ' was ' + oldPriority);
} while (hw.walkForward());
HistoryWalker - setWithJournalFields(ブーリアン withJournalFields)
ジャーナルタイプフィールドを過去の値から設定するかどうかを指定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| withJournalFields | ブーリアン | true に設定すると、ジャーナルタイプのフィールドが含まれます。デフォルト値は false です。 |
| タイプ | 説明 |
|---|---|
| なし |
例:
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
hw.setWithJournalFields(true);
if (hw.walkTo(0)) {
var workNotes = hw.getWalkedRecord().work_notes;
gs.info('Work Notes in update number ' + hw.getUpdateNumber() + ' was ' + workNotes);
}
HistoryWalker - setWithVariables(ブーリアン withVariables)
変数を過去の値から入力するかどうかを指定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| withVariables | ブーリアン | true に設定すると、変数に値が入力されます。デフォルト値は false です。 |
| タイプ | 説明 |
|---|---|
| なし |
例:
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
hw.setWithVariables(true);
hw.walkTo(0);
if (hw.walkTo(0)) {
var varUrgency = hw.getWalkedRecord().variables.urgency;
gs.info('Variable Urgency in update number ' + hw.getUpdateNumber() + ' was ' + varUrgency);
}
HistoryWalker - walkBackward()
適切な履歴データや監査データを適用して、過去の GlideRecord を 1 つ前の更新番号の状態に戻します。1 つ前の更新番号が履歴データや監査データにない場合は、前の利用可能な更新番号に戻ります。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| ブーリアン | 指定された更新番号に戻ることが可能であった場合は true を返します。そうでない場合 (すでに更新番号 0 に移動している場合など) は false を返します。 |
例:
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
hw.walkTo(incGr.sys_mod_count);
do {
var oldPriority = hw.getWalkedRecord().priority;
gs.info('Incident priority in update number ' + hw.getUpdateNumber() + ' was ' + oldPriority);
} while (hw.walkBackward())
出力:
Incident priority in update number 5 was 2
Incident priority in update number 4 was 4
Incident priority in update number 3 was 4
Incident priority in update number 2 was 4
Incident priority in update number 1 was 4
Incident priority in update number 0 was 4
HistoryWalker - walkForward()
適切な履歴データや監査データを適用して、過去の GlideRecord を 1 つ後の更新番号の状態に進めます。次の更新番号が履歴データや監査データにない場合は、次の利用可能な更新番号に進みます。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| ブーリアン | 指定された更新番号に戻ることが可能であった場合は true を返します。そうでない場合 (すでに当該の GlideRecord 更新番号に移動している場合など) は false を返します。 |
例:
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
hw.walkTo(0);
do {
var oldPriority = hw.getWalkedRecord().priority;
gs.info('Incident priority in update number ' + hw.getUpdateNumber() + ' was ' + oldPriority);
} while (hw.walkForward())
出力:
Incident priority in update number 0 was 4
Incident priority in update number 1 was 4
Incident priority in update number 2 was 4
Incident priority in update number 3 was 4
Incident priority in update number 4 was 4
Incident priority in update number 5 was 2
HistoryWalker - walkTo(int updateCount)
適切な履歴データや監査データを適用して、GlideRecord を特定の更新回数の状態に戻します。「過去の」GlideRecord を取得するには、更新番号に移動した後に getWalkedRecord() または getWalkedRecordCopy() を使用します。
| 名前 | タイプ | 説明 |
|---|---|---|
| updateCount | 整数 | 移動先の更新番号。 |
| タイプ | 説明 |
|---|---|
| ブーリアン | 指定された更新番号への移動が可能であった場合は true、そうでない場合 (要求された更新が GlideRecord の更新回数より多い場合や、要求された更新番号の履歴/監査データがない場合など) は false |
例:
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
if (hw.walkTo(3)) {
var oldPriority = hw.getWalkedRecord().priority;
gs.info('Incident priority in update number ' + hw.getUpdateNumber() + ' was ' + oldPriority);
} else
gs.info('Incident does not have update number 3');
出力:
Incident priority in update number 3 was 4