스크립트 포함
스크립트 포함은 서버에서 실행되는 JavaScript를 저장하는 데 사용됩니다.
서버 스크립트에서 사용할 JavaScript 함수 및 클래스를 저장하는 스크립트 포함을 만듭니다. 각 스크립트 포함은 객체 클래스 또는 함수를 정의합니다.
스크립트 포함은 요청 시에만 로드되므로 전역 비즈니스 규칙 대신 스크립트 포함 사용을 고려하십시오. 자세한 내용은 AND 검색 스크립트 포함 문서를 참조하십시오클라이언트 호출 가능 스크립트 포함에 대한 개인 정보 설정.
스크립트에 대한 추가 예는 다음 문서를 유용한 스크립트참조하십시오.
스크립트 포함 양식
스크립트 포함에는 이름, 설명 및 스크립트가 포함됩니다. 또한 활성 상태인지 여부와 클라이언트 스크립트에서 호출할 수 있는지 여부도 지정합니다. 스크립트 포함 양식을 사용하여 기존 스크립트 포함을 보거나 새 스크립트 포함을 만듭니다.
스크립트 포함에 액세스하려면 다음으로 이동하십시오. .
| 필드 | 설명 |
|---|---|
| 이름 | 스크립트 포함의 이름입니다. 클래스를 정의하는 경우 클래스 이름, 프로토타입 및 형식과 일치해야 합니다. 클래스가 없는(요청 시) 스크립트 포함을 사용하는 경우 이름이 함수 이름과 일치해야 합니다. |
| API 이름 | 스크립트 포함의 내부 이름입니다. 범위를 벗어난 애플리케이션에서 스크립트 포함을 호출하는 데 사용됩니다. |
| Glide AJAX 사용 | 스크립트 포함은 클라이언트 스크립트, 목록/보고서 필터, 참조 한정자 또는 URL의 일부로 지정된 경우에 사용할 수 있습니다. 클라이언트 호출 가능 스크립트 포함은 GlideAjax 에서 호출되며 사용자가 스크립트 포함과 연결된 ACL을 만족해야 합니다. 선택하면 접근 제어 관련 링크를 사용할 수 있습니다. 자세한 내용은 클라이언트 호출 가능 스크립트 포함에 대한 개인 정보 설정 문서를 참조하십시오. |
| 모바일 호출 가능 | 스크립트 포함은 모바일 장치에서 호출된 클라이언트 스크립트에 사용할 수 있습니다. |
| 샌드박스 사용 | 스크립트 포함은 쿼리 조건과 같은 스크립트 샌드박스에서 호출됩니다. 이 방법에는 인증이 필요하지 않습니다. 샌드박스에 대한 자세한 내용은 다음 문서를 참조하십시오 Configuring Script sandbox property. |
| 애플리케이션 | 이 스크립트 포함이 있는 애플리케이션입니다. |
| 다음에서 접근 가능 | 이 스크립트에 액세스할 수 있는 다음과 같은 애플리케이션을 설정합니다.
|
| 활성 | 선택하면 스크립트 포함을 사용합니다. 스크립트 포함을 사용하지 않으려면 활성 필드를 선택 취소합니다. |
| 설명 | 스크립트 포함에 대한 설명이 포함된 컨텐츠를 제공합니다. |
| 스크립트 | 다른 스크립트에서 호출될 때 실행할 서버 측 스크립트를 정의합니다. 스크립트는 단일 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();클라이언트 호출 가능 스크립트 포함
CCSI(클라이언트 호출 가능 스크립트 포함)를 사용하면 클라이언트 스크립트, 목록/보고서 필터, 참조 한정자 또는 URL의 일부로 지정된 경우 스크립트 포함을 사용할 수 있습니다.
시작하기 전에
필요한 역할: 관리자
프로시저
클라이언트 호출 가능 스크립트 포함에 대한 개인 정보 설정
CCSI(클라이언트 호출 가능 스크립트 포함)에 대한 개인 정보 설정에 따라 클라이언트 호출 가능 스크립트 포함에 액세스할 수 있는 사용자가 결정됩니다.
개인 정보 보호 설정
비공개 개인 정보 설정은 공개 페이지에 액세스하는 게스트가 클라이언트 호출 가능 스크립트 포함에 액세스할 수 없음을 의미합니다. 로그인하지 않은 사용자는 비공개 스크립트를 실행할 수 없습니다.
공개 개인정보 보호 설정
공개 개인 정보 설정은 로그인하지 않은 사용자가 적절한 HTTP 요청을 만드는 클라이언트 스크립트를 실행할 수 있음을 의미합니다. 클라이언트 스크립트가 기밀 정보를 제공하는 경우 보안 문제가 발생할 수 있습니다.
- GlideSystemAjax
- SysMessageAjax
- KnowledgeMessagingAjax
- KnowledgeAjax
- PasswordResetAjax
모든 클라이언트 호출 가능 스크립트 포함에 개인정보 보호 설정
모든 클라이언트 호출 가능 스크립트 포함에서 개인 정보 설정을 변경합니다.
모든 클라이언트 호출 가능 스크립트 포함에 대한 추가 제어를 제공하기 위해 관리자는 glide.script.ccsi.ispublic 속성을 추가할 수 있습니다. 이 속성은 클라이언트 호출 가능 스크립트 포함을 모두 공개 또는 비공개로 설정하여 가시성을 변경합니다. 다음과 같이 속성을 구성합니다.
| 제목 | 속성 |
|---|---|
| 이름 | glide.script.ccsi.ispublic |
| 유형 | true|false |
| 값 | 거짓 |
단일 클라이언트 호출 가능 스크립트 포함에서 개인정보 보호 변경
isPublic() 함수를 추가하여 단일 클라이언트 호출 가능 스크립트 포함에 대한 개인 정보 설정을 변경합니다.
isPublic() 설정이 속성보다 glide.script.ccsi.ispublic 우선합니다. 예를 들어, 속성이 false로 설정되어 클라이언트 호출 가능한 모든 스크립트 포함을 비공개로 만들고 스크립트가 isPublic() 을 true로 설정하면 스크립트는 public입니다.
단일 클라이언트 호출 가능 스크립트 포함에 대한 개인 정보를 변경하려면 스크립트 포함에 다음 메서드를 추가합니다.
isPublic:function(){return[true/false];},var NewInclude =Class.create();
NewInclude.prototype={
initialize:function(){},
myFunction:function(){//Put function code here},
isPublic:function(){return false;},
type:'NewInclude'};
클라이언트 호출 가능 스크립트 포함에 대한 보안
무단 사용에 대해 클라이언트 호출 가능 스크립트 포함(CCSI)을 등록합니다. 고객 애플리케이션에서 생성된 모든 CCSI 레코드의 경우 보안 위험을 줄이는 데 도움이 될 수 있는 권장 사항이 표시됩니다.
CCSI를 작성할 때 시스템은 아직 구성되지 않은 경우 다음 보안 권장사항을 표시합니다.
- CCSI에 공용 액세스 권한이 없는 경우 액세스 제어를 추가하거나 정의합니다.
- 스크립트가 데이터베이스를 쿼리하는 경우 보안 강화를 위해 GlideRecord API 대신 GlideRecordSecure를 사용합니다.주:보안 권장 사항 메시지를 사용하지 않도록 설정하려면 sys_properties 테이블에서 glide.script.ccsi.customer_scoped.security_msgs_enabled 속성을 false 로 설정합니다. 기본값은 true로 설정됩니다.
보안 준수에 대한 자세한 내용은 인스턴스 보안 강화 설정을 참조하십시오.
검색 스크립트 포함
디스커버리 스크립트 포함은 작업을 수행하는 디스커버리 데 사용할 수 있는 JavaScript 클래스를 정의합니다.
GlideRecordUtil을 사용하여 GlideRecord 작업
GlideRecordUtil 은 실행 중 디스커버리GlideRecord를 사용하는 데 유용한 메서드를 제공하는 유틸리티 클래스입니다. 사용 가능한 메서드에 대한 설명은 GlideRecordUtil 을 참조하십시오.
GlideRecord 인스턴스 가져오기
var now_GR = new GlideRecordUtil().getCIGR("2dfd7c8437201000deeabfc8bcbe5d56");var now_GR = new GlideRecordUtil().getGR( "cmdb_ci_computer", "2dfd7c8437201000deeabfc8bcbe5d56");GlideRecord에서 모든 필드 가져오기
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 CIGlideRecord 객체 필드 채우기
var objectToPopulate = { };
var now_GR = new GlideRecordUtil().getGR("cmdb_ci_computer", "2dfd7c8437201000deeabfc8bcbe5d56");
var ignore = {"sys_created_on": true, "sys_updated_by": true};
new GlideRecordUtil().populateFromGR(objectToPopulate, now_GR, ignore);
// Now the objectToPopulate contains field/value pairs from the computer GlideRecordvar 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();테이블 계층 구조 가져오기
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을 사용하여 예외가 .디스커버리
function foo() {
if(//condition matches) throw new DiscoveryException("The message", "The cause"); }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 및 디스커버리.