비즈니스 규칙 디버깅

  • 릴리스 버전: Yokohama
  • 업데이트 날짜 2025년 01월 30일
  • 읽기3분
  • 비즈니스 규칙 디버깅은 제품에서 사용할 수 있는 자원을 사용하여 수행할 수 있습니다 ServiceNow .

    1. 도구

    프로세스의 첫 번째 단계는 무엇이 잘못되었는지 파악하는 데 도움이 되는 도구를 식별하는 것입니다.

    표 1. 디버깅 도구
    디버깅 도구 설명
    시스템 딕셔너리 다음으로 이동 시스템 정의 > 딕셔너리. 딕셔너리는 인스턴스 내의 모든 테이블 목록을 제공하며 정보를 찾으려고 할 때 매우 유용할 수 있습니다.
    시스템 로그 다음으로 이동 시스템 로그 > 시스템 로그. 로그에 정보를 기록할 수 있는 경보 설명을 비즈니스 규칙에 배치할 수 있습니다.
    비즈니스 규칙 디버그(상세 정보) 다음으로 이동 시스템 진단 > 세션 디버그 > 비즈니스 규칙 디버그(상세 정보). 이 디버깅 모듈은 결과 비즈니스 규칙을 표시합니다. 이 모듈을 사용하여 조건이 충족되고 값이 예상대로 설정되는지 확인합니다.
    경보 메시지 페이지, 필드 또는 로그 파일에 메시지를 인쇄할 수 있는 여러 시스템 기능이 있습니다. 스크립팅 경보, 정보 및 오류 메시지 문서를 참조하십시오.
    비즈니스 규칙 예시 때로는 비즈니스 규칙 오류 메시지를 포함하여 다른 사람이 작성한 스크립트에서 또는 OR 쿼리를 작성하여 원하는 내용을 찾을 수 있습니다.
    GlideRecord 정보 데이터베이스에 정보를 쿼리하는 데 사용되는 기본 구문입니다. 스크립트에서 테이블 쿼리 문서를 참조하십시오. GlideRecord에는 집계 지원도 포함됩니다.

    2. 변수

    다음 단계는 비즈니스 규칙의 동작에 대한 인사이트를 얻는 것입니다. 삽입을 제외한 모든 작업에 대해 쿼리를 사용하여 기록을 가져올 가능성이 높습니다.

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

    쿼리가 실제로 레코드를 반환하는지 확인하려면 gs.addInfoMessage 를 사용하여 화면 상단에 정보를 표시할 수 있습니다.

    var rec = new GlideRecord('incident');
    rec.addQuery('active',true); 
    rec.query();
    gs.addInfoMessage("This is rec.next: " + rec.next());
    while (rec.next()) {
     gs.print(rec.number + ' exists');
     }

    쿼리에서 반환된 기록이 없으면 다음이 표시됩니다.

    This is rec.next: false

    이 기술을 사용하여 비즈니스 규칙 내의 모든 변수에 예상 값이 포함되어 있는지 확인합니다.

    팁:
    필요한 경우 스크립트를 개별 조각으로 나누고 각 부분이 전체와 별도로 작동하는지 확인한 다음 한 번에 한 단계씩 다시 합칩니다.

    3. 정보 찾기

    마지막 단계는 규칙에서 찾고 있는 정보를 어디에서 찾을 수 있는지 확인하는 것입니다.

    ServiceNow 애플리케이션에서는 한 테이블이 다른 테이블을 확장할 수 있습니다. 즉, 정보를 검색할 때 원하는 내용을 찾으려면 상위 테이블에서 확장된 테이블의 sys_id 쿼리해야 할 수 있습니다.

    작업 테이블을 확장하는 sc_task 테이블이 좋은 예입니다. 아래 스크립트는 확장된 테이블(sc_task)에서 현재 sys_id 쿼리한 다음 상위 테이블(작업)에서 일치하는 sys_id 있는 기록을 쿼리한 다음 작업 메모 필드를 출력합니다.

    var kids = new GlideRecord('sc_task');
    kids.query();
     
    gs.addInfoMessage("This is requested item number: " + current.number);
    gs.print("This is the requested item number: " + current.number);
     
    while (kids.next()) { 
     var parents = new GlideRecord('task');
     parents.addQuery('sys_id', '=', kids.sys_id);
     parents.query();
     
     while(parents.next()) {
      gs.addInfoMessage("This is task number: " + parents.number);
      gs.print("This is task number: " + parents.number);
      gs.addInfoMessage("These are the work notes: " + parents.work_notes);
      gs.print("These are the work notes: " + parents.work_notes);
      }
     
     }