비즈니스 규칙 디버깅
비즈니스 규칙 디버깅은 제품에서 ServiceNow 사용 가능한 자원으로 수행할 수 있습니다.
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 테이블이 좋은 예입니다. 아래 스크립트는 현재 sys_id에 대해 확장된 테이블(sc_task)을 쿼리한 다음 상위 테이블(작업)에서 일치하는 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);
}
}