유용한 일정 스크립트

  • 릴리스 버전: Yokohama
  • 업데이트 날짜 2025년 01월 30일
  • 읽기10분
  • 비즈니스 규칙 스크립트는 비즈니스 규칙이 수행하는 작업을 지정합니다. 일반적으로 스크립트에는 현재 기록과 같은 시스템의 항목을 참조하는 미리 정의된 전역 변수가 포함됩니다. 전역 변수는 모든 비즈니스 규칙에 사용할 수 있습니다.

    경고:
    여기서 설명하는 사용자 지정은 특정 인스턴스에서 사용하도록 개발되었으며, Now Support에서 지원되지 않습니다. 이 메서드는 있는 그대로 제공되며 구현 전에 철저히 테스트되어야 합니다. 이 사용자 지정에 대한 모든 질문과 의견을 커뮤니티 포럼에 게시합니다.

    일정에 따라 기간 계산

    유형: 비즈니스 규칙 업데이트/삽입 전.

    설명: 업무 기간은 특정 생성 및 사용 일정을 기반으로 인시던트의 열기부터 종결까지의 기간을 계산합니다. 지정된 일정이 없으면 스크립트는 쿼리에서 반환된 첫 번째 일정만 사용합니다.

    스크립트 예:

    아래 예시에서는 인시던트 상태가 해결됨으로 이동할 때 해결 기간을 설정합니다.
    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 = PasswordShort 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', ""); } }
     
     }

    많은 필드를 채우거나 콜 센터 직원이 기술자에게 전달할 좋은 정보를 수집하도록 호출 스크립트 질문을 설명 필드에 가져올 수도 있습니다. 유사한 기능을 수행하는 할당 규칙, 템플릿 및 마법사가 이미 내장되어 있습니다.

    예시 스크립트: 기본 쿼리 전 비즈니스 규칙

    데이터베이스 쿼리가 수행되기 전에 실행되는 쿼리 비즈니스 규칙을 사용하여 사용자가 특정 기록에 액세스하지 못하도록 할 수 있습니다.

    경고:
    여기서 설명하는 사용자 지정은 특정 인스턴스에서 사용하도록 개발되었으며, Now Support에서 지원되지 않습니다. 이 메서드는 있는 그대로 제공되며 구현 전에 철저히 테스트되어야 합니다. 이 사용자 지정에 대한 모든 질문과 의견을 커뮤니티 포럼에 게시합니다.

    인시던트 기록에 대한 액세스를 제한하는 기본 비즈니스 규칙의 다음 예를 고려하십시오.

    표 1. 기본 비즈니스 규칙으로 인시던트 기록에 대한 접근 제한
    이름 테이블 시기
    인시던트 쿼리 인시던트 before, query

    예시 스크립트

    이 예시에서는 itil 역할이 호출 자 또는 오픈한 사람 필드에 나열되어 있지 않은 사용자가 인시던트 기록에 액세스하지 못하도록 합니다. 예를 들어 셀프 서비스 사용자가 인시던트 목록을 열면 제출한 인시던트만 볼 수 있습니다.
    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;}
    그림 1. 날짜/시간 확인
    확인 스크립트 창에는 다음 설명이 표시됩니다. 날짜/시간 필드의 형식을 확인합니다.