스크립트에서 테이블 쿼리

  • 릴리스 버전: Xanadu
  • 업데이트 날짜 2024년 08월 01일
  • 읽기12분
  • GlideRecord API의 메서드를 사용하여 테이블에서 모든 기록을 반환하거나, 특정 조건을 만족하는 테이블에서 기록을 반환하거나, 단일 테이블 또는 텍스트 인덱스 그룹의 여러 테이블에서 문자열을 포함하는 기록을 반환할 수 있습니다.

    GlideRecord API를 사용하여 테이블을 쿼리합니다. API 참조는 GlideRecord - 범위 지정을 참조하십시오.

    테이블에서 모든 기록 반환

    테이블을 쿼리하려면 먼저 GlideRecord 객체를 생성합니다. GlideRecord를 생성하려면 스크립트에서 다음을 생성합니다.
    var target = new GlideRecord('incident');

    GlideRecord를 생성하면 인시던트 테이블의 GlideRecord 객체인 대상 변수가 생성됩니다.

    인시던트 테이블의 모든 기록을 처리하려면 다음 스크립트를 추가합니다.
    target.query(); // Issue the query to the database to get all records 
    while (target.next()) { 
      // add code here to process the incident record 
    }

    이 스크립트는 데이터베이스에 query() 를 실행합니다. next()를 호출할 때마다 처리를 위해 다음 레코드가 로드됩니다.

    쿼리 조건을 만족하는 테이블에서 기록 반환

    대부분의 경우 특정 레코드 또는 특정 레코드 집합을 검색하려고 하며 가져오려는 레코드를 정의하는 몇 가지 조건(쿼리 조건)이 있습니다. 예를 들어 우선순위 값이 1인 모든 인시던트 기록을 가져오려 한다고 가정해 보겠습니다. 이를 수행하는 코드는 다음과 같습니다.
    var target = new GlideRecord('incident'); 
    target.addQuery('priority',1);
    target.query(); // Issue the query to the database to get relevant records 
    while (target.next()) { 
      // add code here to process the incident record 
    }
    예제 스크립트에는 target.addQuery('priority', 1);가 포함되어 있습니다. 이 라인은 필드가 priority 1과 같은 기록만 원한다는 것을 나타냅니다. 일반적으로 수행하려는 대부분의 쿼리는 같음 쿼리입니다. 필드가 값과 동일한 기록을 찾을 위치를 쿼리합니다. 따라서 같음 연산자를 제공할 필요가 없습니다. 그러나 필드가 priority 1보다 큰 모든 인시던트를 찾고 싶다고 가정해 보겠습니다. 이 경우 쿼리에 적용할 연산자를 제공합니다.
    var target = new GlideRecord('incident') ; 
    target.addQuery('priority','>',1);
    target.query(); // Issue the query to the database to get relevant records 
    while (target.next()) { 
      // add code here to process the incident record 
    }

    문자열이 포함된 테이블에서 기록 반환

    "123TEXTQUERY321" 예약 이름을 사용하여 테이블의 모든 필드에서 문자열 일치를 검색합니다. 예를 들어 이 스크립트는 '이메일' 문자열이 포함된 필드 값이 있는 인시던트 테이블의 기록을 반환합니다.

    var now_GR = new GlideRecord('incident');
    gr.addQuery('123TEXTQUERY321', 'email');
    gr.query();

    '123TEXTQUERY321'addQuery() 메서드의 매개 변수에 대해 예약된 name 옵션입니다. 인코딩된 쿼리 문자열에서 이 옵션을 사용할 수 있습니다. 예를 들어, gr.addQuery('123TEXTQUERY321', 'email'); 대신 gr.addEncodedQuery('123TEXTQUERY321=email')를 사용할 수 있습니다.

    문자열 검색은 대소문자를 구분하지 않습니다. 이메일, 이메일 또는 이메일을 검색하든 시스템은 동일한 결과를 반환합니다.

    주:
    문자열 검색을 사용하여 쿼리하려면 먼저 검색할 테이블에 대한 텍스트 인덱싱(및 선택적으로 검색 속성)을 구성해야 합니다. 자세한 내용은 인덱싱 및 검색을 위한 단일 테이블 구성을 참조하세요.

    문자열이 포함된 텍스트 인덱스 그룹의 여러 테이블에서 기록을 반환합니다.

    '123TEXTINDEXGROUP321' 예약 이름을 사용하여 텍스트 인덱스 그룹에서 테이블의 문자열을 검색합니다. 이 옵션은 텍스트 인덱스 그룹의 설정을 사용하여 계산된 관련성 점수와 함께 결과를 반환합니다.

    주:
    텍스트 인덱스 그룹에서는 한 번에 하나의 테이블만 쿼리할 수 있습니다. 여러 단일 테이블 쿼리를 실행하고 결과를 병합하여 관련성 점수별로 정렬하려는 경우 이 옵션을 사용합니다. 이 옵션의 장점은 개별 테이블 쿼리에 대한 검색 결과 관련성 점수가 텍스트 인덱스 그룹의 모든 테이블에 대해 일관되게 정규화된다는 것입니다.
    예를 들어 이 스크립트는 '포털' 인덱스 그룹에 대해 계산된 관련성 점수와 함께 '이메일'이라는 키워드가 포함된 지식 테이블의 기록을 반환합니다.
    var now_GR = new GlideRecord('kb_knowledge');
    gr.addQuery('123TEXTQUERY321', 'email');
    gr.addQuery('123TEXTINDEXGROUP321', 'portal');
    gr.query();

    검색하려는 '포털' 인덱스 그룹의 각 추가 테이블에 대해 유사한 쿼리를 만든 다음 개별 쿼리의 결과를 병합하여 관련성 점수가 가장 높은 결과를 먼저 표시할 수 있습니다. 이러한 모든 검색 쿼리는 동일한 텍스트 인덱스 그룹 검색 설정을 사용하기 때문에 결과에 대한 관련성 점수는 모두 일관되게 정규화됩니다. gr.addQuery('123TEXTINDEXGROUP321', 'portal') 메서드를 사용하지 않고 동일한 테이블 집합을 검색한 경우 개별 쿼리의 관련성 점수가 다르게 정규화되고 병합된 결과 집합을 정렬하는 데 유용한 기준이 되지 않습니다.

    '123TEXTINDEXGROUP321'addQuery() 메서드의 매개 변수에 대해 예약된 name 옵션입니다. 인코딩된 쿼리 문자열에서 이 옵션을 사용할 수 있습니다. 예를 들어 gr.addQuery('123TEXTINDEXGROUP321', 'portal') 대신 gr.addEncodedQuery('123TEXTINDEXGROUP321=portal')를 사용할 수 있습니다.

    다중 테이블 문자열 검색은 대/소문자를 구분하지 않습니다. 이메일, 이메일 또는 이메일을 검색하든 시스템은 동일한 결과를 반환합니다.

    주:
    인덱스 그룹의 테이블을 쿼리하려면 먼저 해당 테이블에 대한 텍스트 인덱싱 및 검색 특성을 구성하고 인덱스 그룹에 포함해야 합니다. 자세한 내용은 인덱싱 및 검색을 위한 여러 테이블 구성을 참조하세요. 인덱스 그룹의 모든 테이블은 V4 인덱싱 형식을 사용해야 합니다.

    사용 가능한 JavaScript 연산자

    addQuery() 요청 내에서 사용할 수 있는 연산자에 대해 설명합니다.

    표 1. 사용 가능한 JavaScript 연산자
    필드 정의 add쿼리
    = 필드는 제공된 값과 같아야 합니다. addQuery ( '우선 순위', '=', 1);
    > 필드는 제공된 값보다 커야 합니다. addQuery ( '우선 순위', '>', 1);
    < 필드는 제공된 값보다 작아야 합니다. addQuery ( '우선 순위', '<', 3);
    >= 필드는 제공된 값보다 크거나 같아야 합니다. addQuery('우선순위', '>=', 1);
    <= 필드는 제공된 값보다 작거나 같아야 합니다. addQuery('우선순위', '<=', 3);
    != 필드는 제공된 값과 같을 수 없습니다. addQuery('우선순위', '!=', 1);
    STARTSWITH 필드는 제공된 값으로 시작해야 합니다. 오른쪽에 표시된 예는 short_description 필드가 오류 텍스트로 시작하는 모든 기록을 반환합니다. addQuery('short_description', 'STARTSWITH', '오류');
    포함 필드에는 텍스트의 어딘가에 제공된 값이 포함되어야 합니다. 오른쪽에 표시된 예는 short_description 필드에 필드 곳곳에 오류 텍스트가 포함된 모든 기록을 반환합니다.
    주:
    LIKE 연산은 지원되지 않습니다. 관리자는 쿼리에 CONTAINS를 사용해야 합니다.
    addQuery('short_description', '포함', '오류');
    IN 쉼표를 허용하는 값 맵을 가져오고 다른 요구 사항을 충족하는 기록 컬렉션을 수집합니다. Select * <table> from where short_description IN ('Error', 'Success', 'Failure')로 동작하며, 이는 Select * from <table> where short_description='Error'와 동일합니다. 예를 들어 특정 Activity에 속하는 모든 변수 값을 쿼리하려면 이 절을 IN 사용하고 해당 sys_ids 맵 또는 쉼표로 구분된 목록에 저장합니다. 그런 다음 변수 값 테이블을 쿼리하고 이 sys_ids 목록을 제공합니다. addQuery('short_description', 'IN', '오류,성공,실패');
    ENDSWITH 필드는 제공된 값으로 끝나야 합니다. 오른쪽에 표시된 예는 short_description 필드가 텍스트 오류로 끝나는 모든 기록을 반환합니다. addQuery('short_description', 'ENDSWITH', '오류');
    포함하지 않음 필드의 패턴과 일치하지 않는 기록을 선택합니다. 이 연산자는 빈 필드를 검색하지 않습니다. 빈 값의 경우 "is empty" 또는 "is not empty" 연산자를 사용합니다. 오른쪽에 표시된 예는 short_description 필드에 "Error"라는 단어가 없는 모든 레코드를 반환합니다. addQuery('short_description', '포함하지 않음', '오류');
    에 없음 쉼표를 허용하는 값 맵을 가져오고 다른 요구 사항을 충족하는 기록 컬렉션을 수집합니다. 동작: Select * from <table> where short_description NOT IN ('Error')입니다. addQuery ( 'short_description', 'NOT IN', '오류, 성공, 실패');
    INSTANCEOF 확장 테이블에 대해 지정된 "클래스"의 기록만 검색하는 특수 연산자입니다. 오른쪽의 코드 예제에서는 컴퓨터로 분류된 모든 구성 항목을 검색하는 방법을 보여 줍니다. addQuery('sys_class_name', 'INSTANCEOF', 'cmdb_ci_computer');

    필터 및 쿼리에 사용할 수 있는 연산자에 대한 자세한 내용은 을 참조하십시오 Operators available for filters and queries.

    NULL 또는 NOT NULL인 데이터를 검색하는 데 사용할 수 있는 몇 가지 특수 메서드도 있습니다. short_description 필드가 제공되지 않은 모든 인시던트를 검색하려면 다음 쿼리를 사용합니다.
    var target = new GlideRecord('incident'); 
    target.addNullQuery('short_description');
    target.query(); // Issue the query to the database to get all records 
    while (target.next()) { 
      // add code here to process the incident record 
    }
    short_description이 제공된 모든 인시던트를 찾으려면 다음 쿼리를 사용합니다.
    var target = new GlideRecord('incident'); 
    target.addNotNullQuery('short_description');
    target.query(); // Issue the query to the database to get all records 
    while (target.next()) { 
      // add code here to process the incident record 
    }

    GlideRecord API 및 사용 가능한 메서드에 대한 자세한 내용은 GlideRecord를 참조하십시오.

    GlideRecord 쿼리 예시

    이 예시에서는 다양한 GlideRecord 쿼리를 수행하는 방법을 보여줍니다.

    쿼리

    var rec = new GlideRecord('incident');
    rec.query(); 
    while(rec.next()) { 
      gs.print(rec.number + ' exists'); }

    업데이트

    var rec = new GlideRecord('incident');
    rec.addQuery('active',true);
    rec.query(); 
    while(rec.next()) { 
      rec.active = false;
      gs.print('Active incident ' + rec.number = ' closed');
      rec.update(); }

    삽입

    var rec = new GlideRecord('incident');
    rec.initialize();
    rec.short_description = 'Network problem'; 
    rec.caller_id.setDisplayValue('Joe Employee'); 
    rec.insert();

    삭제

    var rec = new GlideRecord('incident');
    rec.addQuery('active',false);
    rec.query(); 
    while(rec.next()) { 
      gs.print('Inactive incident ' + rec.number + ' deleted');
      rec.deleteRecord(); }

    서비스 카탈로그 테이블 쿼리

    서비스 카탈로그 요청 항목 테이블[sc_req_item]의 변수를 직접 쿼리할 수 없습니다. 대신 변수 이름과 값에 대한 두 개의 쿼리를 추가하여 변수 소유권 테이블 [sc_item_option_mtom]를 쿼리합니다. 쿼리는 다대다 관계를 반환하며, 이 관계를 요청한 항목으로 닷워킹할 수 있습니다. 다음 예제에서는 값이 item_value인 변수 item_name가 있는 요청 항목을 찾아 요청 항목 번호를 표시합니다.
    var now_GR = new GlideRecord('sc_item_option_mtom');
    gr.addQuery('sc_item_option.item_option_new.name','item_name');
    gr.addQuery('sc_item_option.value','item_value');
    gr.query();
     
    while(gr.next()) {
      gs.addInfoMessage(gr.request_item.number); }

    자세한 내용은 GlideRecord를 참조하십시오.