---
sourceDocument: 호주 API 참조
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/ko-KR/api-reference

 Release :

    - australia

ft:locale :

    - ko-KR

ft:publication_title :

    - 호주 API 참조

ft:clusterId :

    - crapiref

bundleId :

    - crapiref

workflow :

    - Creator


---

# HistoryWalker - 범위, 전역

# HistoryWalker - 범위, 전역 {#ariaid-title1}

* 릴리스 버전: Australia
* 
* 업데이트 날짜 2026년 03월 12일
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 소요 시간: 32분

HistoryWalker API는 감사/이력 테이블을 사용하여 기존 기록의 이력 버전을 생성합니다. 이 이력 버전에는 지정된 Glide 기록의 모든 필드에 대한 모든 업데이트가 포함되어 있습니다.

이 API는 적절한 Glide 요소가 채워진 상태에서 GlideRecord를 이전 업데이트 수(walked GlideRecord)로 반환하는 기능을 제공합니다. walked GlideRecord가 검색된 후 API는 업데이트 번호 사이를 앞뒤로 이동하면서 기록 업데이트를 탐색하는 기능을 제공합니다.

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

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

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

1. 이력 - 이력 워커사용할 수 없거나 최신 상태가 아닌 경우 시스템 감사 \[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. 감사 - 감사 워커HistoryWalker API를 인스턴스화할 때 전달한 Glide 기록에 대한 sys_audit 테이블을 쿼리합니다. sys_audit 테이블의 각 기록에는 기록의 수명 동안 발생한 필드 값의 변경 내용이 포함되어 있습니다.

   기록은 시간순이 아닌 업데이트 횟수 \[record_checkpoint\] 필드를 기준으로 오름차순으로 정렬됩니다. record_checkpoint 필드는 작업 테이블의 업데이트 \[sys_mod_count\] 필드와 느슨하게 연결되어 있습니다. 일대일 상관관계는 보장되지 않습니다.  
   AUDIT 검색 메서드를 사용할지 여부를 결정할 때 고려해야 할 사항은 다음과 같습니다.
   * sys_audit 테이블의 크기입니다. 모든 기록의 모든 필드에 대한 변경 내용이 이 테이블에서 유지되므로 sys_audit 테이블이 상당히 커질 수 있습니다.
   * 시스템 속성 glide.sys.audit_inserts의 설정에 따라 업데이트 0 기록이 부족할 수 있습니다. 이 속성은 기록이 테이블에 처음 삽입될 때 초기 필드 값을 사용하여 감사 기록을 생성할지 여부를 정의합니다. 기본 시스템에서 이 속성은 "아니오"로 설정되어 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. 오프라인 - 오프라인 이력 워커Field Service 모바일 오프라인 앱과 같은 애플리케이션에서 사용하는 오프라인 이력 기능을 제공합니다. 작업 테이블 확장에 딕셔너리 속성이 설정된 필드offline_timestamp_field 있는 경우 오프라인 이력 워커는 속성이나 다른 워커를 사용하도록 명시적 명령에 관계없이 실행됩니다. 오프라인 이력 워크는 의도적으로 날짜 및 시간별로 정렬된 이력 데이터가 포함된 sys_history_line 및 sys_history_set 테이블을 사용하여 오프라인 업데이트를 지원합니다. 오프라인 이력 워커만이 이러한 테이블에 대한 정확한 결과를 제공할 수 있습니다.

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

시스템 속성 com.snc.walker.default 은 HistoryWalker API를 인스턴스화할 때 수행할 기본 기록 워킹 유형을 정의합니다. 고객을 업그레이드하기 위해 이 속성은 "이력"으로 설정됩니다. 새 고객의 경우 이 속성은 "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(문자열 tableName, 문자열 sysId, 문자열 워커) {#ariaid-title2}

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

| 이름 | 유형 | 설명 |
|-|-|-|
| tableName | 문자열 | 검색할 기록이 들어 있는 테이블의 이름입니다. |
| sysId | 문자열 | 이력 데이터를 검색하려는 기록의 Sys_id입니다. |
| 워커 | 문자열 | 옵션입니다. 지정된 기록에 대한 이력 데이터를 검색하는 데 사용할 이력 워커의 이름입니다. 유효한 값은 다음과 같습니다. * 감사 * 검사점 * 역사 * 오프라인 기본값: 시스템 속성 com.snc.walker.default에 지정된 워커. |
[표 1. 매개변수]

{#HW-HistoryWalker_S_S__table_sdw_1tl_qbb}  
다음 코드 예제에서는 이 메서드를 호출하여 검사점 워커를 사용하여 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) {#ariaid-title3}

세 번째 매개변수에 따라 이력 세트 또는 감사 데이터를 사용하여 이력 데이터를 검색함으로써 매개변수를 기반으로 데이터베이스 기록을 가져옵니다.
{#HW-HistoryWalker_S_S_B__table_h5d_ycn_qbb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| tableName | 문자열 | 검색할 기록이 포함된 테이블의 이름입니다. |
| sysId | 문자열 | 검색할 기록의 Sys_id입니다. |
| 감사 사용 | 부울 | 감사 데이터를 사용하여 과거 날짜를 검색할지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다. * true: 감사 데이터를 사용하여 과거 날짜를 검색합니다. * false: 이력 세트를 사용하여 과거 날짜를 검색합니다. |
[표 2. 매개변수]

{#HW-HistoryWalker_S_S_B__table_h5d_ycn_qbb}  
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.

    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() {#ariaid-title4}

현재 걸음 이동한 Glide 기록의 업데이트 번호를 가져옵니다.
{#HW-getUpdateNumber__table_chz_2bt_qbb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 안 함 |   |   |
[표 3. 매개변수]

{#HW-getUpdateNumber__table_chz_2bt_qbb} {#HW-getUpdateNumber__table_dhz_2bt_qbb__entry__2}

| 유형 | 설명 |
|-|-|
| 정수 | 현재 업데이트 번호 또는 기록을 찾을 수 없는 경우 -- 1. |
[표 4. 반환]

{#HW-getUpdateNumber__table_dhz_2bt_qbb}  
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.

    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() {#ariaid-title5}

업데이트 번호로 이동한 후 이력/감사 데이터로 채워진 기록을 가져옵니다.
{#HW-getWalkedRecord__table_sbt_f1t_qbb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 안 함 |   |   |
[표 5. 매개변수]

{#HW-getWalkedRecord__table_sbt_f1t_qbb} {#HW-getWalkedRecord__table_tbt_f1t_qbb__entry__2}

| 유형 | 설명 |
|-|-|
| GlideRecord | 걸아간 GlideRecord. |
[표 6. 반환]

{#HW-getWalkedRecord__table_tbt_f1t_qbb}  
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.

    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() {#ariaid-title6}

업데이트 번호로 이동한 후 이력/감사 데이터로 채워진 기록의 복사본을 반환합니다.
주:  
getWalkedRecord() 메서드는 다른 업데이트 번호로 이동한 후 얻은 walkedRecord를 수정할 수 있습니다. getWalkedRecordCopy() 메서드는 이를 방지하기 위해 walked 기록에 대한 클론을 가져옵니다.
{#HW-getWalkedRecordCopy__table_qpk_t1t_qbb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 안 함 |   |   |
[표 7. 매개변수]

{#HW-getWalkedRecordCopy__table_qpk_t1t_qbb} {#HW-getWalkedRecordCopy__table_rpk_t1t_qbb__entry__2}

| 유형 | 설명 |
|-|-|
| GlideRecord | 걸어간 GlideRecord의 복사본입니다. |
[표 8. 반환]

{#HW-getWalkedRecordCopy__table_rpk_t1t_qbb}  
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.

    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() {#ariaid-title7}

데이터베이스에서 검색할 때 기록에 기록 수준의 읽기 액세스 권한이 적용되는지 여부를 지정합니다.
{#HW-isFieldLevelSecurity__table_xcy_1vs_qbb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 안 함 |   |   |
[표 9. 매개변수]

{#HW-isFieldLevelSecurity__table_xcy_1vs_qbb} {#HW-isFieldLevelSecurity__table_ycy_1vs_qbb__entry__2}

| 유형 | 설명 |
|-|-|
| 부울 | 필드 수준 보안을 사용할 수 있는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다. * true: 필드 수준 보안이 활성화됩니다. * false: 필드 수준 보안을 사용할 수 없습니다. |
[표 10. 반환]

{#HW-isFieldLevelSecurity__table_ycy_1vs_qbb}  
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.

    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() {#ariaid-title8}

데이터베이스에서 검색할 때 기록에 기록 수준의 읽기 액세스 권한이 적용되는지 여부를 지정합니다.
{#HW-isRecordLevelSecurity__table_orv_jts_qbb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 안 함 |   |   |
[표 11. 매개변수]

{#HW-isRecordLevelSecurity__table_orv_jts_qbb} {#HW-isRecordLevelSecurity__table_prv_jts_qbb__entry__2}

| 유형 | 설명 |
|-|-|
| 부울 | 기록 수준 보안을 사용할 수 있는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다. * true: 기록 수준 보안이 활성화됩니다. * false: 기록 수준 보안을 사용할 수 없습니다. |
[표 12. 반환]

{#HW-isRecordLevelSecurity__table_prv_jts_qbb}  
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.

    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() {#ariaid-title9}

한 업데이트에서 다른 업데이트로 기록을 이동하는 메서드가 각 요소에 대한 "변경" 데이터를 지원하는지 여부를 지정합니다.
{#HW-isWithChanges__table_ys5_nrs_qbb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 안 함 |   |   |
[표 13. 매개변수]

{#HW-isWithChanges__table_ys5_nrs_qbb} {#HW-isWithChanges__table_zs5_nrs_qbb__entry__2}

| 유형 | 설명 |
|-|-|
| 부울 | 변경 지원을 사용할 수 있는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다. * true: 변경 지원이 활성화됩니다. * false: 변경 지원을 사용할 수 없습니다. {#HW-isWithChanges__ul_qbs_vzl_5bc} |
[표 14. 반환]

{#HW-isWithChanges__table_zs5_nrs_qbb}  
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.

    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() {#ariaid-title10}

저널 유형 필드가 이력 값에서 채워지는지 여부를 지정합니다.
{#HW-isWithJournalFields__table_rmd_1ws_qbb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 안 함 |   |   |
[표 15. 매개변수]

{#HW-isWithJournalFields__table_rmd_1ws_qbb} {#HW-isWithJournalFields__table_smd_1ws_qbb__entry__2}

| 유형 | 설명 |
|-|-|
| 부울 | 저널 필드가 채워졌는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다. * true: 저널 필드가 채워집니다. * false: 저널 필드가 채워지지 않습니다. |
[표 16. 반환]

{#HW-isWithJournalFields__table_smd_1ws_qbb}  
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.

    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() {#ariaid-title11}

이력에 기록되는 변수에 대해 값이 설정되는지 여부를 지정합니다.
{#HW-isWithVariables__table_phm_jxs_qbb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 안 함 |   |   |
[표 17. 매개변수]

{#HW-isWithVariables__table_phm_jxs_qbb} {#HW-isWithVariables__table_qhm_jxs_qbb__entry__2}

| 유형 | 설명 |
|-|-|
| 부울 | 이력에 기록된 변수에 대해 값이 설정되었는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다. * true: 값이 설정되었습니다. * false: 값이 설정되지 않습니다. {#HW-isWithVariables__ul_rpj_y1m_5bc} |
[표 18. 반환]

{#HW-isWithVariables__table_qhm_jxs_qbb}  
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.

    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) {#ariaid-title12}

GlideRecord에서 해당 요소의 이력 값을 설정하기 전에 각 요소에 대한 필드 수준 읽기 액세스 권한을 설정합니다. 필드 수준 보안을 활성화하면 API가 API 사용자가 액세스할 수 없는 walked 기록의 필드를 채우지 못합니다.
{#HW-setFieldLevelSecurity_B__table_clj_xts_qbb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| fieldLevelSecurity | 부울 | 필드 수준의 읽기 액세스 보안을 설정하는 방법을 나타내는 플래그입니다. 유효한 값은 다음과 같습니다. * true: 필드 수준 보안을 활성화합니다. * false: 필드 수준 보안을 사용하지 않도록 설정합니다. 기본값: true |
[표 19. 매개변수]

{#HW-setFieldLevelSecurity_B__table_clj_xts_qbb} {#HW-setFieldLevelSecurity_B__table_dlj_xts_qbb__entry__2}

| 유형 | 설명 |
|-|-|
| 무효 |   |
[표 20. 반환]

{#HW-setFieldLevelSecurity_B__table_dlj_xts_qbb}  
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.

    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) {#ariaid-title13}

데이터베이스에서 검색할 때 기록에 대한 기록 수준의 읽기 액세스 권한을 설정합니다. 기록 수준 보안은 API 사용자가 GlideRecord에 액세스할 수 없는 경우 API가 walked 기록을 검색하지 못하도록 합니다.
{#HW-setRecordLevelSecurity_B__table_trq_kss_qbb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| recordLevelSecurity | 부울 | 기록 수준의 읽기 액세스 보안을 설정하는 방법을 나타내는 플래그입니다. 유효한 값은 다음과 같습니다. * true: 기록 수준 보안을 사용합니다. * false: 기록 수준 보안을 사용하지 않도록 설정합니다. 기본값: true |
[표 21. 매개변수]

{#HW-setRecordLevelSecurity_B__table_trq_kss_qbb} {#HW-setRecordLevelSecurity_B__table_urq_kss_qbb__entry__2}

| 유형 | 설명 |
|-|-|
| 무효 |   |
[표 22. 반환]

{#HW-setRecordLevelSecurity_B__table_urq_kss_qbb}  
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.

    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) {#ariaid-title14}

한 업데이트에서 다른 업데이트로 기록을 이동하는 메서드의 각 요소에 대한 "변경" 데이터 지원을 설정합니다.
{#HW-setWithChanges_B__table_ob3_c2n_qbb__entry__3}

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

{#HW-setWithChanges_B__table_ob3_c2n_qbb} {#HW-setWithChanges_B__table_pb3_c2n_qbb__entry__2}

| 유형 | 설명 |
|-|-|
| 무효 |   |
[표 24. 반환]

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

    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) {#ariaid-title15}

저널 유형 필드가 이력 값에서 채워지는지 여부를 지정합니다.
{#HW-setWithJournalFields_B__table_nz1_nvs_qbb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| withJournalFields | 부울 | 저널 유형 필드를 포함할지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다. * true: 저널 유형 필드를 포함합니다. * 아니오: 저널 유형 필드를 포함하지 않습니다. 기본값: false |
[표 25. 매개변수]

{#HW-setWithJournalFields_B__table_nz1_nvs_qbb} {#HW-setWithJournalFields_B__table_oz1_nvs_qbb__entry__2}

| 유형 | 설명 |
|-|-|
| 무효 |   |
[표 26. 반환]

{#HW-setWithJournalFields_B__table_oz1_nvs_qbb}  
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.

    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) {#ariaid-title16}

변수가 기록 값에서 채워지는지 여부를 지정합니다.
{#HW-setWithVariables_B__table_v4q_rws_qbb__entry__3}

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

{#HW-setWithVariables_B__table_v4q_rws_qbb} {#HW-setWithVariables_B__table_w4q_rws_qbb__entry__2}

| 유형 | 설명 |
|-|-|
| 무효 |   |
[표 28. 반환]

{#HW-setWithVariables_B__table_w4q_rws_qbb}  
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.

    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() {#ariaid-title17}

적절한 이력/감사 데이터를 적용하여 워크한 GlideRecord를 업데이트 번호 하나 뒤로 되었을 때의 상태로 가져옵니다. 이력/감사 데이터에서 이전 업데이트 횟수가 누락된 경우 사용 가능한 이전 업데이트 횟수로 이동합니다.
{#HW-walkBackward__table_rc3_nzs_qbb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 안 함 |   |   |
[표 29. 매개변수]

{#HW-walkBackward__table_rc3_nzs_qbb} {#HW-walkBackward__table_sc3_nzs_qbb__entry__2}

| 유형 | 설명 |
|-|-|
| 부울 | 지정된 업데이트 번호로 이동할 수 있는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다. * true: 지정된 업데이트 번호로 걸어갈 수 있습니다. * false: 지정된 업데이트 번호로 이동할 수 없습니다. 가능한 이유: 이미 업데이트 번호 0으로 걸어갔습니다. |
[표 30. 반환]

{#HW-walkBackward__table_sc3_nzs_qbb}  
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.

    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() {#ariaid-title18}

적절한 이력/감사 데이터를 적용하여 걸아간 GlideRecord를 업데이트 번호 1개 앞으로였을 때의 상태로 가져옵니다. 이력/감사 데이터에서 다음 업데이트 수가 누락된 경우 사용 가능한 다음 업데이트 횟수로 이동합니다.
{#HW-walkForward__table_spm_bzs_qbb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 안 함 |   |   |
[표 31. 매개변수]

{#HW-walkForward__table_spm_bzs_qbb} {#HW-walkForward__table_tpm_bzs_qbb__entry__2}

| 유형 | 설명 |
|-|-|
| 부울 | 지정된 업데이트 번호로 이동할 수 있는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다. * true: 지정된 업데이트 번호로 걸어갈 수 있습니다. * false: 지정된 업데이트 번호로 이동할 수 없습니다. 가능한 이유: GlideRecord 업데이트 횟수까지 이미 걸어갔습니다. |
[표 32. 반환]

{#HW-walkForward__table_tpm_bzs_qbb}  
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.

    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) {#ariaid-title19}

적절한 이력/감사 데이터를 적용하여 GlideRecord를 특정 업데이트 횟수의 상태로 가져옵니다. 업데이트 번호로 이동한 후 getWalkedRecord() 또는 getWalkedRecordCopy() 를 사용하여 "걸었던" GlideRecord를 검색합니다.
주:  
이 메서드는 검사점 워커 구현에서 지원되지 않습니다. 검사점 워커를 사용할 때 메서드를 [HistoryWalker - walkTo(문자열 검사점)](https://servicenow-prod.fluidtopics.net/dehYWeOc2EPM_gOevSONcg#HW-walkTo_S "적절한 이력/감사 데이터를 적용하여 GlideRecord를 특정 기록 내부 검사점에 대한 상태로 가져옵니다. 기록의 내부 검사점으로 이동한 후 getWalkedRecord() 또는 getWalkedRecordCopy() 메서드를 사용하여 \"걸었던\" GlideRecord를 검색합니다.") 호출합니다.
{#HW-walkTo_I__table_pjv_jys_qbb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| updateCount | 정수 | 걸어갈 업데이트 번호입니다. |
[표 33. 매개변수]

{#HW-walkTo_I__table_pjv_jys_qbb} {#HW-walkTo_I__table_qjv_jys_qbb__entry__2}

| 유형 | 설명 |
|-|-|
| 부울 | 지정된 업데이트 번호로 이동할 수 있는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다. * true: 지정된 업데이트 번호로 걸어갈 수 있습니다. * false: 지정된 업데이트 번호로 이동할 수 없습니다. 가능한 이유: 요청한 업데이트가 GlideRecord의 업데이트 수보다 크거나 요청한 업데이트 번호에 대한 이력/감사 데이터가 없습니다. |
[표 34. 반환]

{#HW-walkTo_I__table_qjv_jys_qbb}  
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.

    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(문자열 검사점) {#ariaid-title20}

적절한 이력/감사 데이터를 적용하여 GlideRecord를 특정 기록 내부 검사점에 대한 상태로 가져옵니다. 기록의 내부 검사점으로 이동한 후 getWalkedRecord() 또는 getWalkedRecordCopy() 메서드를 사용하여 "걸었던" GlideRecord를 검색합니다.
주:  
이 메서드는 검사점 워커 구현에서만 지원됩니다.
{#HW-walkTo_S__table_pjv_jys_qbb__entry__3}

| 이름 | 유형 | 설명 |
|-|-|-|
| 검사점 | 문자열 | 걸어갈 수 있는 기록의 내부 검사점입니다. 이 값은 시스템 감사 \[sys_audit\] 또는 이력 \[sys_history_line\] 테이블의 internal_checkpoint 필드에서 찾을 수 있습니다. |
[표 35. 매개변수]

{#HW-walkTo_S__table_pjv_jys_qbb} {#HW-walkTo_S__table_qjv_jys_qbb__entry__2}

| 유형 | 설명 |
|-|-|
| 부울 | 지정된 기록의 내부 검사점으로 이동할 수 있는지 여부를 나타내는 플래그입니다. 가능한 값: * true: 지정된 기록의 내부 검사점까지 이동할 수 있습니다. * 아니오: 지정된 기록의 내부 검사점으로 이동할 수 없습니다. 가능한 이유: 내부 검사점이 없습니다. |
[표 36. 반환]

{#HW-walkTo_S__table_qjv_jys_qbb}  
다음 코드 예제에서는 이 메서드를 호출하여 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


