HistoryWalker - スコープ指定、グローバル
HistoryWalker API は、監査/履歴テーブルを使用して既存のレコードの履歴バージョンを生成します。この履歴バージョンには、指定された Glide レコードのすべてのフィールドに対するすべての更新が含まれています。
この API は、適切な Glide 要素が入力された以前の更新カウント (ウォークした GlideRecord) に GlideRecord を返す機能を提供します。ウォークされた GlideRecord が取得された後、API は更新番号間を前後に移動し、更新履歴をナビゲートする機能を提供します。
この API を使用すると、次のことができます。
- 特定の History Walker 実装を使用して監査データを取得するように HistoryWalker API に指示します。
- Glide レコードの履歴バージョンをナビゲートします。
- 適切な履歴/監査データを適用して、既存の GlideRecord を特定の更新回数の状態に戻します。
- 行レベルのアクセス制御をオフにします。
- フィールドレベルのアクセス制御をオフにします。
- 「変更」データの取得と処理をオフにします。
- ジャーナルフィールドを有効にします。
- 変数を有効にします。
HistoryWalker API には、監査データを取得する 4 つの方法が用意されています。
- HISTORY - ヒストリーウォーカー
利用できない場合、または最新でない場合は、Sys Audit [sys_audit] テーブルのデータを使用して、 HistoryWalker API をインスタンス化するときに渡した Glide レコードの履歴セット [sys_history_set] レコードを作成します。sys_history_setテーブルには、関連する履歴 [sys_history_line] テーブルの名前が含まれています。sys_history_lineテーブルには、ウォーク対象のテーブルで更新された各フィールド値のレコードが含まれています。この取得メソッドを使用すると、 HistoryWalker メソッドは、sys_audit テーブルを直接照会する代わりに、生成されたsys_history_lineテーブルから履歴データを取得します。
sys_history_lineテーブル内のレコードは、時系列ではなく、更新 [update] フィールド値の昇順でソートおよびグループ化されます。update フィールドは、task テーブルの Updates [sys_mod_count] フィールドに緩やかに関連付けられています。注:クライアントによるsys_mod_countの更新は同期されないため、上書きされる可能性があり、このカウントの信頼性が低下します。 - AUDIT:監査ウォーカー
HistoryWalker API をインスタンス化するときに渡された Glide レコードをsys_auditテーブルに照会します。sys_auditテーブルの各レコードには、レコードの有効期間中に発生したフィールド値への変更が含まれています。
レコードは、時系列ではなく、更新数 [record_checkpoint] フィールドの昇順でソートされます。record_checkpoint フィールドは、タスクテーブルの Updates [sys_mod_count] フィールドに緩やかに関連付けられています。1 対 1 の相関関係は保証されません。
AUDIT 検索方式を使用するかどうかを決定する際に考慮すべき事項:- sys_auditテーブルのサイズ。すべてのレコードのすべてのフィールドの変更がこのテーブルで維持されるため、sys_auditテーブルが非常に大きくなる可能性があります。
- システムプロパティ glide.sys.audit_insertsの設定によっては、ゼロレコードの更新が欠如している可能性があります。このプロパティは、レコードが最初にテーブルに挿入されたときに、監査レコードを初期フィールド値で作成するかどうかを定義します。ベースシステムでは、このプロパティは「false」に設定されているため、 HistoryWalker API は、この不足している情報に対応するために追加の処理を行います。
- CHECKPOINT - チェックポイント・ウォーカー
ハイブリッドアプローチを使用して、システムプロパティ com.glide.history_walker.max_history_countの設定に応じて、sys_history_setテーブルまたはsys_auditテーブルから履歴データを取得します。ウォークするレコードのsys_mod_countがこのプロパティで設定された値 (デフォルト値 = 1,000) を超える場合、チェックポイント・ウォーカーはsys_auditテーブルを使用して履歴データを取得します。それ以外の場合は、sys_history_setテーブルが使用されます。
このチェックを行う理由は、sys_history_setテーブルの方がウォーク履歴データに対してよりパフォーマンスの高いアプローチを提供するためですが、特定のポイントまでしか提供されません。フィールド更新の合計数が特定のレベル (約 10,0000) に達すると、sys_history_setテーブルの生成がユーザートランザクションタイムアウトを超える可能性があります。タイムアウトを超えると、すべてのテーブル更新を含むsys_auditテーブルに対して実行するよりも、全体的なパフォーマンスが低下します。チェックポイント・ウォーカーは、 com.glide.history_walker.max_history_count を使用して、最高のパフォーマンスを実現するために使用する最適なレコード・セットを決定します。
レコードはグループ化され、[レコード内部チェックポイント [internal_checkpoint] フィールドの昇順でソートされます。internal_checkpointフィールドはタイムスタンプであるため、レコードは時系列順になっています。また、internal_checkpoint フィールドは task.sys_mod_count フィールドに関連付けられていません。
チェックポイント・ウォーカーと他のウォーカーの最も重要な違いは、他のウォーカーがtask.sys_mod_countエントリに結合され、sys_audit.record_checkpointとsys_history_line.updateに関連していることです。チェックポイント・ウォーカーは、それぞれ sys_audit.internal_checkpoint フィールドと sys_history_line.internal_checkpoint フィールドを使用します。
レコード内部チェックポイントは、これらの問題の両方に対処するため、チェックポイント・ウォーカーは監査履歴データを取得するための最も信頼性の高い方法です。
- OFFLINE - オフライン履歴ウォーカー
Field Service Mobile オフライン アプリなどのアプリケーションで使用されるオフライン履歴機能を提供します。タスクテーブル拡張に辞書属性offline_timestamp_field設定されたフィールドがある場合、オフライン履歴ウォーカーは、プロパティまたは別のウォーカーを使用するための明示的な指示に関係なく実行されます。オフライン・ヒストリー・ウォーカーは、意図的に日付と時刻で並べられたヒストリー・データを含むsys_history_lineおよびsys_history_set・テーブルを使用して、オフライン更新をサポートします。このようなテーブルに対して正確な結果を提供できるのは、オフライン履歴ウォーカーだけです。
注:オフライン更新の場合、 HistoryWalker API は自動的に開始され、使用できるメソッドは walkTo(0) と walkForward() の 2 つだけです。オフライン更新のために他の HistoryWalker メソッドを呼び出すことはできません。
システムプロパティ com.snc.walker.default 、 HistoryWalker API をインスタンス化するときに実行するレコードウォークのデフォルトタイプを定義します。アップグレードする顧客の場合、このプロパティは「履歴」に設定されます。新規のお客様の場合、このプロパティは「CHECKPOINT」に設定されます。
var hw = new sn_hw.HistoryWalker(<table name>, <sys_id>);var hw = new sn_hw.HistoryWalker(<table name>, <sys_id>, <walker>); とか:var hw = new sn_hw.HistoryWalker('incident', '1c741bd70b2322007518478d83673af3', 'CHECKPOINT');スコープ対象のアプリケーションおよびグローバルアプリケーションでこのクラスを使用するには、 sn_hw 名前空間識別子を使用します。HistoryWalker API にアクセスするには、デフォルトで有効になっている History Walker プラグイン (com.glide.history_walker) が必要です。
HistoryWalker - HistoryWalker(文字列 tableName, 文字列 sysId, 文字列 walker)
HistoryWalker オブジェクトをインスタンス化し、指定された Glide レコードの履歴データを取得します。
| 名前 | タイプ | 説明 |
|---|---|---|
| tableName | 文字列 | 取得するレコードを含むテーブルの名前。 |
| sysId | 文字列 | 履歴データを取得するレコードのSys_id。 |
| 歩行器 | 文字列 | オプション。指定されたレコードの履歴データを取得するために使用する履歴ウォーカーの名前。 有効な値:
デフォルト:システムプロパティ com.snc.walker.default で指定された Walker。 |
次のコード例は、このメソッドを呼び出し、チェックポイントウォーカーを使用して GlideRecord に加えられた変更をウォークスルーする方法を示しています。
var gr_Hw = new GlideRecord('sc_req_item');
gr_Hw.get('b0d3335d49534210f877468e89703a7c');
var hw = new sn_hw.HistoryWalker(gr_Hw.getTableName(), gr_Hw.getUniqueValue(), 'CHECKPOINT');
hw.walkTo('19096afcc800000001');
printChangedFields(hw);
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++) {
var fieldName = fields.get(j) + '';
if (fieldName !== 'variables')
gs.info(walkedGr.getValue('sys_updated_on') + ' ' + fieldName + '=' + walkedGr.getValue(fieldName));
}
var variables = walkedGr.variables;
for (var variableName in variables) {
if (variables[variableName].changes())
gs.info(walkedGr.getValue('sys_updated_on') + ' ' + variableName + '=' + variables[variableName].getValue());
}
gs.info('');
}
出力:
Fields changed at update 3 were:
2024-07-09 08:50:21 price=1499
2024-07-09 08:50:21 state=2
2024-07-09 08:50:21 priority=2
2024-07-09 08:50:21 recurring_price=100
HistoryWalker - HistoryWalker(文字列 tableName, 文字列 sysId, ブーリアン useAudit)
履歴データを取得するための履歴セットまたは監査データ (3 つ目のパラメーターによって異なる) を使用して、パラメーターに基づいてデータベースレコードをフェッチします。
| 名前 | タイプ | 説明 |
|---|---|---|
| tableName | 文字列 | 取得するレコードを含むテーブルの名前。 |
| sysId | 文字列 | 取得するレコードの 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());
for(int i = 0; i < 2; i++) {
hw.walkForward();
}
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.walkForward();
var walkedRecord = hw.getWalkedRecord();
gs.info('Priority in update number 0: ' + walkedRecord.priority);
hw.walkForward();
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.walkForward();
walkedRecord[0] = hw.getWalkedRecordCopy();
hw.walkForward();
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()
データベースからの取得時にレコードレベルの読み取りアクセスを適用するかどうかを指定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| ブーリアン | フィールドレベルのセキュリティが有効かどうかを示すフラグ。 有効な値:
|
次のコード例は、このメソッドを呼び出す方法を示しています。
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()
データベースからの取得時にレコードレベルの読み取りアクセスを適用するかどうかを指定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| ブーリアン | レコードレベルのセキュリティが有効かどうかを示すフラグ。 有効な値:
|
次のコード例は、このメソッドを呼び出す方法を示しています。
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()
ある更新から別の更新にレコードをウォークスルーするメソッドのいずれかが、各要素の「変更」データをサポートするかどうかを指定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| ブーリアン | 変更サポートが有効かどうかを示すフラグ。 有効な値:
|
次のコード例は、このメソッドを呼び出す方法を示しています。
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()
ジャーナルタイプフィールドを過去の値から設定するかどうかを指定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| ブーリアン | ジャーナルフィールドが入力されているかどうかを示すフラグ。 有効な値:
|
次のコード例は、このメソッドを呼び出す方法を示しています。
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()
履歴に記録される変数に値を設定するかどうかを指定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| ブーリアン | 履歴に記録された変数に値が設定されているかどうかを示すフラグ。 有効な値:
|
次のコード例は、このメソッドを呼び出す方法を示しています。
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 |
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、このメソッドを呼び出す方法を示しています。
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
hw.setFieldLevelSecurity(false);
hw.walkForward();
HistoryWalker - setRecordLevelSecurity(ブーリアン recordLevelSecurity)
データベースからの取得時の、レコードにおけるレコードレベルの読み取りアクセスを設定します。レコードレベルのセキュリティでは、API のユーザーに GlideRecord へのアクセス権がない場合、API はウォークされたレコードを取得できません。
| 名前 | タイプ | 説明 |
|---|---|---|
| recordLevelSecurity | ブーリアン | レコードレベルの読み取りアクセスセキュリティの設定方法を示すフラグ。 有効な値:
デフォルト:true |
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、このメソッドを呼び出す方法を示しています。
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
hw.setRecordLevelSecurity(false);
hw.walkForward();
HistoryWalker - setWithChanges(ブーリアン withChanges)
ある更新から別の更新にレコードをウォークスルーするメソッドの各要素の「変更」データサポートを設定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| withChanges | ブーリアン | 変更データが各要素でサポートされているかどうかを示すフラグ。 有効な値:
デフォルト:true |
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、Changes データをサポートするこのメソッドを呼び出す方法を示しています。この例はグローバルスコープで実行する必要があります。
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
while (hw.walkForward()) {
printChangedFields(hw);
}
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);
while (hw.walkForward()) {
var oldPriority = hw.getWalkedRecord().priority;
gs.info('Incident priority in update number ' + hw.getUpdateNumber() + ' was ' + oldPriority);
}
HistoryWalker - setWithJournalFields(ブーリアン withJournalFields)
ジャーナルタイプフィールドを過去の値から設定するかどうかを指定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| withJournalFields | ブーリアン | ジャーナルタイプフィールドを含めるかどうかを示すフラグ。 有効な値:
デフォルト値: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.walkForward()) {
var workNotes = hw.getWalkedRecord().work_notes;
gs.info('Work Notes in update number ' + hw.getUpdateNumber() + ' was ' + workNotes);
}
HistoryWalker - setWithVariables(ブーリアン withVariables)
変数を過去の値から入力するかどうかを指定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| withVariables | ブーリアン | 変数が履歴値から入力されているかどうかを示すフラグ。 有効な値:
デフォルト値: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 つ前の更新番号が履歴データや監査データにない場合は、前の利用可能な更新番号に戻ります。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| ブーリアン | 指定された更新番号へのウォークが可能かどうかを示すフラグ。 有効な値:
|
次のコード例は、このメソッドを呼び出す方法を示しています。
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
while (hw.walkBackward()) {
var oldPriority = hw.getWalkedRecord().priority;
gs.info('Incident priority in update number ' + hw.getUpdateNumber() + ' was ' + oldPriority);
}
出力:
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 つ後の更新番号の状態に進めます。次の更新番号が履歴データや監査データにない場合は、次の利用可能な更新番号に進みます。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| ブーリアン | 指定された更新番号へのウォークが可能かどうかを示すフラグ。 有効な値:
|
次のコード例は、このメソッドを呼び出す方法を示しています。
var incGr = new GlideRecord('incident');
incGr.get('number', 'INC0000015');
var hw = new sn_hw.HistoryWalker(incGr.getTableName(), incGr.getUniqueValue());
while (hw.walkForward()) {
var oldPriority = hw.getWalkedRecord().priority;
gs.info('Incident priority in update number ' + hw.getUpdateNumber() + ' was ' + oldPriority);
}
出力:
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 を特定の更新回数の状態に戻します。更新番号までウォークした後で getWalkedRecord() または getWalkedRecordCopy() を使用して、「ウォーク済み」の GlideRecord を取得します。
| 名前 | タイプ | 説明 |
|---|---|---|
| updateCount | 整数 | 歩いて移動する番号を更新します。 |
| タイプ | 説明 |
|---|---|
| ブーリアン | 指定された更新番号へのウォークが可能かどうかを示すフラグ。 有効な値:
|
次のコード例は、このメソッドを呼び出す方法を示しています。
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 - walkTo(文字列チェックポイント)
適切な履歴/監査データを適用して、特定のレコード内部チェックポイントの GlideRecord のステータスを取得します。レコードの内部チェックポイントにウォークした後、 getWalkedRecord() または getWalkedRecordCopy() メソッドを使用して、「ウォーク済み」の GlideRecord を取得します。
| 名前 | タイプ | Description (説明) |
|---|---|---|
| チェックポイント | 文字列 | ウォーク先のレコードの内部チェックポイント。この値は、システム監査 [sys_audit] テーブルまたは履歴 [sys_history_line] テーブルの internal_checkpoint フィールドにあります。 |
| タイプ | 説明 |
|---|---|
| ブーリアン | 指定されたレコードの内部チェックポイントへのウォークが可能かどうかを示すフラグ。 可能な値:
|
次のコード例は、このメソッドを呼び出して、GlideRecord に加えられた変更を確認する方法を示しています。
var gr_Hw = new GlideRecord('sc_req_item');
gr_Hw.get('b0d3335d49534210f877468e89703a7c');
var hw = new sn_hw.HistoryWalker(gr_Hw.getTableName(), gr_Hw.getUniqueValue(), 'CHECKPOINT');
hw.walkTo('19096afcc800000001');
printChangedFields(hw);
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++) {
var fieldName = fields.get(j) + '';
if (fieldName !== 'variables')
gs.info(walkedGr.getValue('sys_updated_on') + ' ' + fieldName + '=' + walkedGr.getValue(fieldName));
}
var variables = walkedGr.variables;
for (var variableName in variables) {
if (variables[variableName].changes())
gs.info(walkedGr.getValue('sys_updated_on') + ' ' + variableName + '=' + variables[variableName].getValue());
}
gs.info('');
}
出力:
Fields changed at update 3 were:
2024-07-09 08:50:21 price=1499
2024-07-09 08:50:21 state=2
2024-07-09 08:50:21 priority=2
2024-07-09 08:50:21 recurring_price=100