HistoryWalker - 범위가 지정됨, 전역

  • 릴리스 버전: Xanadu
  • 업데이트 날짜 2024년 08월 01일
  • 읽기33분
  • HistoryWalker API는 감사/이력 테이블을 사용하여 기존 기록의 기록 버전을 생성합니다. 이 기록 버전에는 지정된 Glide 기록의 모든 필드에 대한 모든 업데이트가 포함되어 있습니다.

    이 API는 적절한 Glide 요소가 채워진 이전 업데이트 카운트(걸어간 GlideRecord)로 GlideRecord를 반환하는 기능을 제공합니다. 걸어온 GlideRecord를 검색한 후 API는 업데이트 번호 사이를 앞뒤로 이동하여 업데이트 기록을 탐색하는 기능을 제공합니다.

    이 API를 사용하면 다음을 수행할 수 있습니다.

    • HistoryWalker API에 특정 이력 워커 구현을 사용하여 감사 데이터를 검색하도록 지시합니다.
    • Glide 기록의 이전 버전을 탐색합니다.
    • 적절한 이력/감사 데이터를 적용하여 기존 GlideRecord를 특정 업데이트 횟수의 상태로 가져옵니다.
    • 행 수준 액세스 제어를 해제합니다.
    • 필드 수준 접근 제어를 끕니다.
    • "변경 내용" 데이터의 검색 및 처리 기능을 끕니다.
    • 저널 필드를 활성화합니다.
    • 변수를 활성화합니다.

    HistoryWalker API는 감사 데이터를 검색하는 네 가지 방법을 제공합니다.

    1. HISTORY - 히스토리 워커

      사용할 수 없거나 최신이 아닌 경우 Sys Audit [sys_history_set] 테이블의 데이터를 사용하여 HistoryWalker API를 인스턴스화할 때 전달한 Glide 기록에 대한 이력 세트 [sys_audit] 기록을 생성합니다. 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] 필드와 느슨하게 연결되어 있습니다. 일대일 상관관계는 보장되지 않습니다.

      AUDIT 검색 방법을 사용할지 여부를 결정할 때 고려해야 할 사항:
      • sys_audit 테이블의 크기입니다. 모든 기록의 모든 필드에 대한 변경 사항이 이 테이블에서 유지되므로 sys_audit 테이블은 상당히 커질 수 있습니다.
      • 시스템 속성의 설정에 따라 업데이트 0 기록이 부족할 수 있습니다 glide.sys.audit_inserts. 이 속성은 기록을 테이블에 처음 삽입할 때 초기 필드 값으로 감사 기록이 생성되는지 여부를 정의합니다. 기본 시스템에서 이 특성은 "아니오"로 설정되어 HistoryWalker API가 이 누락된 정보를 처리하기 위해 추가 처리를 수행합니다.
      따라서 AUDIT를 사용하여 HistoryWalker API를 실행하는 것은 HISTORY 또는 CHECKPOINT만큼 성능이 좋지 않습니다.
    3. CHECKPOINT - 체크포인트 워커

      하이브리드 접근 방식을 사용하여 시스템 속성 com.glide.history_walker.max_history_count의 설정에 따라 sys_history_set 또는 sys_audit 테이블에서 기록 데이터를 가져옵니다. 이동할 레코드에 이 속성에 설정된 값(기본값 = 1,000)을 초과하는 sys_mod_count가 있는 경우 체크포인트 워커는 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 Mobile offline 앱과 같은 애플리케이션에서 사용하는 오프라인 이력 기능을 제공합니다. 작업 테이블 확장에 딕셔너리 특성 offline_timestamp_field 설정된 필드가 있는 경우 오프라인 기록 워커는 다른 워커를 사용하기 위한 속성이나 명시적 명령에 관계없이 실행됩니다. 오프라인 히스토리 워커는 날짜 및 시간별로 특별히 정렬된 히스토리 데이터를 포함하는 sys_history_line 및 sys_history_set 테이블을 사용하여 오프라인 업데이트를 지원합니다. 오프라인 기록 워커만 이러한 테이블에 대한 정확한 결과를 제공할 수 있습니다.

      주:
      오프라인 업데이트의 경우 HistoryWalker API가 자동으로 시작되며 사용할 수 있는 유일한 두 가지 메서드는 walkTo(0)walkForward()입니다. 오프라인 업데이트를 위해 다른 HistoryWalker 메서드를 호출할 수 없습니다.

    시스템 속성은 com.snc.walker.defaultHistoryWalker API를 인스턴스화할 때 수행할 기록 워킹의 기본 유형을 정의합니다. 업그레이드 고객의 경우 이 속성은 "HISTORY"로 설정됩니다. 새 고객의 경우 이 속성은 "CHECKPOINT"로 설정됩니다.

    다음과 com.snc.walker.default 같이 HistoryWalker API를 인스턴스화할 때 이 속성은 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(문자열 tableName, 문자열 sysId, 문자열 워커)

    HistoryWalker 객체를 인스턴스화하고 지정된 Glide 기록에 대한 이력 데이터를 검색합니다.

    표 1. 매개변수
    이름 유형 설명
    tableName 문자열 검색할 기록이 들어 있는 테이블의 이름입니다.
    sysId 문자열 기록 데이터를 검색할 기록의 Sys_id입니다.
    보행자 문자열 옵션입니다. 지정된 기록에 대한 이력 데이터를 검색하는 데 사용할 이력 워커의 이름입니다.
    유효한 값은 다음과 같습니다.
    • 감사
    • 검사점
    • 역사
    • 오프라인

    기본값: 시스템 속성 com.snc.walker.default에 지정된 워커입니다.

    다음 코드 예제에서는 이 메서드를 호출하여 검사점 워커를 사용하여 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(String tableName, String sysId, 부울 useAudit)

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

    표 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. 매개변수
    이름 유형 설명
    fieldLevel보안 부울 필드 수준 읽기 액세스 보안을 설정하는 방법을 나타내는 플래그입니다.
    유효한 값은 다음과 같습니다.
    • true: 필드 수준 보안을 사용하도록 설정합니다.
    • false: 필드 수준 보안을 사용하지 않도록 설정합니다.

    기본값: 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.walkForward();

    HistoryWalker - setRecordLevelSecurity(부울 recordLevelSecurity)

    데이터베이스에서 검색할 때 기록에 대한 기록 수준의 읽기 권한을 설정합니다. 기록 수준 보안은 API 사용자에게 GlideRecord에 대한 접근 권한이 없는 경우 API가 걷는 기록을 검색하지 못하게 합니다.

    표 21. 매개변수
    이름 유형 설명
    recordLevel보안 부울 기록 수준 읽기 액세스 보안을 설정하는 방법을 나타내는 플래그입니다.
    유효한 값은 다음과 같습니다.
    • true: 레코드 수준 보안을 활성화합니다.
    • false: 레코드 수준 보안을 사용하지 않도록 설정합니다.

    기본값: 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.walkForward();

    HistoryWalker - setWithChanges(부울 withChanges)

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

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

    기본값: true

    표 24. 반환
    유형 설명
    void

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

    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. 반환
    유형 설명
    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.walkForward()) {
      var workNotes = hw.getWalkedRecord().work_notes;
      gs.info('Work Notes in update number ' + hw.getUpdateNumber() + ' was ' + workNotes);
    }

    HistoryWalker - setWithVariables(부울 withVariables)

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

    표 27. 매개변수
    이름 유형 설명
    with변수 부울 변수가 기록 값에서 채워지는지 여부를 나타내는 플래그입니다.
    유효한 값은 다음과 같습니다.
    • true: 변수가 채워집니다.
    • false: 변수가 채워지지 않습니다.

    기본값: 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. 반환
    유형 설명
    부울 지정된 업데이트 번호로 걸어갈 수 있는지 여부를 나타내는 플래그입니다.
    유효한 값은 다음과 같습니다.
    • 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를 상태로 가져옵니다. 이력/감사 데이터에서 다음 업데이트 횟수가 누락된 경우 사용 가능한 다음 업데이트 횟수로 이동합니다.

    표 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를 검색합니다.

    주:
    이 메서드는 체크포인트 워커 구현에서 지원되지 않습니다. checkpoint 워커를 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