HistoryWalker - 범위 지정, 전역
HistoryWalker API는 audit/history 테이블을 사용하여 기존 기록의 기록 버전을 생성합니다.
적절한 GlideElements가 채워져 GlideRecord를 이전 업데이트 횟수(Walked GlideRecord)로 되돌리는 기능을 지원합니다. Walked GlideRecord가 검색되면 API는 기록 업데이트를 탐색하면서 업데이트 번호를 앞뒤로 이동할 수 있는 기능을 제공합니다.
sn_hw 네임스페이스 식별자를 사용합니다. HistoryWalker API에 액세스하려면 기본적으로 활성화되어 있는 History Walker 플러그인(com.glide.history_walker)이 필요합니다.- 히스토리 세트 사용: 살펴보려는 레코드에 대한 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 문자열)
이력 데이터를 검색하기 위해 이력 세트를 사용하여 매개변수를 기반으로 데이터베이스 기록을 가져옵니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 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)
세 번째 매개변수에 따라 이력 데이터를 검색하기 위해 이력 세트 또는 감사 데이터를 사용하여 매개변수를 기반으로 데이터베이스 기록을 가져옵니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| tableName | 문자열 | 검색할 기록이 들어 있는 테이블의 이름입니다. |
| sydID | 문자열 | 검색할 기록의 sys_id입니다. |
| useAudit | 부울 |
|
예제
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 기록의 업데이트 번호를 가져옵니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 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()
업데이트 번호까지 이동한 후 기록/감사 데이터로 채워진 기록을 가져옵니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 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()
업데이트 번호로 이동한 후 이력/감사 데이터로 채워진 기록의 복사본을 반환합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 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()
데이터베이스에서 검색할 때 레코드에 레코드 수준 읽기 액세스 권한을 적용할지 여부를 지정합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 부울 | 필드 수준 보안이 활성화되면 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()
데이터베이스에서 검색할 때 레코드에 레코드 수준 읽기 액세스 권한을 적용할지 여부를 지정합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 부울 | 레코드 수준 보안이 활성화되면 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()
한 업데이트에서 다른 업데이트로 기록을 이동하는 메서드가 각 요소에 대한 "변경" 데이터를 지원하는지 여부를 지정합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 부울 | 변경 지원이 활성화되면 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()
저널 유형 필드가 기록 값에서 채워지는지 여부를 지정합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 부울 | 저널 필드가 채워지면 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()
이력에 기록되는 변수에 대해 값이 설정되는지 여부를 지정합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 부울 | 변수의 값을 포함하면 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가 채울 수 없습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| fieldLevel보안 | 부울 | true로 설정하면 필드 수준 보안이 활성화됩니다. 기본값은 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.walkTo(0);
HistoryWalker - setRecordLevelSecurity(부울 recordLevelSecurity)
데이터베이스에서 검색할 때 기록에 대한 기록 수준 읽기 권한을 설정합니다. 기록 수준 보안으로 인해 API 사용자가 GlideRecord에 접근할 수 없는 경우 API가 Walked 기록을 검색할 수 없습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| recordLevel보안 | 부울 | True로 설정하면 레코드 수준 읽기 액세스 보안이 활성화됩니다. 기본값은 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.walkTo(0);
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());
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)
저널 유형 필드가 기록 값에서 채워지는지 여부를 지정합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| withJournalFields 사용 | 부울 | true로 설정된 경우 저널 유형 필드를 포함합니다. 기본값은 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.walkTo(0)) {
var workNotes = hw.getWalkedRecord().work_notes;
gs.info('Work Notes in update number ' + hw.getUpdateNumber() + ' was ' + workNotes);
}
HistoryWalker - setWithVariables(Boolean withVariables)
기록 값에서 변수를 채울지 여부를 지정합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| withVariables | 부울 | true로 설정하면 변수 값이 채워집니다. 기본값은 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);
}
HistoryWalker - walkBackward()
적절한 기록/감사 데이터를 적용하여 워크된 GlideRecord를 한 번의 업데이트 번호였을 때의 상태로 가져옵니다. 기록/감사 데이터에서 이전 업데이트 횟수가 누락된 경우 사용 가능한 이전 업데이트 횟수로 이동합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 부울 | 지정된 업데이트 번호로 이동할 수 있으면 예를 반환합니다. 그렇지 않으면 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를 하나의 업데이트 번호 포워드였을 때의 상태로 가져옵니다. 기록/감사 데이터에서 다음 업데이트 횟수가 누락된 경우 사용 가능한 다음 업데이트 횟수로 이동합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 부울 | 지정된 업데이트 번호로 이동할 수 있으면 예를 반환합니다. 그 외에는 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()를 사용하여 "walked" GlideRecord를 검색합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| updateCount | 정수 | 이동할 업데이트 번호입니다. |
| 유형 | 설명 |
|---|---|
| 부울 | 지정된 업데이트 번호로 이동할 수 있으면 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