스크립트 포함

  • 릴리스 버전: Washingtondc
  • 업데이트 날짜 2024년 02월 01일
  • 읽기13분
  • 스크립트 포함은 서버에서 실행되는 JavaScript를 저장하는 데 사용됩니다.

    서버 스크립트에서 사용할 JavaScript 함수와 클래스를 저장하는 스크립트 포함을 만듭니다. 각 스크립트 포함은 객체 클래스 또는 함수를 정의합니다.

    스크립트 포함은 요청 시에만 로드되므로 전역 비즈니스 규칙 대신 스크립트 포함을 사용하는 것이 좋습니다.

    자세한 내용은 및를 Discovery 스크립트 포함 참조하십시오클라이언트 호출 가능 스크립트 포함에 대한 개인정보 설정.

    스크립트 포함 양식

    스크립트 포함에는 이름, 설명 및 스크립트가 있습니다. 또한 활성 상태인지 여부와 클라이언트 스크립트에서 호출할 수 있는지 여부도 지정합니다. 스크립트 포함 양식을 사용하여 기존 스크립트 포함을 보거나 새 스크립트 포함을 생성합니다.

    스크립트 포함에 액세스하려면 시스템 정의 > 스크립트 포함으로 이동합니다.

    표 1. 스크립트 포함 양식
    필드 설명
    이름 스크립트 포함의 이름입니다. 클래스를 정의하는 경우 클래스, 프로토타입 및 형식의 이름과 일치해야 합니다. 클래스 없는(요청 시) 스크립트 포함을 사용하는 경우 이름이 함수 이름과 일치해야 합니다.
    API 이름 읽기 전용이며 자동으로 채워진 API 이름입니다.
    클라이언트 호출 가능 클라이언트 스크립트, 목록/보고서 필터, 참조 한정자 또는 URL의 일부로 지정된 경우 스크립트 포함을 사용할 수 있도록 합니다. 선택하면 접근 제어 관련 링크를 사용할 수 있습니다. 자세한 내용은 클라이언트 호출 가능 스크립트 포함에 대한 개인정보 설정 문서를 참조하십시오.
    애플리케이션 이 스크립트가 포함된 애플리케이션입니다.
    다음에서 접근 가능
    이 스크립트 포함에 접근할 수 있는 애플리케이션을 설정합니다.
    모든 애플리케이션 범위
    모든 애플리케이션 범위에서 액세스할 수 있습니다.
    이 애플리케이션 범위만
    현재 애플리케이션 범위에서만 액세스할 수 있습니다.
    활성 선택 시 스크립트 포함을 사용합니다. 스크립트 포함을 사용하지 않으려면 활성 필드를 선택 취소합니다.
    설명 스크립트 포함과 관련된 설명 콘텐츠를 제공합니다.
    스크립트 다른 스크립트에서 호출될 때 실행할 서버 측 스크립트를 정의합니다.

    스크립트는 단일 JavaScript 클래스 또는 전역 함수를 정의해야 합니다. 클래스 또는 함수 이름이 이름 필드와 일치해야 합니다.

    패키지 이 스크립트 포함이 포함된 패키지입니다.
    작성자 이 스크립트 포함을 생성한 사용자입니다.
    업데이트한 사람 이 스크립트 포함을 가장 최근에 업데이트한 사용자입니다.
    보호 정책
    스크립트 포함에 대한 보호 수준을 설정합니다.
    없음
    누구든지 다운로드되거나 설치된 이 스크립트 포함을 읽고 편집할 수 있습니다.
    읽기 전용
    누구든지 이 다운로드 또는 설치된 스크립트 포함에서 값을 읽을 수 있습니다. 아무도 스크립트 포함을 다운로드하거나 설치하는 인스턴스의 스크립트 값을 변경할 수 없습니다.
    보호됨
    애플리케이션 개발자를 위한 지적 재산권 보호를 제공합니다. 스크립트 포함을 다운로드한 고객은 스크립트 필드의 내용을 볼 수 없습니다. 스크립트는 권한이 없는 사용자가 일반 텍스트로 볼 수 없도록 메모리에서 암호화됩니다.
    양식 뷰의 관련 목록:
    버전 스크립트 포함의 모든 버전을 표시합니다. 이 목록을 사용하여 버전을 비교하거나 이전 버전으로 되돌릴 수 있습니다. 버전을 참조하십시오.
    접근 제어 클라이언트 호출 가능 확인란을 선택하고 표준 스크립트 포함에서 숨겨져 있는 경우 사용할 수 있습니다. 공용 액세스 권한이 부여되지 않을 때 무단 사용으로부터 CCSI를 보호하는 데 사용합니다.

    스크립트 포함 사용

    Script Includes는 시스템 정의 또는 시스템 UI에서 찾을 수 있습니다. 스크립트에서 기존 스크립트 포함을 호출하거나 새 스크립트 포함을 만들 수 있습니다.

    완전히 새로운 스크립트 포함을 만들려면 기존 스크립트 포함의 형식을 따를 수 있습니다. 이 예제에서 스크립트 포함의 이름은 NewInclude 이고 myFunction이라는 단일 함수가 있습니다. 스크립트 포함의 이름이 클래스, 프로토타입 및 유형의 이름과 일치해야 합니다. 새 스크립트 포함을 만들고 이름을 지정하면 시스템은 클래스와 프로토타입이 올바르게 설정된 코드 스니펫을 제공합니다.

    var NewInclude =Class.create();
     
    NewInclude.prototype={
      initialize :function(){},
     
      myFunction :function(){<Put function code here>},
     
      type :'NewInclude'};

    그런 다음 다음과 같이 myFunction 행을 사용할 수 있습니다.

    var foo =new NewInclude();
    foo.myFunction();
    주:
    제공된 스크립트 포함은 ServiceNow 수정하지 마십시오. 기존 스크립트와 비슷한 작업을 수행하는 스크립트 포함을 원하는 경우 이를 복사하고 복사본을 변경하거나 개체를 확장하는 것이 좋습니다. 이는 GlideAjax를 사용할 때 일반적인 방법입니다.

    클라이언트 호출 가능 스크립트 포함

    CCSI(Client Callable Script Includes)를 사용하면 클라이언트 스크립트, 목록/보고서 필터, 참조 규정자 또는 URL의 일부로 지정된 경우 스크립트 포함을 사용할 수 있습니다.

    시작하기 전에

    필요한 역할: admin

    프로시저

    1. 다음으로 이동 시스템 정의 > 스크립트 포함레이블이 표시됩니다.
    2. 새로 만들기를 선택하거나 보거나 편집할 기존 스크립트 포함을 선택합니다.
      스크립트 포함 작성에 대한 자세한 내용은 을 참조하십시오 스크립트 포함 사용 .
    3. 양식을 완성하고 클라이언트 호출 가능 확인란을 선택합니다.
      사용자 역할을 선택하고 접근 제어 항목을 자동으로 생성하는 역할 선택기가 나타납니다. 사용자 역할을 선택하고 확인을 클릭합니다.사용자 역할 선택 창.
      주:
      역할 선택기 창을 비활성화하려면 glide.script.ccsi.enable_acl_create_uxfalse로 설정합니다.

      역할 기반 접근 제어가 있는 새 CCSI 기록이 생성됩니다. 접근 제어 관련 링크(Access Control Related Link)는 클라이언트 확장 가능(Client calIable ) 확인란을 선택하면 사용할 수 있게 됩니다.

      클라이언트 호출 가능이 선택되면 스크립트 포함 양식 및 접근 제어 관련 링크를 표시합니다.

    클라이언트 호출 가능 스크립트 포함에 대한 개인정보 설정

    클라이언트 호출 가능 스크립트 포함(CCSI)에 대한 개인정보 설정은 클라이언트 호출 가능 스크립트 포함에 액세스할 수 있는 사용자를 판별합니다.

    개인 정보 보호 설정

    개인 개인 정보 설정은 공용 페이지에 액세스하는 게스트가 클라이언트 호출 가능 스크립트 포함에 액세스할 수 없음을 의미합니다. 로그인하지 않은 사용자는 개인 스크립트를 실행할 수 없습니다.

    공개 개인 정보 설정

    공개 개인 정보 설정은 로그인하지 않은 사용자가 클라이언트 스크립트를 실행하여 적절한 HTTP 요청을 생성할 수 있음을 의미합니다. 클라이언트 스크립트가 기밀 정보를 제공하는 경우 보안 문제가 발생할 수 있습니다.

    다음 스크립트 포함은 UI 페이지를 공개 또는 비공개로 만들려면 해당 페이지에 액세스해야 하므로 기본적으로 공개로 유지됩니다.
    • 글라이드시스템아약스
    • SysMessageAjax
    • 지식메시징Ajax
    • 지식Ajax
    • PasswordResetAjax

    모든 클라이언트 호출 가능 스크립트 포함에 대한 개인 정보 설정

    모든 클라이언트 호출 가능 스크립트 포함에서 개인 정보 설정을 변경합니다.

    모든 클라이언트 호출 가능 스크립트 포함에 대한 추가 제어를 제공하기 위해 관리자는 glide.script.ccsi.ispublic 속성을 추가할 수 있습니다. 이 속성은 클라이언트 호출 가능 스크립트 포함을 모두 공개 또는 비공개로 설정하여 표시 여부를 변경합니다. 다음과 같이 속성을 구성합니다.

    표 2. 속성 구성
    제목 속성
    이름 glide.script.ccsi.ispublic
    유형 true|false
    false
    주:
    이 속성에 대한 자세한 내용은 인스턴스 보안 강화 설정의 클라이언트 호출 가능 스크립트 포함에 대한 개인정보 보호를 참조하십시오.

    단일 클라이언트 호출 가능 스크립트 포함에서 개인정보 변경

    isPublic() 함수를 추가하여 단일 클라이언트 호출 가능 스크립트 포함에 대한 개인 정보 설정을 변경합니다.

    isPublic() 설정이 속성보다 우선합니다glide.script.ccsi.ispublic. 예를 들어, 속성이 false로 설정되어 모든 클라이언트 호출 가능 스크립트 포함을 비공개로 설정하고 스크립트가 isPublic()true로 설정하면 스크립트는 공개됩니다.

    단일 클라이언트 호출 가능 스크립트 포함에 대한 개인정보를 변경하려면 스크립트 포함에 다음 메서드를 추가합니다.

      isPublic:function(){return[true/false];},
    NewInclude 클라이언트 스크립트를 비공개로 설정합니다.
    var NewInclude =Class.create();
     
    NewInclude.prototype={
       initialize:function(){},
     
       myFunction:function(){//Put function code here},
       isPublic:function(){return false;},
     
       type:'NewInclude'};

    클라이언트 호출 가능 스크립트 포함에 대한 보안

    P는 클라이언트 호출 가능 스크립트 포함(CCSI)을 무단 사용에 방지합니다. 고객 애플리케이션에 생성된 모든 CCSI 레코드의 경우 보안 위험을 줄이는 데 도움이 될 수 있는 권장 사항이 표시됩니다.

    CCSI를 생성할 때 시스템은 아직 구성되지 않은 경우 다음과 같은 보안 권장 사항을 표시합니다.

    • CCSI에 공용 액세스 권한이 없는 경우 액세스 제어를 추가하거나 정의합니다.
    • 스크립트가 데이터베이스를 쿼리하는 경우 보안을 강화하려면 GlideRecord API 대신 GlideRecordSecure를 사용합니다.

      CCSI 보안 권장 사항.

      주:
      보안 권장 사항 메시지를 사용 안함으로 설정하려면 sys_properties 테이블에서 glide.script.ccsi.customer_scoped.security_msgs_enabled 속성을 false 로 설정하십시오. 기본값은 true로 설정됩니다.

    보안 규정 준수에 대한 자세한 내용은 인스턴스 보안 강화 설정을 참조하십시오.

    Discovery 스크립트 포함

    검색 스크립트 포함은 작업을 수행하는 검색 데 사용할 수 있는 JavaScript 클래스를 정의합니다.

    주:
    discovery_admin 역할을 가진 사용자는 스크립트 포함을 작성할 수 있습니다. 서버 측 및 클라이언트 측 스크립팅에 대한 모범 사례를 따라 보안 문제를 방지합니다. 자세한 내용은 지식 문서 KB0550828 참조하십시오.

    GlideRecordUtil을 사용하여 GlideRecord 작업

    GlideRecordUtil 은 GlideRecord 검색를 사용하는 동안 유용한 메서드를 제공하는 유틸리티 클래스입니다. 사용 가능한 메서드에 대한 설명은 GlideRecordUtil 을 참조하십시오.

    GlideRecord 인스턴스 가져오기

    지정된 구성 항목과 올바른 클래스 및 테이블의 GlideRecord 인스턴스를 가져오려면 getCIGR(sys_id) 메서드를 사용하십시오. 예를 들어, 다음 코드는 sys_id가 2dfd7c8437201000deeabfc8bcbe5d56인 CI의 GlideRecord를 가져옵니다.
    var now_GR = new GlideRecordUtil().getCIGR("2dfd7c8437201000deeabfc8bcbe5d56");
    클래스 유형을 모른 채 계층 구조 테이블을 검색하려면 getGR(base_table, sys_id) 메서드를 사용합니다. 예를 들어 컴퓨터 클래스 CI에 대한 GlideRecord를 가져오려면 컴퓨터 클래스, Windows 서버 또는 Linux 서버 클래스인지 구분해야 할 수 있습니다. 이 메서드를 사용하면 올바른 클래스의 GlideRecord가 보장됩니다. 클래스마다 특성이 다릅니다. 이 사용 사례 Windows 에서 서버는 서버와 다른 속성을 갖습니다 Linux . 다음 예는 해당 속성을 사용하여 올바른 클래스에서 GlideRecord를 가져오는 방법을 보여줍니다.
    var now_GR = new GlideRecordUtil().getGR( "cmdb_ci_computer", "2dfd7c8437201000deeabfc8bcbe5d56");

    GlideRecord에서 모든 필드 가져오기

    getFields(now_GR) 메서드는 지정된 GlideRecord에 존재하는 모든 필드 또는 속성의 JavaScript 객체(예: 해시맵)를 반환합니다.
    var now_GR = new GlideRecordUtil().getGR("cmdb_ci_computer", "2dfd7c8437201000deeabfc8bcbe5d56");
    var fields = new GlideRecordUtil().getFields(now_GR);
    gs.log(fields.join(" ")); // List all the fields that are in a computer CI

    GlideRecord 객체 필드 채우기

    populateFromGR(hashmap, gr, ignore) 메서드를 사용하면 GlideRecord 객체를 가져와서 해당 필드와 값을 JavaScript 객체에 채울 수 있습니다. 세 번째 인수(ignore)는 특정 필드를 제외할 수 있는 선택적 JavaScript 개체입니다. 예를 들어, GlideRecord의 필드에 대해 sys_created_bysys_updated_by 신경 쓰지 않을 수 있습니다.
    var objectToPopulate = { }; 
    var now_GR = new GlideRecordUtil().getGR("cmdb_ci_computer", "2dfd7c8437201000deeabfc8bcbe5d56"); 
    var ignore = {"sys_created_on": true, "sys_updated_by": true}; 
    new GlideRecordUtil.03().populateFromGR(objectToPopulate, gr, ignore); 
    // Now the objectToPopulate contains field/value pairs from the computer GlideRecord
    mergeToGR(hashmap, gr, ignore) 메서드를 사용하면 필드/값 쌍을 이루는 객체로 GlideRecord를 채울 수 있습니다. ignore 인수는 지정된 필드가 업데이트되는 것을 중지합니다. 다음 코드 예제에서는 컴퓨터 레코드의 name AND os 필드를 업데이트하지만 필드는 sys_created_by 업데이트하지 않습니다.
    var now_GR = new GlideRecordUtil().getGR("cmdb_ci_computer", "2dfd7c8437201000deeabfc8bcbe5d56"); 
    var obj = {"name": "xyz", "os": "windows 2000", "sys_created_by", "aleck.lin"};
    var ignore = {"sys_created_by": true}; 
    new GlideRecordUtil().mergeToGR(obj, gr, ignore);
    gr.update();

    테이블 계층 구조 가져오기

    getTables(table) 메서드는 다음 예제와 같이 테이블 계층 목록을 반환합니다.
    var tables = new GlideRecordUtil().getTables("cmdb_ci_linux_server");
    gs.log(tables.join(",")); 
    // The result would be "cmdb_ci, cmdb_ci_computer, cmdb_ci_server, cmdb_ci_linux_server".

    DiscoveryException 및 AutomationException 사용

    센서 및 센서 관련 스크립트를 작성할 검색 때 DiscoveryException 또는 AutomationException을 사용하여 예외가 에서 발생했음을 나타낼 수 있습니다 검색.

    DiscoveryException 스크립트 포함은 GenericException 클래스를 확장하는 AutomationException을 확장합니다. 다음 예제에서는 DiscoveryException 을 사용하여 예외를 throw합니다.
    function foo() { 
      if(//condition matches) throw new DiscoveryException("The message", "The cause"); }
    첫 번째 인수는 예외의 메시지를 사용하고 두 번째 인수(선택 사항)는 예외의 원인을 사용합니다. 예외를 catch하고 아래 예와 같이 기록할 수도 있습니다.
    try {
      foo(); 
    } 
    catch(e) { 
       if(e instanceof DiscoveryException)
         gs.log("A DiscoveryException occurred. It is " + e. getMessage() + " caused by " + e.getCause()); }

    위의 예제는 AutomationException에도 적용됩니다. DiscoveryException 은 일반적으로 Discovery에 대한 예외 처리를 제공하는 데 사용되는 반면, AutomationException 은 Orchestration 및 검색.