예시 1: 외부 소스에서 모든 인시던트 기록 검색
다음은 현재 인스턴스 외부 소스의 데이터 검색 및 캐싱을 위해 생성할 수 있는 스크립트 정의의 예입니다. 이 첫 번째 예에서는 외부 소스에서 모든 인시던트 기록을 로드하는 스크립트를 만듭니다.
원격 테이블 API 정보는 다음을 참조하십시오.
/**
* Using `v_query`, add the rows to `v_table`
*/
(function executeQuery(v_table, v_query) {
fetchAllIncidents(v_table, v_query);
/**
* fetch all incidents records from the remote instance
*/
function fetchAllIncidents(v_table, v_query) {
// Uses RestMessage with name 'Remote Instance Incidents' and function 'All Incidents'
// Create a RestMessage first which calls an external REST service
try {
var restMessage = new sn_ws.RESTMessageV2('Remote Instance Incidents', 'All Incidents');
var response = restMessage.execute();
var responseBody = response.getBody();
// if REST call ends up in an error, set the last error message which shows up
// at the bottom of the list view
if (response.haveError()) {
v_query.setLastErrorMessage(response.getErrorMessage());
// can use gs.error() or gs.addErrorMessage() while debugging
// gs.debug() messages visible in session debugger
// gs.debug(response.getErrorMessage());
return;
}
} catch (ex) {
v_query.setLastErrorMessage(ex.message);
// gs.debug(ex.message);
return;
}
var transformerDefinition = getTransformerDefinition();
var transformer = new sn_tfrm.Transformer(transformerDefinition, responseBody);
// transformer parses the responseBody and extracts rows
while (transformer.transform()) {
// row is field-value map e.g. { active:"true", number: "INC0000001"}
var row = transformer.getRow();
// you may do any additional transformations to the row like GlideDuration, GlideDataTime etc. For example,
// row.duration = new GlideDuration(row.duration);
// finally add the row to the remote table
v_table.addRow(row);
}
}
/**
* returns a sn_tfrm.TransformerDefinition, which defines the mapping of the table fields and elements in the response body
*/
function getTransformerDefinition() {
// create a rule list to map a field to its element path
var ruleList = new sn_tfrm.TransformerRuleList()
.fromJSON() // the response body is a JSON
// 'active' field maps to path '$.active'
.addRule("active", "$.active")
.addRule("caller_id", "$.caller_id.value")
.addRule("number", "$.number")
.addRule("short_description", "$.short_description")
.addRule("sys_id", "$.sys_id")
.addRule("updates", "$.sys_mod_count");
var recordPath = "$.result";
return new sn_tfrm.TransformerDefinition(ruleList, recordPath);
}
})(v_table, v_query);
이 스크립트에서 주목할 만한 코드 조각은 다음과 같습니다.
function fetchAllIncidents(v_table, v_query) {
// Uses RestMessage with name 'Remote Instance Incidents' and function 'All Incidents'
// Create a RestMessage first which calls an external REST service
try {
var restMessage = new sn_ws.RESTMessageV2('Remote Instance Incidents', 'All Incidents');
var response = restMessage.execute();
var responseBody = response.getBody();
// if REST call ends up in an error, set the last error message which shows up
// at the bottom of the list view
if (response.haveError()) {
v_query.setLastErrorMessage(response.getErrorMessage());
// can use gs.error() or gs.addErrorMessage() while debugging
// gs.debug() messages visible in session debugger
// gs.debug(response.getErrorMessage());
return;
}
} catch (ex) {
v_query.setLastErrorMessage(ex.message);
// gs.debug(ex.message);
return;
}
RestMessage를 작성하여 스크립트에서 직접 사용할 수 있습니다. 이 예에서는 이름이 원격 인스턴스 인시던트인 RESTMessageV2 API와 모든 인시던트 데이터를 가져오는 함수 모든 인시던트를 사용합니다. 서버에서 응답이 반환되면 데이터 검색에 문제가 발생하면 오류 메시지가 나타납니다.
주:
RESTMessageV2 사용 및 직접 메시지를 정의하는 방법에 대한 자세한 내용은 RESTMessageV2 - 범위, 전역 및 직접 RESTMessageV2 예제를 참조하십시오.
데이터 검색에서 문제가 발생하지 않으면 기록에 대한 데이터 본문을 가져옵니다.
var transformerDefinition = getTransformerDefinition();
var transformer = new sn_tfrm.Transformer(transformerDefinition, responseBody);
// transformer parses the responseBody and extracts rows
while (transformer.transform()) {
// row is field-value map e.g. { active:"true", number: "INC0000001"}
var row = transformer.getRow();
// you may do any additional transformations to the row like GlideDuration, GlideDataTime etc. For example,
// row.duration = new GlideDuration(row.duration);
// finally add the row to the remote table
v_table.addRow(row);
그런 다음 변환기 API를 사용하여 필요한 데이터 변환을 수행하고 행을 추출한 다음 각 레코드에 대한 행을 원격 테이블에 추가합니다.
/**
* returns a sn_tfrm.TransformerDefinition, which defines the mapping of the table fields and elements in the response body
*/
function getTransformerDefinition() {
// create a rule list to map a field to its element path
var ruleList = new sn_tfrm.TransformerRuleList()
.fromJSON() // the response body is a JSON
// 'active' field maps to path '$.active'
.addRule("active", "$.active")
.addRule("caller_id", "$.caller_id.value")
.addRule("number", "$.number")
.addRule("short_description", "$.short_description")
.addRule("sys_id", "$.sys_id")
.addRule("updates", "$.sys_mod_count");
var recordPath = "$.result";
return new sn_tfrm.TransformerDefinition(ruleList, recordPath);
}
})(v_table, v_query);
getTransformerDefinition 은 외부 API 응답 본문에서 레코드의 스키마를 정의합니다. 테이블 스크립트의 각 필드를 외부 기록의 요소에 매핑합니다. 이 매핑 외부의 외부 데이터 요소는 지원되지 않거나 검색되지 않습니다. 주:
변환기 정의의 sys_id 외부 데이터의 요소에 맵핑해야 합니다. 이 경우 sys_id 외부 인시던트 sys_id에 매핑됩니다. sys_id의 최대 길이는 32자입니다. 외부 데이터를 사용하는 양식이 제대로 작동할 수 있도록 매핑sys_id 이 작업을 수행합니다.