HistoryWalker - 범위 지정, 전역
HistoryWalker API는 감사/이력 테이블을 사용하여 기존 기록의 이력 버전을 생성합니다. 이 기록 버전에는 지정된 Glide 기록의 모든 필드에 대한 모든 업데이트가 포함되어 있습니다.
이 API는 적절한 Glide 요소가 채워진 상태에서 GlideRecord를 이전 업데이트 횟수(walked GlideRecord)로 반환하는 기능을 제공합니다. walked GlideRecord가 검색된 후 API는 업데이트 번호 간에 앞뒤로 이동하여 기록 업데이트를 탐색하는 기능을 제공합니다.
이 API를 사용하면 다음을 수행할 수 있습니다.
- HistoryWalker API에 특정 이력 워커 구현을 사용하여 감사 데이터를 검색하도록 지시합니다.
- Glide 기록의 과거 버전을 탐색합니다.
- 적절한 이력/감사 데이터를 적용하여 기존 GlideRecord를 특정 업데이트 횟수의 상태로 가져옵니다.
- 행 수준 액세스 제어를 끕니다.
- 필드 수준 접근 제어를 끕니다.
- '변경' 데이터의 검색 및 처리를 끕니다.
- 저널 필드를 활성화합니다.
- 변수를 활성화합니다.
HistoryWalker API는 감사 데이터를 검색하는 네 가지 방법을 제공합니다.
- 역사 - 역사 워커
사용할 수 없거나 최신 상태가 아닌 경우 시스템 감사 [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 업데이트는 동기화되지 않으므로 덮어쓸 수 있으므로 이 개수를 신뢰할 수 없게 됩니다. - 감사 - 감사 워커
HistoryWalker API를 인스턴스화할 때 전달한 Glide 기록에 대한 sys_audit 테이블을 쿼리합니다. sys_audit 테이블의 각 기록에는 기록 수명 동안 발생한 필드 값의 변경 내용이 포함됩니다.
기록은 시간순이 아닌 업데이트 횟수 [record_checkpoint] 필드를 기준으로 오름차순으로 정렬됩니다. record_checkpoint 필드는 작업 테이블의 업데이트 [sys_mod_count] 필드와 느슨하게 연결됩니다. 일대일 상관 관계는 보장되지 않습니다.
AUDIT 검색 방법을 사용할지 여부를 결정할 때 고려해야 할 사항:- sys_audit 테이블의 크기입니다. 모든 기록의 모든 필드에 대한 변경 내용이 이 테이블에서 유지되기 때문에 sys_audit 테이블이 상당히 커질 수 있습니다.
- 시스템 속성의 glide.sys.audit_inserts설정에 따라 업데이트 제로 기록이 없을 수 있습니다. 이 속성은 테이블에 기록을 처음 삽입할 때 초기 필드 값을 사용하여 감사 기록을 작성할지 여부를 정의합니다. 기본 시스템에서 이 속성은 "아니오"로 설정되어 HistoryWalker API가 이 누락된 정보를 처리하기 위해 추가 처리를 수행합니다.
- 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 필드를 사용합니다.
기록 내부 검사점은 이러한 문제를 모두 해결하므로 검사점 워커가 감사 이력 데이터를 검색하는 가장 신뢰할 수 있는 방법이 됩니다.
- 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를 인스턴스화할 때 수행할 기본 기록 워킹 유형을 정의합니다. 고객을 업그레이드하는 경우 이 속성은 "이력"으로 설정됩니다. 신규 고객의 경우 이 속성은 "CHECKPOINT"로 설정됩니다.
var hw = new sn_hw.HistoryWalker(<table name>, <sys_id>);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 객체를 인스턴스화하고 지정된 글라이드 기록에 대한 이력 데이터를 조회합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 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, Boolean useAudit)
세 번째 매개변수에 따라 이력 세트 또는 감사 데이터를 사용하여 매개변수를 기반으로 데이터베이스 기록을 가져오고 이력 데이터를 검색합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| tableName | 문자열 | 검색할 기록이 포함된 테이블의 이름입니다. |
| sysID | 문자열 | 검색할 기록의 Sys_id입니다. |
| 사용 감사 | 부울 | 감사 데이터를 사용하여 과거 날짜를 검색할지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
|
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.
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 기록의 업데이트 번호를 가져옵니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 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()
업데이트 번호로 걸어간 후 이력/감사 데이터로 채워진 기록을 가져옵니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 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()
업데이트 번호로 걸어간 후 이력/감사 데이터로 채워진 기록의 복사본을 반환합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 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
히스토리워커 - isFieldLevelSecurity()
데이터베이스에서 검색할 때 기록에 기록 수준 읽기 액세스가 적용되는지 여부를 지정합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 부울 | 필드 수준 보안을 사용할 수 있는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
|
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.
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
히스토리워커 - isRecordLevelSecurity()
데이터베이스에서 검색할 때 기록에 기록 수준 읽기 액세스가 적용되는지 여부를 지정합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 부울 | 기록 수준 보안을 사용할 수 있는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
|
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.
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()
한 업데이트에서 다른 업데이트로 기록을 진행하는 메서드가 각 요소의 "변경" 데이터를 지원하는지 여부를 지정합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 부울 | 변경 지원을 사용할 수 있는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
|
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.
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
히스토리워커 - isWithJournalFields()
저널 유형 필드가 이력 값에서 채워지는지 여부를 지정합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 부울 | 저널 필드가 채워졌는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
|
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.
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()
이력에 기록된 변수에 대해 값이 설정되는지 여부를 지정합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 부울 | 이력에 기록된 변수에 대해 값이 설정되었는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
|
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.
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 사용자가 액세스할 수 없는 walked 기록의 필드를 채울 수 없습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| fieldLevel보안 | 부울 | 필드 수준 읽기 액세스 보안을 설정하는 방법을 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
기본값: true |
| 유형 | 설명 |
|---|---|
| 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가 걸어 있는 기록을 검색하지 못하게 합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| recordLevel보안 | 부울 | 기록 수준 읽기 액세스 보안을 설정하는 방법을 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
기본값: true |
| 유형 | 설명 |
|---|---|
| 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(Boolean withChanges)
한 업데이트에서 다른 업데이트로 기록을 이동하는 메서드의 각 요소에 대한 "변경" 데이터 지원을 설정합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 변경 사항 포함 | 부울 | 각 요소에 대해 변경 데이터가 지원되는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
기본값: true |
| 유형 | 설명 |
|---|---|
| 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(Boolean withJournalFields)
저널 유형 필드가 이력 값에서 채워지는지 여부를 지정합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| withJournalFields | 부울 | 저널 유형 필드를 포함할지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
기본값: false |
| 유형 | 설명 |
|---|---|
| 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(Boolean withVariables)
이력 값에서 변수를 채울지 여부를 지정합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 변수 포함 | 부울 | 변수가 기록 값으로 채워지는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
기본값: false |
| 유형 | 설명 |
|---|---|
| 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);
}
히스토리워커 - walkBackward()
적절한 이력/감사 데이터를 적용하여 워크된 GlideRecord가 하나의 업데이트 번호였을 때 상태로 가져옵니다. 이력/감사 데이터에서 이전 업데이트 수가 누락된 경우 이전에 사용 가능한 업데이트 수로 이동합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 부울 | 지정된 업데이트 번호로 이동할 수 있는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
|
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.
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()
적절한 이력/감사 데이터를 적용하여 하나의 업데이트 번호가 앞으로 이동했을 때 walked 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를 검색합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| updateCount | 정수 | 걸어갈 번호를 업데이트합니다. |
| 유형 | 설명 |
|---|---|
| 부울 | 지정된 업데이트 번호로 이동할 수 있는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
|
다음 코드 예제에서는 이 메서드를 호출하는 방법을 보여 줍니다.
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를 검색합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 검사점 | 문자열 | 걸어갈 기록의 내부 검사점입니다. 이 값은 시스템 감사 [sys_audit] 또는 이력 [sys_history_line] 테이블의 internal_checkpoint 필드에서 찾을 수 있습니다. |
| 유형 | 설명 |
|---|---|
| 부울 | 지정된 기록의 내부 검사점까지 걸어갈 수 있는지 여부를 나타내는 플래그입니다. 가능한 값:
|
다음 코드 예제에서는 이 메서드를 호출하여 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