---
sourceDocument: Xanadu Now Platform 기능
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/ko-KR/xanadu/servicenow-platform

 Release :

    - xanadu

ft:locale :

    - ko-KR

ft:publication_title :

    - Xanadu Now Platform 기능

ft:clusterId :

    - platcap

bundleId :

    - platcap

workflow :

    - Platform


---

# 예 1: 외부 소스에서 모든 인시던트 기록 검색

# 예 1: 외부 소스에서 모든 인시던트 기록 검색 {#ariaid-title1}

* 릴리스 버전: Xanadu
* 
* 업데이트 날짜 2024년 08월 01일
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 소요 시간: 9분

다음은 현재 인스턴스 외부의 소스에서 데이터를 검색하고 캐싱하기 위해 만들 수 있는 스크립트 정의의 예입니다. 첫 번째 예에서는 외부 소스에서 모든 인시던트 기록을 로드하는 스크립트를 만듭니다.
원격 테이블 API에 대한 자세한 내용은 다음을 참조하십시오.

* [v_table()](https://www.servicenow.com/docs/access?context=v_tableAPI&version=xanadu&pubname=xanadu-api-reference&ft:locale=en-US)
* [v_query()](https://www.servicenow.com/docs/access?context=v_queryAPI&version=xanadu&pubname=xanadu-api-reference&ft:locale=en-US)
{#remote-table-script-def-example1__vtable-api-xbl-list}

    /**
     * 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를 만들어 스크립트에서 직접 사용할 수 있습니다. 이 예시에서는 `Remote Instance Incidents`라는 이름의 RESTMessageV2 API와 모든 인시던트 데이터를 가져오는 `All Incidents` 함수를 사용합니다. 서버에서 응답이 반환되면 데이터 검색에 문제가 발생하면 오류 메시지가 나타납니다.  
주:  
RESTMessageV2 사용 및 직접 메시지를 정의하는 방법에 대한 자세한 내용은 [RESTMessageV2 - 범위, 전역](https://www.servicenow.com/docs/access?context=c_RESTMessageV2API&version=xanadu&pubname=xanadu-api-reference&ft:locale=en-US) 및 [직접 RESTMessageV2 예제](https://www.servicenow.com/docs/access?context=r_DirectRESTMessageV2Example&version=xanadu&pubname=xanadu-api-reference&ft:locale=en-US)를 참조하세요.

데이터 검색에 문제가 발생하지 않으면 기록에 대한 데이터 본문을 가져옵니다.

    		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);

그런 다음 Transformer 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 이 작업을 수행합니다.
**관련 참조**   

* [원격 테이블 스크립트 정의 디버깅](https://servicenow-prod.fluidtopics.net/MLql272eJN57aAwIG3tCFw "원격 테이블 스크립트 정의에 세션 디버깅을 사용하도록 설정할 수 있습니다. 세션 디버그 로그에서 스크립트 정의 로깅을 사용하려면 속성을 true로 설정합니다glide.script.vtable.log.debug.")  
**관련 정보**   

* [TransformerDefinition API - 범위가 지정됨, 전역](https://www.servicenow.com/docs/access?context=TransformerDefinitionAPI&version=xanadu&pubname=xanadu-api-reference&ft:locale=en-US)
* [TransformerRuleList API - 범위가 지정됨, 전역](https://www.servicenow.com/docs/access?context=TransformerRuleListAPI&version=xanadu&pubname=xanadu-api-reference&ft:locale=en-US)
* [TransformerScripted API - 범위가 지정됨, 전역](https://www.servicenow.com/docs/access?context=TransformerScriptedAPI&version=xanadu&pubname=xanadu-api-reference&ft:locale=en-US)

