HistoryWalker - 범위 지정, 전역

  • 릴리스 버전: Washingtondc
  • 업데이트 날짜 2024년 02월 01일
  • 읽기21분
  • HistoryWalker API는 audit/history 테이블을 사용하여 기존 기록의 기록 버전을 생성합니다.

    적절한 GlideElements가 채워져 GlideRecord를 이전 업데이트 횟수(Walked GlideRecord)로 되돌리는 기능을 지원합니다. Walked GlideRecord가 검색되면 API는 기록 업데이트를 탐색하면서 업데이트 번호를 앞뒤로 이동할 수 있는 기능을 제공합니다.

    범위가 지정된 응용 프로그램과 전역 응용 프로그램에서 이 클래스를 사용하려면 sn_hw 네임스페이스 식별자를 사용합니다. HistoryWalker API에 액세스하려면 기본적으로 활성화되어 있는 History Walker 플러그인(com.glide.history_walker)이 필요합니다.
    주:
    오프라인 업데이트의 경우 HistoryWalker API가 자동으로 시작되며 사용할 수 있는 메서드는 walkTo()( 이 메서드의 입력 인수는 0만 가능)와 walkForward()뿐입니다. 오프라인 업데이트를 위해 사용 가능한 다른 메서드를 호출할 수 없습니다.
    HistoryWalker API는 감사 데이터를 검색하는 두 가지 방법을 제공합니다.
    • 히스토리 세트 사용: 살펴보려는 레코드에 대한 Sys Audit [sys_audit] 테이블의 데이터에서 히스토리 세트 항목이 만들어집니다(사용할 수 없거나 최신 상태가 아닌 경우). 이력 세트 테이블에는 발생한 필드 값의 실제 변경 내용이 포함된 기록(이력 라인)이 포함되어 있습니다. HistoryWalker API의 메서드는 sys_audit 테이블을 쿼리하는 대신 생성된 기록 라인에서 기록 데이터를 검색합니다.
    • 시스템 감사 테이블 사용: 이 경우 HistoryWalker API는 sys_audit 테이블을 직접 쿼리하는 데이터를 추출합니다.

    기본적으로 이 데이터는 walked 기록의 changes(), changesFrom() 및 changesTo() 메서드를 지원하도록 데이터를 채우고 기록 및 필드 수준 보안을 제공합니다. 또한 업데이트를 진행할 때 저널 필드와 변수가 Walked 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)

    세 번째 매개변수에 따라 이력 데이터를 검색하기 위해 이력 세트 또는 감사 데이터를 사용하여 매개변수를 기반으로 데이터베이스 기록을 가져옵니다.

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

    현재 Walked 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는 이를 방지하기 위해 walked 레코드에 복제본을 가져옵니다.
    표 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

    히스토리워커 - 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

    히스토리워커 - 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

    히스토리워커 - 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. 매개변수
    이름 유형 설명
    fieldLevel보안 부울 true로 설정하면 필드 수준 보안이 활성화됩니다. 기본값은 true입니다.
    표 20. 반환
    유형 설명
    void

    예제:

    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가 Walked 기록을 검색할 수 없습니다.

    표 21. 매개변수
    이름 유형 설명
    recordLevel보안 부울 True로 설정하면 레코드 수준 읽기 액세스 보안이 활성화됩니다. 기본값은 true입니다.
    표 22. 반환
    유형 설명
    void

    예제:

    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(Boolean withChanges)

    한 업데이트에서 다른 업데이트로 레코드를 이동하는 메서드의 각 요소에 대한 "변경" 데이터 지원을 설정합니다.

    표 23. 매개변수
    이름 유형 설명
    변경 사항 포함 부울 각 요소에 대해 변경 데이터가 지원되는지 여부를 나타내는 플래그입니다.
    유효한 값은 다음과 같습니다.
    • true: 각 요소에 대한 변경 데이터가 지원됩니다.
    • false: 각 요소에 대해 변경 데이터가 지원되지 않습니다.

    기본값: true

    표 24. 반환
    유형 설명
    void

    이 코드 예제에서는 변경 데이터 지원을 사용하여 이 메서드를 호출하는 방법을 보여 줍니다. 이 예제는 전역 범위에서 실행해야 합니다.

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

    이 코드 예제에서는 Changes 데이터 지원 없이 이 메서드를 호출하는 방법을 보여 줍니다. 이 예제는 범위가 지정된 환경과 전역 환경 모두에서 실행됩니다.

    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. 반환
    유형 설명
    void

    예제:

    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(Boolean withVariables)

    기록 값에서 변수를 채울지 여부를 지정합니다.

    표 27. 매개변수
    이름 유형 설명
    withVariables 부울 true로 설정하면 변수 값이 채워집니다. 기본값은 false입니다.
    표 28. 반환
    유형 설명
    void

    예제:

    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를 한 번의 업데이트 번호였을 때의 상태로 가져옵니다. 기록/감사 데이터에서 이전 업데이트 횟수가 누락된 경우 사용 가능한 이전 업데이트 횟수로 이동합니다.

    표 29. 매개변수
    이름 유형 설명
    없음
    표 30. 반환
    유형 설명
    부울 지정된 업데이트 번호로 이동할 수 있으면 예를 반환합니다. 그렇지 않으면 false를 반환합니다(예: 업데이트 번호 0까지 이미 이동한 경우).

    예제:

    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를 하나의 업데이트 번호 포워드였을 때의 상태로 가져옵니다. 기록/감사 데이터에서 다음 업데이트 횟수가 누락된 경우 사용 가능한 다음 업데이트 횟수로 이동합니다.

    표 31. 매개변수
    이름 유형 설명
    없음
    표 32. 반환
    유형 설명
    부울 지정된 업데이트 번호로 이동할 수 있으면 예를 반환합니다. 그 외에는 false를 반환합니다(예: GlideRecord 업데이트 수까지 이미 이동한 경우).

    예제:

    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를 특정 업데이트 횟수에 있었던 상태로 가져옵니다. 업데이트 번호로 이동한 후 getWalkedRecord() 또는 getWalkedRecordCopy()를 사용하여 &quot;walked&quot; GlideRecord를 검색합니다.

    표 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