원격 테이블에 대한 스크립트 정의 생성

  • 릴리스 버전: Zurich
  • 업데이트 날짜 2025년 07월 31일
  • 소요 시간: 10분
  • 외부 데이터 소스에서 데이터를 검색하거나 외부 소스에서 데이터를 편집하기 위해 원격 테이블에 대한 스크립트를 정의합니다.

    시작하기 전에

    필요한 역할: 스크립트 작성 허용 권한 또는 관리자가 있는 delegated_developer

    이 태스크 정보

    ServiceNow AI Platform 사용자가 보거나 수정할 수 있도록 외부 데이터 소스에 대해 쿼리 스크립트를 실행하여 원격 테이블의 데이터를 검색하고 캐시합니다. 또한 이 외부 데이터를 캐시하는 방법과 스크립트를 다시 실행해야 할 때까지 데이터가 메모리에 캐시되는 기간을 지정할 수 있습니다.

    프로시저

    1. 다음으로 이동 모두 > 시스템 정의 > 원격 테이블 > 정의.
    2. 새로 만들기를 선택합니다.
    3. 양식에서 필드를 채웁니다.
      통제 설명
      이름

      선택한 원격 테이블에 연결하기 위해 생성 중인 스크립트의 이름입니다.

      테이블
      생성 중인 스크립트를 연결할 원격 테이블의 이름입니다.
      • 범위가 지정된 애플리케이션의 원격 테이블의 경우, 이름 앞에 네임스페이스 식별자와 문자열 st_ 가 추가되어 원격이며 애플리케이션의 일부임을 나타냅니다.
      • 전역 애플리케이션의 원격 테이블의 경우 이름 앞에 문자열 u_st_이 붙습니다.
      애플리케이션 이 원격 테이블과 연결된 애플리케이션입니다. 애플리케이션에서 작업 중이거나 애플리케이션 기록에서 원격 테이블을 생성하는 경우 필드는 기본적으로 해당 애플리케이션으로 설정됩니다. 그렇지 않으면 필드는 기본적으로 전역으로 설정됩니다. 모듈 및 보안 규칙과 같이 테이블 기록에서 생성된 모든 기록은 기본적으로 이 애플리케이션에 할당됩니다.
      활성 원격 테이블과 연결 중인 스크립트를 활성화하는 옵션입니다. 원격 테이블에 대해 여러 개의 비활성 스크립트 정의를 가질 수 있지만 활성 스크립트 정의는 하나만 가질 수 있습니다. 스크립트 정의를 활성화하면 외부 데이터를 검색하고 캐시할 수 있도록 스크립트 정의를 원격 테이블에 연결합니다.
      고급 고급 캐싱 및 편집 설정에 액세스하는 옵션입니다.
      캐싱 설정은 이 원격 테이블에서 메모리 캐싱이 작동하는 ServiceNow AI Platform 방법을 지정합니다.
      주:
      고급 사용자만 원격 테이블에 대한 캐싱 매개 변수를 설정해야 합니다.
    4. 옵션: 고급 옵션을 선택한 경우 고급 섹션에서 필드를 채웁니다.
      주:
      기본적으로 외부 데이터는 사용자가 메모리에 캐시합니다.
      필드 설명
      캐시 TTL 외부 데이터가 이 원격 테이블 스크립트 정의에 대한 메모리에 캐시되는 캐시 시간(초)입니다. 예를 들어 5분 동안 메모리에 데이터를 캐시하려면 300 을 입력합니다.

      기본값은 0이며, 이는 데이터가 캐시되지 않고 매번 검색됨을 의미합니다. 최대값은 60분(3600초)입니다.

      캐시 격리 수준 각 사용자 또는 모든 사용자에 대한 쿼리 결과를 캐시합니다.
      • 사용자당 캐시: 캐시된 쿼리 결과는 로그인한 사용자와 관련이 있어야 합니다. 이는 기본값입니다.
      • 시스템 공유 캐시: 캐시된 쿼리 결과는 모든 사용자에게 동일해야 합니다.
      향상된 용량 원격 테이블에서 1,000개 이상의 행을 지원하도록 향상된 용량을 선택하는 옵션입니다.
      주:
      외부 원본에서 검색된 데이터 크기가 작은 경우 원격 테이블에서 1000개 행 기본 제한을 사용하여 쿼리 시간을 최소화합니다. 검색된 데이터 크기가 크고 성능이 떨어질 수 있는 경우 향상된 용량 필드를 선택할 수 있습니다.

      편집 가능을 선택한 경우 이 필드는 지원되지 않습니다.

      편집 가능 인스턴스에서 원격 테이블과 해당 외부 데이터 소스 편집을 지원하는 옵션입니다. v_record API를 사용하여 테이블의 데이터 삽입, 업데이트 및 삭제에 대한 스크립트 정의를 사용자 지정합니다.
    5. v_table, v_queryv_record API를 사용하여 다음 스크립트 정의를 사용자 지정합니다.

      이러한 API에 대한 자세한 내용은 , v_query – Scoped, Global, 및 v_record - Scoped, Global를 참조하십시오v_table – Scoped, Global.

      스크립트 정의 설명
      쿼리

      쿼리 스크립트 정의는 외부 소스에서 데이터를 검색하여 원격 테이블에 포함합니다. 쿼리 섹션에서 v_tablev_query API를 사용하여 스크립트를 사용자 지정합니다.

      원격 테이블의 외부 데이터가 포함된 목록을 새로 고칠 때마다 연결된 쿼리 스크립트가 실행됩니다.

      (function executeQuery(v_table, v_query) {
           // Parameters:
           //      v_table - object to record response:
           //          v_table.addRow({ ... })                - adds a row to the result set.
           //              keys are the column names of the table definition.
           //              sys_id must be non-empty and uniquely identify each row.
           //                  the above rule will be strictly enforced for editable tables, and generate warnings for read-only tables.
           //                  sys_id will be supplied to the Update, and Delete scripts to specify the row's identity.
       
           //      v_query - the query definition:
           //          v_query.getEncodedQuery()              - encoded querystring
           //          v_query.getCondition(field)            - encoded querystring for the given field (includes field name, operator, and value)
           //          v_query.getParameter(field)            - parameter for the given field (only includes value for equality conditions)
           //          v_query.isGet()                        - whether the query is a single get by sys_id
           //          v_query.getSysId()                     - parameter for sys_id field
           //          v_query.isTextSearch()                 - whether the query contains a text query parameter
           //          v_query.getTextSearch()                - text search query parameter (internal field name 123TEXTQUERY321)
           //          v_query.getFirstRowWanted()            - the first row to include, don't use with caching
           //          v_query.getLastRowWanted()             - the last row to include, don't use with caching
           //          v_query.setLastErrorMessage(message)   - the message is visible from GlideRecord.getLastErrorMessage()
       
           // Sample code:
           //  try {
           //      retrieve-rows-from-external-system;     //      if (there-was-an-error) {
           //          var message = ...;     //          v_query.setLastErrorMessage(message);
           //          return;
           //      }
           //
           //      for (var row in rows) {
           //          v_table.addRow(row);
           //      }
           //  } catch (ex) {
           //      var message = ex.getMessage();
           //      v_query.setLastErrorMessage(message);
           //  }
       
        })(v_table, v_query);
      삽입

      스크립트 정의 삽입은 외부 소스에 기록을 추가합니다. 이 스크립트 정의는 고급 편집 가능 옵션을 선택한 경우에만 사용할 수 있습니다. 삽입 섹션에서 v_record API를 사용하여 스크립트를 사용자 지정합니다.

      원격 테이블에 기록이 추가될 때마다 관련 삽입 스크립트가 실행됩니다.

      function executeInsert(v_record) {
           // Parameters:
           //      v_record is a map of field names and values containing the sys_id of the
           //              record and the fields that need to be inserted in the record on the
           //              remote system (source of data)
           
           //          v_record.<field_name>                   - fields in the remote table GlideRecord
           //          v_record.setLastErrorMessage(message)   - signal an error
       
           // Sample code:
           //  try {
           //      update-external-system;
           //      if (there-was-an-error) {
           //          var message = ...;
           //          v_record.setLastErrorMessage(message);
           //      }
           //  } catch (ex) {
           //      var message = ex.getMessage();
           //      v_record.setLastErrorMessage(message);
           //  }
        })(v_record);
      업데이트

      업데이트 스크립트 정의는 외부 소스의 기록을 수정합니다. 이 스크립트 정의는 고급 편집 가능 옵션을 선택한 경우에만 사용할 수 있습니다. 업데이트 섹션에서 v_record API를 사용하여 스크립트를 사용자 지정합니다.

      원격 테이블에서 기록이 업데이트될 때마다 관련 업데이트 스크립트가 실행됩니다.

      주:
      여러 사용자가 동시에 동일한 레코드를 업데이트하는 경우 원격 시스템의 값은 실행된 마지막 업데이트 호출의 값입니다.
      (function executeUpdate(v_record, v_changed_fields) {
           // Parameters:
           //    v_record - a map of field names and values containing the sys_id of the record
           //          v_record.<field_name>                   - fields in the remote table GlideRecord
           //          v_record.setLastErrorMessage(message)   - signal an error
           //    v_changed_fields - a map of field names and values containing the sys_id of the record
           //          v_changed_fields.<field_name>           - changed fields in the remote table GlideRecord
       
           // Sample code:
           //  try {
           //      update-external-system;
           //      if (there-was-an-error) {
           //          var message = ...;
           //          v_record.setLastErrorMessage(message);
           //      }
           //  } catch (ex) {
           //      var message = ex.getMessage();
           //      v_record.setLastErrorMessage(message);
           //  }
        })(v_record, v_changed_fields);
      삭제

      삭제 스크립트 정의는 외부 소스에서 기록을 제거합니다. 이 스크립트 정의는 고급 편집 가능 옵션을 선택한 경우에만 사용할 수 있습니다. 삭제 섹션에서 v_record API를 사용하여 스크립트를 사용자 지정합니다.

      원격 테이블에서 기록이 삭제될 때마다 연결된 삭제 스크립트가 실행됩니다.

      (function executeDelete(v_record) {
           // Parameters:
           //      v_record - a map of field names and values containing (among others) the
           //              sys_id of the record that needs to be deleted on the remote system
           //          v_record.<field_name>                  - fields in the remote table GlideRecord
           //          v_record.setLastErrorMessage(message)   - signal an error
       
           // Sample code:
           //  try {
           //      update-external-system;
           //      if (there-was-an-error) {
           //          var message = ...;
           //          v_record.setLastErrorMessage(message);
           //      }
           //  } catch (ex) {
           //      var message = ex.getMessage();
           //      v_record.setLastErrorMessage(message);
           //  }
        })(v_record);
    6. 제출을 선택합니다.