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

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

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

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

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

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

    1. HISTORY - ヒストリーウォーカー

      利用できない場合、または最新でない場合は、システム監査 [sys_history_set sys_audit] テーブルのデータを使用して、 HistoryWalker API をインスタンス化するときに渡した Glide レコードの履歴セット [] レコードを作成します。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 - チェックポイントウォーカー

      ハイブリッドアプローチを使用して、システムプロパティの設定に応じて、sys_history_setテーブルまたはsys_auditテーブルから履歴データを取得します com.glide.history_walker.max_history_count。ウォークするレコードのsys_mod_countが、このプロパティで設定された値 (デフォルト値 = 1,000) を超える場合、チェックポイントウォーカーはsys_auditテーブルを使用して履歴データを取得します。それ以外の場合は、sys_history_setテーブルを使用します。

      このチェックの理由は、sys_history_setテーブルが歩行履歴データに対してよりパフォーマンスの高いアプローチを提供するが、特定の時点までであるためです。フィールド更新の合計数が特定のレベル (約 10K) に達すると、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 モバイルオフラインアプリなどのアプリケーションで使用されるオフライン履歴機能を提供します。タスクテーブル拡張に辞書属性offline_timestamp_fieldが設定されたフィールドがある場合、オフライン履歴ウォーカーは、別のウォーカーを使用するためのプロパティや明示的な指示に関係なく実行されます。オフライン履歴ウォーカーは、意図的に日付と時刻順に並べられた履歴データを含むsys_history_lineテーブルとsys_history_setテーブルを使用して、オフライン更新をサポートします。このようなテーブルの正確な結果を提供できるのは、オフラインの履歴追跡機能だけです。

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

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

    次のように HistoryWalker API をインスタンス化すると、 com.snc.walker.default プロパティによって API が使用するレコードウォーカー実装が決定されます。
    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(String tableName, String sysId, String walker)

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

    表 : 1. パラメーター
    名前 タイプ 説明
    tableName 文字列 取得するレコードを含むテーブルの名前。
    sysId 文字列 履歴データを取得するレコードのSys_id。
    歩行器 文字列 オプション。指定されたレコードの履歴データを取得するために使用する History Walker の名前。
    有効な値:
    • 監査
    • チェックポイント
    • 歴史
    • 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。
    useAudit ブール 過去の日付の取得に監査データを使用するかどうかを示すフラグ。
    有効な値:
    • 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. パラメーター
    名前 タイプ 説明
    fieldLevelSecurity ブール フィールドレベルの読み取りアクセスセキュリティの設定方法を示すフラグ。
    有効な値:
    • 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. パラメーター
    名前 タイプ 説明
    withChanges ブーリアン 変更データが各要素でサポートされているかどうかを示すフラグ。
    有効な値:
    • 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("");
    }

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

    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. パラメーター
    名前 タイプ 説明
    withVariables ブール 変数が履歴値から入力されるかどうかを示すフラグ。
    有効な値:
    • 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 つ前の更新番号の状態に戻します。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