유용한 예약 스크립트
비즈니스 규칙 스크립트는 비즈니스 규칙이 수행하는 작업을 지정합니다. 일반적으로 스크립트에는 현재 기록과 같은 시스템의 항목을 참조하기 위해 미리 정의된 전역 변수가 포함됩니다. 전역 변수는 모든 비즈니스 규칙에서 사용할 수 있습니다.
일정에 따라 기간 계산
유형: 비즈니스 규칙 업데이트/삽입 전
설명: 비즈니스 기간은 특정한 생성 및 사용 일정에 따라 인시던트의 오픈에서 종결까지의 기간을 계산합니다. 지정된 일정이 없는 경우 스크립트는 쿼리에서 반환된 첫 번째 일정을 사용합니다.
스크립트 예:
var gr_rec = new GlideRecord('incident');
gr_rec.get('ed92e8d173d023002728660c4cf6a7bc');
if (gr_rec.incident_state == 6) {
var dur = calcDurationSchedule(gr_rec.opened_at, gr_rec.sys_updated_on);
}
function calcDurationSchedule(start, end){
// Get the user
var usr = new GlideRecord('sys_user');
usr.get(gs.getUserID());
// Create schedule - pass in the sys_id of your standard work day schedule and pass in the users timezone
var sched = new GlideSchedule('08fcd0830a0a0b2600079f56b1adb9ae',usr.time_zone);
// Get duration based on schedule/timezone
return(sched.duration(start.getGlideObject(), end.getGlideObject()));
}예정된 종료 날짜 확인
유형: 예약된 스크립트.
설명: 이 스크립트는 90일, 50일 또는 10일(계약 기간 필드에 따라 다름)에 예정된 계약의 종료 날짜를 야간에 확인합니다.
스크립트 예:
function contractNoticeDue(){
var now_GR = new GlideRecord("contract");
now_GR.addQuery("u_contract_status","Active");
now_GR.query();
while(now_GR.next()){
if((now_GR.u_termination_date<= gs.daysAgo(-90))&&(now_GR.u_contract_duration=="Long")){
now_GR.u_contract_status="In review";}
elseif((now_GR.u_termination_date<= gs.daysAgo(-50))&&(now_GR.u_contract_duration=="Medium")){
now_GR.u_contract_status="In review";}
elseif((now_GR.u_termination_date <= gs.daysAgo(-10))&&(now_GR.u_contract_duration=="Short")){
now_GR.u_contract_status="In review";}
now_GR.update();
}
}- 두 날짜 필드 비교
- XML 페이로드를 구문 분석하는 중입니다.
- 비즈니스 규칙에서 데이터베이스 작업 중단.
- 비즈니스 규칙을 트리거하는 운영을 지정합니다.
- 스크래치패드와 디스플레이 비즈니스 규칙을 사용하여 사용자가 양식을 로드하기 직전에 양식 값을 변경합니다.
- 조건 작성기에서와 같이 OR 조건을 사용합니다.
서버 측 스크립트에 사용할 수 있는 시스템의 스크립팅 기능을 활용할 수도 있습니다.
비즈니스 규칙 양식의 옵션을 사용하여 스크립트를 작성할 필요 없이 조건을 작성하고, 필드 값을 설정하고, 경보 메시지를 표시할 수 있습니다.
비즈니스 규칙에서 데이터베이스 작업 중단
이전 비즈니스 규칙 스크립트 중에 current.setAbortAction(true) 메서드를 사용하여 현재 데이터베이스 작업을 취소하거나 중단할 수 있습니다.
예를 들어, 삽입 작업 중에 이전 비즈니스 규칙이 실행되고 스크립트에 current.setAbortAction(true)를 호출 하는 조건이 있는 경우 current에 저장된 새 레코드는 데이터베이스에 만들어지지 않습니다.
자동 채우기 기능 추가
자동 채우기 추가 기능은 인시던트 템플릿, 자동 할당, 빠른 호출, 호출 스크립트 또는 자동 채우기라고도 합니다.
선택한 하위 범주를 기준으로 간단한 설명을 자동으로 채우고 싶다고 가정해 보겠습니다. 먼저 조회 테이블을 만든 다음 키 필드(이 경우 Subcategory )와 자동으로 채워진 필드인 Short Description을 채웁니다. 테이블에 Subcategory = Password 및 Short Description = Password Reset인 기록이 있다고 가정해 보겠습니다. 사용자가 인시던트 양식에서 암호 의 하위 범주를 선택하면 클라이언트 스크립트가 일치하는 기록을 조회하고 짧은 설명을 암호 재설정과 동일하게 설정합니다. 클라이언트 스크립트 설정... 유형 = onChange, 테이블 이름 = 인시던트, 필드 이름 = 하위 범주.
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading) { return; }
var newrec = gel('sys_row');
//Check if new record
if (newrec.value == -1) {
var lookup = new GlideRecord('u_short_desc_lookup');
lookup.addQuery('u_subcategory', g_form.getValue('subcategory'));
lookup.query();
var temp; //temp var - reusable
if (lookup.next()) {
temp = lookup.u_short_description;
if (null != temp) { //Set the form value from lookup if there is a lookup value
g_form.setValue('short_description', temp); }
else {
g_form.setValue('short_description', "" ); } }
else {
//If a lookup record does not exist based on lookup.addQuery
//Then set to UNDEFINED or NULL depending on type
g_form.setValue('short_description', ""); } }
}콜 센터 직원이 유용한 정보를 수집하여 기술자에게 전달하도록 많은 필드를 채우거나 콜 스크립트 질문을 의견 필드에 가져올 수도 있습니다. 유사한 기능을 수행하는 할당 규칙, 템플릿 및 마법사가 이미 내장되어 있습니다.
예시 스크립트: 기본 쿼리 전 비즈니스 규칙
데이터베이스 쿼리가 만들어지기 전에 실행되는 쿼리 비즈니스 규칙을 사용하여 사용자가 특정 기록에 액세스하지 못하도록 할 수 있습니다.
인시던트 기록에 대한 액세스를 제한하는 기본 비즈니스 규칙의 다음 예를 고려하십시오.
| 이름 | 테이블 | 시기 |
|---|---|---|
| 인시던트 쿼리 | 인시던트 | before, 쿼리 |
예시 스크립트
if(!gs.hasRole("itil")&& gs.isInteractive()){
var u = gs.getUserID();
var qc = current.addQuery("caller_id", u).addOrCondition("opened_by", u).addOrCondition("watch_list","CONTAINS", u);
gs.print("query restricted to user: "+ u);}
평일 일정 스크립트
유형: 비즈니스 규칙/클라이언트 스크립트
var go ='false';
var now =new Date();
// Correct time zone, which is by default GMT -7
now.setHours(now.getHours()+8);
var day = now.getDay();
// No go on Saturday or Sunday
if(day !=0&& day !=6){
// (your script here)
}현재 날짜에 따라 날짜 필드 설정
function setCabDate(){
var today =new Date();
var thisDay = today.getDay();
//returns 0 for Sunday, 1 for Monday, etc. thru 6 for Saturday.
var thisMon =new GlideDateTime();
thisMon.setDisplayValue(gs.beginningOfThisWeek());
var nextMon = thisMon.getNumericValue();
nextMon +=(1000*60*60*24*7);
if((thisDay <4)&&(thisDay >0))
//if today is Mon thru Wed (thisDay = 1, 2, or 3), set cab to this coming Monday.
current.u_req_cab_rev_date.setDateNumericValue(thisMon.getNumericValue());
elseif((thisDay >=4)||(thisDay ==0))
//if today is Thurs thru Sun (thisDay = 4, 5, 6, or 0), set cab to next Monday.
current.u_req_cab_rev_date.setDateNumericValue(nextMon);
}모든 날짜/시간 필드의 입력을 확인하려면 확인 스크립트(). 날짜/시간 형식은 이 스크립트에 하드 코딩되어 있으므로 인스턴스의 날짜/시간 형식과 일치해야 합니다. 인스턴스의 날짜/시간 형식이 변경되면 확인 스크립트를 업데이트해야 합니다.
function validate(value){
// empty fields are still valid dates
if(!value)returntrue;
// We "should" have the global date format defined always defined. but there's always that edge case...
if(typeof g_user_date_time_format !=='undefined')return isDate(value, g_user_date_time_format);
// if we don't have that defined, we can always try guessing
return parseDate(value)!==null;}