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

  • リリースバージョン: Washingtondc
  • 更新日 2024年02月01日
  • 読む22読むのに数分
  • HistoryWalker API は、監査/履歴テーブルを使用して既存のレコードの履歴バージョンを生成します。

    この API は、GlideRecord を、適切な GlideElement が設定された以前の更新回数 (これまでの GlideRecord) に戻す機能をサポートしています。これまでの GlideRecord の取得後、API を使用して、その履歴更新内を移動して更新番号を前後に移動することができます。

    スコープ対象のアプリケーションおよびグローバル アプリケーションでこのクラスを使用するには、 sn_hw 名前空間識別子を使用します。HistoryWalker API にアクセスするには、デフォルトで有効になっている History Walker プラグイン (com.glide.history_walker) が必要です。
    注:
    オフライン更新の場合、HistoryWalker API が自動的に開始され、使用できるメソッドは walkTo() (このメソッドの入力引数はゼロのみ) と walkForward() の 2 つのみとなります。他の利用可能なメソッドをオフライン更新に呼び出すことはできません。
    HistoryWalker API では、次の 2 つの方法で監査データを取得できます。
    • 履歴セットの使用:ウォークスルーするレコードのシステム監査 [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)

    履歴データを取得するための履歴セットを使用して、パラメーターに基づいてデータベースレコードをフェッチします。

    表 : 1. パラメーター
    名前 タイプ 説明
    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 つ目のパラメーターによって異なる) を使用して、パラメーターに基づいてデータベースレコードをフェッチします。

    表 : 2. パラメーター
    名前 タイプ 説明
    tableName 文字列 取得するレコードを含むテーブルの名前。
    sydId 文字列 取得するレコードの 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());
    hw.walkTo(3);
    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.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()

    更新番号に移動してから履歴データや監査データが入力されたレコードのコピーを返します。

    注:
    getWalkedRecord() API は、別の更新番号に移動した後に取得された walkedRecord を変更する場合があります。それを防止するため、これまでのレコードのクローンを getWalkedRecordCopy() API で取得します。
    表 : 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.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()

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

    表 : 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 に設定すると、フィールドレベルのセキュリティが有効になります。デフォルト値は 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.walkTo(0);
    

    HistoryWalker - setRecordLevelSecurity(ブーリアン recordLevelSecurity)

    データベースからの取得時の、レコードにおけるレコードレベルの読み取りアクセスを設定します。レコードレベルのセキュリティにより、API のユーザーが GlideRecord にアクセスできない場合、API は過去のレコードを取得できません。

    表 : 21. パラメーター
    名前 タイプ 説明
    recordLevelSecurity ブーリアン true に設定すると、レコードレベルの読み取りアクセスのセキュリティが有効になります。デフォルト値は 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.walkTo(0);
    

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

    ジャーナルタイプフィールドを過去の値から設定するかどうかを指定します。

    表 : 25. パラメーター
    名前 タイプ 説明
    withJournalFields ブーリアン true に設定すると、ジャーナルタイプのフィールドが含まれます。デフォルト値は 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.walkTo(0)) {
        var workNotes = hw.getWalkedRecord().work_notes;
        gs.info('Work Notes in update number ' + hw.getUpdateNumber() + ' was ' + workNotes);
    }
    

    HistoryWalker - setWithVariables(ブーリアン withVariables)

    変数を過去の値から入力するかどうかを指定します。

    表 : 27. パラメーター
    名前 タイプ 説明
    withVariables ブーリアン true に設定すると、変数に値が入力されます。デフォルト値は 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 を返します。そうでない場合 (すでに更新番号 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 つ後の更新番号の状態に進めます。次の更新番号が履歴データや監査データにない場合は、次の利用可能な更新番号に進みます。

    表 : 31. パラメーター
    名前 タイプ 説明
    なし
    表 : 32. 返される内容
    タイプ 説明
    ブーリアン 指定された更新番号に戻ることが可能であった場合は 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() を使用します。

    表 : 33. パラメーター
    名前 タイプ 説明
    updateCount 整数 移動先の更新番号。
    表 : 34. 返される内容
    タイプ 説明
    ブーリアン 指定された更新番号への移動が可能であった場合は 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