HistoryWalker - スコープ指定、グローバル

  • リリースバージョン: Australia
  • 更新日 2026年03月12日
  • 所要時間:35分
  • HistoryWalker API は、監査/履歴テーブルを使用して、既存のレコードの履歴バージョンを生成します。この履歴バージョンには、指定された Glide レコードのすべてのフィールドに対するすべての更新が含まれています。

    この API は、適切な Glide 要素が入力された状態で、GlideRecord を以前の更新数 (ウォークされた GlideRecord) に戻す機能を提供します。ウォークされた GlideRecord が取得された後、API は更新番号の間を前後に移動し、履歴更新を移動する機能を提供します。

    この API を使用すると、次のことができます。

    • 特定の History Walker 実装を使用して監査データを取得するように HistoryWalker API に指示します。
    • Glide レコードの履歴バージョンを移動します。
    • 適切な履歴/監査データを適用して、既存の GlideRecord を特定の更新数の状態に戻します。
    • 行レベルのアクセス制御をオフにします。
    • フィールドレベルのアクセス制御をオフにします。
    • 「変更」データの取得と処理をオフにします。
    • ジャーナルフィールドを有効にします。
    • 変数を有効にします。

    HistoryWalker API には、監査データを取得する 4 つの方法があります。

    1. 履歴:履歴ウォーカー

      利用できないか最新でない場合は、システム監査 [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] フィールド値の昇順でソートおよびグループ化されます。更新フィールドは、タスクテーブルの更新 [sys_mod_count] フィールドに緩やかに関連付けられています。
      注:
      クライアントによるsys_mod_countの更新は同期されないため、上書きされる可能性があり、このカウントの信頼性が低くなります。
    2. AUDIT:監査ウォーカー

      HistoryWalker API のインスタンス化時に渡した Glide レコードの sys_audit テーブルでクエリを実行します。sys_auditテーブルの各レコードには、レコードの存続期間中に発生したフィールド値の変更が含まれています。

      レコードは、時系列ではなく更新数 [record_checkpoint] フィールドで昇順にソートされます。record_checkpointフィールドは、タスクテーブルの更新 [sys_mod_count] フィールドに緩やかに関連付けられています。1 対 1 の相関は保証されません。

      AUDIT 取得方法を使用するかどうかを決定する際の考慮事項:
      • sys_auditテーブルのサイズ。すべてのレコードのすべてのフィールドの変更がこのテーブルで維持されるため、sys_auditテーブルが非常に大きくなる可能性があります。
      • システムプロパティ glide.sys.audit_insertsの設定によっては、更新ゼロレコードがない可能性があります。このプロパティは、レコードが最初にテーブルに挿入されたときに、初期フィールド値で監査レコードを作成するかどうかを定義します。ベースシステムでは、このプロパティは「false」に設定されているため、この欠落情報に対応するために HistoryWalker API が追加の処理を行います。
      そのため、 AUDITでHistoryWalker APIを実行すると、HISTORYやCHECKPOINTほどパフォーマンスが高くありません。
    3. 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,000) に達すると、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 フィールドを使用します。

      レコード内部チェックポイントは、これらの両方の問題に対処し、チェックポイントウォーカーを監査履歴データを取得する最も信頼性の高い方法にします。

    4. OFFLINE:オフライン履歴ウォーカー

      Field Service Mobile Offline アプリなどのアプリケーションで使用されるオフライン履歴機能を提供します。タスクテーブル拡張に辞書属性offline_timestamp_fieldが設定されたフィールドがある場合、別のウォーカーを使用するためのプロパティや明示的な指示に関係なく、オフライン履歴ウォーカーが実行されます。オフライン履歴ウォーカーは、意図的に日時順に並べられた履歴データを含む sys_history_line テーブルとsys_history_setテーブルを使用して、オフライン更新をサポートします。このようなテーブルに対して正確な結果を提供できるのは、オフライン履歴ウォーカーのみです。

      注:
      オフライン更新の場合、 HistoryWalker API は自動的に開始され、使用できるメソッドは walkTo(0)walkForward() の 2 つだけです。オフライン更新のために他の HistoryWalker メソッドを呼び出すことはできません。

    システムプロパティ com.snc.walker.default は、 HistoryWalker API をインスタンス化するときに実行するレコードウォーキングのデフォルトタイプを定義します。アップグレード顧客の場合、このプロパティは「履歴」に設定されます。新規顧客の場合、このプロパティは「CHECKPOINT」に設定されます。

    HistoryWalker API を次のようにインスタンス化すると、com.snc.walker.default プロパティによって API が使用する Record Walker 実装が決まります。
    var hw = new sn_hw.HistoryWalker(<table name>, <sys_id>);
    API をインスタンス化するときに使用するレコードウォーカーのタイプを渡すこともできます。この API をインスタンス化するときは、常に目的のウォーカー実装を含めることをお勧めします。
    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, 文字列ウォーカー)

    HistoryWalker オブジェクトをインスタンス化し、指定された Glide レコードの履歴データを取得します。

    表 : 1. パラメーター
    名前 タイプ 説明
    tableName 文字列 取得するレコードを含むテーブルの名前。
    sysId 文字列 履歴データを取得するレコードのSys_id。
    ウォーカー 文字列 オプション。指定されたレコードの履歴データを取得するために使用する履歴ウォーカーの名前。
    有効な値:
    • 監査
    • チェックポイント
    • 履歴
    • OFFLINE

    デフォルト:システムプロパティ 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 番目のパラメーターに応じて履歴セットまたは監査データを使用して履歴データを取得し、パラメーターに基づいてデータベースレコードをフェッチします。

    表 : 2. パラメーター
    名前 タイプ 説明
    tableName 文字列 取得するレコードを含むテーブルの名前。
    sysId 文字列 取得するレコードの sys_id。
    監査を使用 ブーリアン 監査データを使用して履歴を取得するかどうかを示すフラグ。
    有効な値:
    • true:監査データを使用して履歴を取得します。
    • false:履歴セットを使用して履歴日付を取得します。

    次のコード例は、このメソッドを呼び出す方法を示しています。

    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 レコードの更新番号を取得します。

    表 : 3. パラメーター
    名前 タイプ 説明
    なし
    表 : 4. 返される内容
    タイプ 説明
    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()

    更新番号に移動した後、履歴/監査データが入力されたレコードを取得します。

    表 : 5. パラメーター
    名前 タイプ 説明
    なし
    表 : 6. 返される内容
    タイプ 説明
    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()

    更新番号まで移動した後、履歴/監査データが入力されたレコードのコピーを返します。

    注:
    getWalkedRecord() メソッドは、別の更新番号にウォークした後、取得した walkedRecord を変更する場合があります。getWalkedRecordCopy() メソッドは、ウォークしたレコードへのクローンを取得して、それを防ぎます。
    表 : 7. パラメーター
    名前 タイプ 説明
    なし
    表 : 8. 返される内容
    タイプ 説明
    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()

    データベースから取得するときにレコードレベルの読み取りアクセスを適用するかどうかを指定します。

    表 : 9. パラメーター
    名前 タイプ 説明
    なし
    表 : 10. 返される内容
    タイプ 説明
    ブーリアン フィールドレベルのセキュリティが有効かどうかを示すフラグ。
    有効な値:
    • 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()

    データベースから取得するときにレコードレベルの読み取りアクセスを適用するかどうかを指定します。

    表 : 11. パラメーター
    名前 タイプ 説明
    なし
    表 : 12. 返される内容
    タイプ 説明
    ブーリアン レコードレベルのセキュリティが有効になっているかどうかを示すフラグ。
    有効な値:
    • 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()

    ある更新から別の更新にレコードをウォークするメソッドのいずれかが、各要素の「変更」データをサポートするかどうかを指定します。

    表 : 13. パラメーター
    名前 タイプ 説明
    なし
    表 : 14. 返される内容
    タイプ 説明
    ブーリアン 変更サポートが有効かどうかを示すフラグ。
    有効な値:
    • 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()

    ジャーナルタイプフィールドが履歴値から入力されるかどうかを指定します。

    表 : 15. パラメーター
    名前 タイプ 説明
    なし
    表 : 16. 返される内容
    タイプ 説明
    ブーリアン ジャーナルフィールドが入力されているかどうかを示すフラグ。
    有効な値:
    • 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()

    履歴に記録される変数に値を設定するかどうかを指定します。

    表 : 17. パラメーター
    名前 タイプ 説明
    なし
    表 : 18. 返される内容
    タイプ 説明
    ブーリアン 履歴に記録されている変数に値が設定されているかどうかを示すフラグ。
    有効な値:
    • 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 が入力できなくなります。

    表 : 19. パラメーター
    名前 タイプ 説明
    フィールドレベルセキュリティ ブーリアン フィールドレベルの読み取りアクセスセキュリティの設定方法を示すフラグ。
    有効な値:
    • true:フィールドレベルのセキュリティを有効にします。
    • false:フィールドレベルのセキュリティを無効にします。

    デフォルト:true

    表 : 20. 返される内容
    タイプ 説明
    なし

    次のコード例は、このメソッドを呼び出す方法を示しています。

    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 はウォークしたレコードを取得できません。

    表 : 21. パラメーター
    名前 タイプ 説明
    recordLevelSecurity ブーリアン レコードレベルの読み取りアクセスセキュリティの設定方法を示すフラグ。
    有効な値:
    • true:レコードレベルのセキュリティを有効にします。
    • false:レコードレベルのセキュリティを無効にします。

    デフォルト:true

    表 : 22. 返される内容
    タイプ 説明
    なし

    次のコード例は、このメソッドを呼び出す方法を示しています。

    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)

    ある更新から別の更新にレコードをウォークするメソッドの各要素の「変更」データサポートを設定します。

    表 : 23. パラメーター
    名前 タイプ 説明
    変更あり ブーリアン 各要素の変更データがサポートされているかどうかを示すフラグ。
    有効な値:
    • true:各要素の変更データがサポートされます。
    • false:各要素の変更データはサポートされていません。

    デフォルト:true

    表 : 24. 返される内容
    タイプ 説明
    なし

    このコード例は、変更データのサポートを使用してこのメソッドを呼び出す方法を示しています。この例はグローバルスコープで実行する必要があります。

    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("");
    }

    このコード例は、Changes データのサポートなしでこのメソッドを呼び出す方法を示しています。この例は、スコープ対象環境とグローバル環境の両方で実行されます。

    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)

    ジャーナルタイプフィールドが履歴値から入力されるかどうかを指定します。

    表 : 25. パラメーター
    名前 タイプ 説明
    withJournalFields ブーリアン ジャーナルタイプフィールドを含めるかどうかを示すフラグ。
    有効な値:
    • true:ジャーナルタイプのフィールドを含めます。
    • false:ジャーナルタイプのフィールドを含めません。

    デフォルト値:false

    表 : 26. 返される内容
    タイプ 説明
    なし

    次のコード例は、このメソッドを呼び出す方法を示しています。

    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)

    変数が履歴値から入力されるかどうかを指定します。

    表 : 27. パラメーター
    名前 タイプ 説明
    変数あり ブーリアン 変数が履歴値から入力されているかどうかを示すフラグ。
    有効な値:
    • true:変数が入力されています。
    • false:変数は入力されません。

    デフォルト値:false

    表 : 28. 返される内容
    タイプ 説明
    なし

    次のコード例は、このメソッドを呼び出す方法を示しています。

    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 つの更新番号遡ったときの状態に戻します。履歴/監査データに以前の更新数がない場合は、以前の使用可能な更新数にウォークします。

    表 : 29. パラメーター
    名前 タイプ 説明
    なし
    表 : 30. 返される内容
    タイプ 説明
    ブーリアン 指定した更新番号までウォークできたかどうかを示すフラグ。
    有効な値:
    • true:指定された更新番号までウォークできます。
    • false:指定された更新番号に移動できません。

      考えられる理由: 既に更新番号 0 までウォークしました。

    次のコード例は、このメソッドを呼び出す方法を示しています。

    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 つ前のステータスに戻します。履歴/監査データに次の更新カウントがない場合は、次に利用可能な更新カウントに移動します。

    表 : 31. パラメーター
    名前 タイプ 説明
    なし
    表 : 32. 返される内容
    タイプ 説明
    ブーリアン 指定した更新番号までウォークできたかどうかを示すフラグ。
    有効な値:
    • true:指定された更新番号までウォークできます。
    • false:指定された更新番号に移動できません。

      考えられる理由: 既に GlideRecord の更新数まで進んでいます。

    次のコード例は、このメソッドを呼び出す方法を示しています。

    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 を取得します。

    注:
    このメソッドは、チェックポイントウォーカー実装ではサポートされていません。チェックポイントウォーカーを使用する場合は、 HistoryWalker - walkTo(文字列チェックポイント) メソッドを呼び出します。
    表 : 33. パラメーター
    名前 タイプ 説明
    updateCount 整数 ウォーク先の更新番号。
    表 : 34. 返される内容
    タイプ 説明
    ブーリアン 指定した更新番号までウォークできたかどうかを示すフラグ。
    有効な値:
    • true:指定された更新番号までウォークできます。
    • false:指定された更新番号に移動できません。

      考えられる理由:要求された更新が GlideRecord の更新数を超えているか、要求された更新番号の履歴/監査データがありません。

    次のコード例は、このメソッドを呼び出す方法を示しています。

    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 を取得します。

    注:
    このメソッドは、チェックポイントウォーカー実装でのみサポートされています。
    表 : 35. パラメーター
    名前 タイプ 説明
    チェックポイント 文字列 歩いて移動するレコードの内部チェックポイント。この値は、システム監査 [sys_audit] または履歴 [sys_history_line] テーブルの [internal_checkpoint] フィールドにあります。
    表 : 36. 返される内容
    タイプ 説明
    ブーリアン 指定されたレコードの内部チェックポイントまで歩くことができたかどうかを示すフラグ。
    可能な値:
    • true:指定されたレコードの内部チェックポイントまでウォークできます。
    • false:指定されたレコードの内部チェックポイントまで移動できません。

      考えられる理由:内部チェックポイントが存在しません。

    次のコード例は、このメソッドを呼び出して 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