클라이언트 측 스크립트 사용 사례

  • 릴리스 버전: Australia
  • 업데이트 날짜 2026년 03월 12일
  • 소요 시간: 16분
  • 클라이언트 측 스크립트의 사용 사례에는 필드 메시지 표시, 양식 색상 변경, 필드 추가 및 UI 라우팅 작업 생성이 포함됩니다.

    서비스 카탈로그 체크 아웃에 필드 추가

    다음은 카트에 담지 않은 레이아웃 매크로를 사용하여 요청 대상 필드 아래의 체크아웃에 회사 필드를 추가하는 예입니다. 즉, glide.sc.use_cart_layoutsFalse입니다.

    시작하기 전에

    필요한 역할: admin

    이 태스크 정보

    이 필드는 제공된 값을 서비스 카탈로그 요청의 회사 필드에 전달합니다.

    이 예에서는 다음과 같은 가정을 합니다.
    • 2단계 체크 아웃을 사용하는 인스턴스입니다. 2단계 체크아웃을 사용할 수 없는 경우 시작하기 전에 활성화하십시오. 자세한 내용은 Service Catalog checkout models 문서를 참조하십시오.
    • 이 예에서는 서비스 카탈로그 요청 양식에서 회사 필드를 채웁니다. 필드가 양식에 나타나지 않으면 시작하기 전에 양식을 구성합니다. 지침은 Personalize a form 문서를 참조하십시오.

    프로시저

    1. 시스템 UI > UI 매크로로 이동하여 servicecatalog_cart_template를 선택합니다.
    2. 숨겨진 변수가 선언된 위치를 찾아 다음 줄을 추가합니다.
      <input type="HIDDEN" name="cart_id" id="cart_id" value="$[sc_cart.sys_id]" />
    3. Requested For 코드를 생성하는 다음 코드를 찾습니다.
      <tr class="header">
      <td width = "30%">
        ${gs.getMessage('Requested for')}:
        </td>
        <td width="70%">
          <label for="requestor_location">${gs.getMessage('Deliver to')}:</label>
        </td>
      </tr>
      <tr><td>$[SP]</td> 
      </tr>
        <tr><td valign="top">
          <j2:if test="$[jvar_can_delta_rf == false]">
            $[sc_cart.requested_for.getDisplayValue()]
          </j2:if>
          <j2:if test="$[jvar_can_delta_rf != false]">
            <g2:catalog_requested_for />
          </j2:if>
        </td>
        <td>
          <textarea id="requestor_location" style="width:100%" rows="4"       name="requestor_location" wrap="soft" onChange="catDeliveryAddress('$[sc_cart.sys_id]', 'requestor_location');"> 
            $[sc_cart.delivery_address]
          </textarea>
        </td>
      </tr>
      <tr>
        <td>$[SP]</td>
      </tr>
    4. 이후에 다음 코드를 추가합니다.
      <tr class="header">
        <td colspan="2">Company</td>
      </tr>
      <tr>
        <td>$[SP]</td>
      </tr>
      <tr>
        <td colspan="2">
          <g2:ui_reference name="core_company" table="core_company" onchange="setCartValue()"/>
        </td>
      </tr>
      <tr>
        <td>$[SP]</td>
      </tr>
      주:
      'ui_reference' 매크로는 참조 필드를 정의합니다. 다양한 필드 유형에 대한 여러 매크로가 있습니다. 이러한 필드 유형의 예는 시스템 UI > UI 매크로에서 볼 수 있습니다. 이러한 매크로는 'ui_'로 시작합니다. 이 예에서 생성된 참조 필드의 이름은 core_company입니다. 자세한 내용은 UI 매크로 문서를 참조하십시오.
    5. 이제 시스템 UI > UI 페이지 로 이동하여 servicecatalog_checkout_one UI 페이지를 선택합니다.
    6. 클라이언트 스크립트 필드에 다음 스크립트를 추가합니다.
      function setCartValue() { 
        var newField = gel('core_company'); 
        var myCart = gel('cart_id'); 
        var cart_item = new GlideRecord('sc_cart_item');
        cart_item.addQuery('cart', myCart.value);
        cart_item.query(); 
        if(cart_item.next()) {
          cart_item.hints = "<hints><entry key='sysparm_processing_hint' value='setfield:request.company=" + newField.value + "'/></hints>";
          cart_item.update(); 
        } 
      }

      이 예에서는 참조 필드를 core_company라고 했고, 요청에서 채워지는 필드는 회사입니다. 다른 필드를 사용하는 경우:

      • var company = gel('core_company'); 줄을 찾아 core_company 체크 아웃의 필드 이름으로 바꿉니다.
      • "cart_item.hints"로 시작하는 줄에서 "request.company"를 요청 티켓에 채울 필드의 이름으로 바꿉니다. 여기서 "request"는 생성 중인 요청이고 "company"는 필드의 이름입니다.

      항목을 주문하면 카탈로그 양식에 회사 필드가 나타납니다.

    자동 채우기 기능 추가

    자동 채우기 추가 기능은 인시던트 템플릿, 자동 할당, 빠른 호출, 호출 스크립트 또는 자동 채우기라고도 합니다.

    선택한 하위 범주를 기준으로 간단한 설명 필드를 자동으로 채우려면 다음을 수행합니다.
    1. 조회 테이블을 생성합니다.
    2. 키 필드인 하위 범주를 채웁니다.
    3. 자동으로 채워진 필드인 간단한 설명을 채웁니다.
    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', ""); } } 
    }

    콜 센터 직원이 좋은 정보를 수집하여 기술자에게 전달할 수 있도록 많은 필드를 채우거나 호출 스크립트 질문을 의견 필드로 끌어올 수 있습니다.

    암호 재설정을 위한 필드 설정
    조회 테이블에는 다음과 같은 키와 자동 채우기 설정이 있는 기록이 있습니다.
    • 하위 범주 = 암호
    • 간단한 설명 = 암호 재설정
    클라이언트 스크립트 설정:
    • 유형 = onChange
    • 테이블 이름 = 인시던트
    • 필드 이름 = 하위 범주

    사용자가 인시던트 양식에서 암호의 하위 범주를 선택하면 클라이언트 스크립트가 일치하는 기록을 조회하여 짧은 설명을 암호 재설정과 동일하게 설정합니다.

    상태 변경 시 양식 색상 변경

    상태 변경 시 양식의 양식 필드 색상을 변경합니다. 스크립트는 HTML DOM을 통해 액세스할 수 있는 페이지에 있는 모든 객체의 속성을 조정하도록 쉽게 변경할 수 있습니다.

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

    이름: 상태 변경 시 양식 색상 변경

    유형: 클라이언트 스크립트

    설명: 상태 변경 시 양식의 양식 필드 색상을 변경합니다. 스크립트는 HTML DOM을 통해 액세스할 수 있는 페이지에 있는 모든 객체의 속성을 조정하도록 쉽게 변경할 수 있습니다.

    스크립트:
    function onChange(control, oldValue, newValue, isLoading) { 
      var elementID = gel("incident.priority");
        switch(newValue) { 
          case "1": elementID.style.backgroundColor = "red"; break; 
          case "2": elementID.style.backgroundColor = "tomato"; break;
          case "3": elementID.style.backgroundColor = "orange"; break;
          case "4": elementID.style.backgroundColor = "yellow"; break;
          case "5": elementID.style.backgroundColor = "green"; break; 
          default: elementID.style.backgroundColor = "white"; break; } }

    UI 라우팅 작업 생성

    이 솔루션을 사용하면 인시던트인지 요청 항목인지 모른 채 서비스 데스크에 기록을 만들 수 있습니다. 그러면 서비스 데스크에서 기록을 적절한 테이블로 라우팅할 수 있습니다.

    시작하기 전에

    필요한 역할: admin

    프로시저

    1. 작업 테이블을 확장하는 새 테이블을 만듭니다(예: 새 호출).
    2. 모듈을 생성하여 새 새 통화 기록을 생성합니다.
    3. 새 호출 테이블에 원하는 필드를 생성합니다.

      새 콜을 인시던트로 라우팅할지 또는 요청 항목으로 라우팅할지 결정하는 데 필요한 필드만 필요합니다. 인시던트 또는 요청 항목에 전달하려는 필드가 양식에 포함되어 있는지 확인합니다. 이 예에서는 양식에 다음이 만들어집니다.

      • 요청 대상 (참조)
      • 위치 (참조)
      • 콜 유형 (인시던트와 요청의 두 가지 값이 있는 선택)
      • 요청 항목 ( sc_cat_item 항목 테이블 참조)
    4. 몇 가지 UI 정책을 추가하여 몇 가지 필드를 필수로 설정하고 콜 유형 선택에 따라 요청 항목 필드를 숨깁니다.
    5. 양식에서 불필요한 버튼과 기능을 제거합니다.
    6. 새 UI 작업 만들기 버튼.
      이 버튼은 사용자를 인시던트나 요청으로 리디렉션합니다. 또한 인시던트 기록을 생성하고 값을 인시던트 및 요청 항목 양식에 복사합니다.
      var reqItem = current.u_item;
      var requestedFor = current.u_requested_for;
      var location = current.location;
      
      if(current.u_incident_request == 'Incident'){
        //Create a new incident record and redirect to the new incident
        var rec = new GlideRecord('incident');
        rec.initialize();
        rec.caller_id = requestedFor;
        rec.location = location;
        rec.insert();
        action.setRedirectURL(rec);
      }
      
      if(current.u_incident_request == 'Request'){
        //Build the url and route the user to the request item
        var url = '';
        if(current.u_item.sys_class_name == 'sc_cat_item_guide'){
          url = 'com.glideapp.servicecatalog_cat_item_guide_view.do?sysparm_initial=true&sysparm_guide=' + 
            reqItem + '&sysparm_user=' + requestedFor + '&sysparm_location=' + location;
        }
        else{
          url = 'com.glideapp.servicecatalog_cat_item_view.do?sysparm_id=' + reqItem + '&sysparm_user=' +  
            requestedFor + '&sysparm_location=' + location;
        }
        action.setRedirectURL(url);
      }
    7. 앞 예시의 경로 버튼은 URL의 요청 대상위치 값을 요청 항목 양식으로 전달합니다.
      다음 클라이언트 스크립트를 사용하여 이러한 값을 매핑하는 항목, 기록 생성자 또는 주문 가이드에 requested_for위치 라는 변수가 있는지 확인합니다. URL의 길이가 제한되어 있으므로 전달할 수 있는 정보의 양에는 제한이 있습니다. 이 방법을 사용하여 긴 텍스트 필드에서 정보를 보내지 마십시오.
      function onLoad() {
        var url = document.location.toString();
        var userKey = 'sysparm_user=';
        var locKey = 'sysparm_location=';
        var userPosition = url.indexOf(userKey);
        var locPosition = url.indexOf(locKey)
        if (userPosition != -1) {
          var user = url.substr(userPosition+userKey.length, 32);
          g_form.setValue('requested_for', user);
        }
        if (locPosition != -1) {
          var loc = url.substr(locPosition+locKey.length, 32);
          g_form.setValue('location', loc);
        }
      }

    필드 메시지 표시

    JavaScript alert()를 사용하는 대신 깔끔하게 보기 위해 양식 자체에 오류를 표시할 수 있습니다. showFieldMsg()hideFieldMsg() 메서드를 사용하여 필드 자체 바로 아래에 메시지를 표시할 수 있습니다.

    showFieldMsghideFieldMsgg_form 객체와 함께 사용할 수 있는 메서드입니다.

    이러한 방법은 기록의 양식 뷰(인시던트, 문제 및 변경 양식)를 변경하는 데 사용됩니다. 이러한 메서드는 다른 클라이언트 스크립트에서도 사용할 수 있지만 예상대로 작동하는지 여부를 확인하려면 테스트해야 합니다.

    로드 시 필드 메시지가 양식에 표시되면 필드 메시지가 표시되도록 양식이 스크롤됩니다. 필드 메시지가 화면 밖에 있다는 이유로 사용자가 놓치지 않도록 합니다.

    전역 속성 glide.ui.scroll_to_message_field 는 양식 필드가 화면 밖에 있을 때 자동 메시지 스크롤을 제어합니다(양식을 컨트롤 또는 필드로 스크롤).

    표 1. 메서드 상세 정보
    메서드 상세 정보 매개변수 예제
    showFieldMsg(입력, 메시지, 유형, [스크롤 양식])
    • 입력 - 필드 또는 컨트롤의 이름입니다.
    • 메시지 — 표시하고 싶은 메시지
    • 유형 — '정보', '오류' 또는 '경고'; 제공되지 않은 경우 기본값은 정보로 설정됩니다.
    • 스크롤 양식 - (선택 사항) 화면 밖의 필드 메시지로 스크롤하지 않도록 scrollForm 을 아니오로 설정합니다.
    오류 메시지
    g_form.showFieldMsg('impact','Low impact not allowed with High priority','error');
    낮은 영향은 높은 우선순위 메시지와 함께 허용되지 않습니다.
    정보 메시지
    g_form.showFieldMsg('impact', 'Low impact response time can be one week','info');
    //or this defaults to info type
    //g_form.showFieldMsg('impact', 'Low impact response time can be one week');
    낮은 영향 응답시간은 일주일 메시지일 수 있습니다.
    hideFieldMsg(입력)
    • 입력 - 필드 또는 컨트롤의 이름입니다.
    • clearAll — (선택 사항) 모든 메시지를 지울지 여부를 나타내는 부울 매개변수입니다. 예일 경우 필드의 모든 메시지가 지워집니다. false이거나 비어 있는 경우 첫 번째 메시지만 제거됩니다.
    메시지 제거
    //this will clear the first message printed to the field
    g_form.hideFieldMsg('impact');

    레거시 지원

    showErrorBox()hideErrorBox() 메서드는 권장되지 않습니다.

    UI 동작에서 클라이언트 및 서버 코드 사용

    서버 측에서 기록을 업데이트하기 전에 스크립트를 사용하면 클라이언트 측에서 UI 작업을 클릭할 때 입력을 확인할 수 있습니다. 사용자는 필수 필드를 확인하고 기록을 업데이트하기 위해 버튼을 두 번 클릭할 필요가 없습니다.

    스크립트는 클라이언트 쪽 확인을 위해 클라이언트 함수를 호출하고 통과하면 UI 작업이 작업을 완료합니다. onclick 문 없이 실행되는 코드는 클라이언트 함수가 더 이상 실행되지 않을 때까지 서버 측 함수가 실행되지 않도록 합니다. 성공하면 서버 측 기능이 실행되어 기록을 업데이트합니다.

    // Client-side onclick function
    function resolveIncident() {
      // Set the 'Incident state' and 'State' values to 'Resolved', and display mandatory fields
      g_form.setValue('incident_state', 6);
      g_form.setValue('state', 6);
      g_form.setValue('resolved_by', g_user.userID);
    
      // Call the UI action and skip the 'onclick' function
      gsftSubmit(null, g_form.getFormElement(), 'resolve_incident'); //MUST call the 'Action name' set in this UI Action
    }
    
    // Code that runs without 'onclick'
    // Ensure call to server-side function with no browser errors
    if (typeof window == 'undefined')
      serverResolve();
    
    // Server-side function
    function serverResolve() {
      current.incident_state = IncidentState.RESOLVED;
      current.state = IncidentState.RESOLVED;
      current.resolved_by = gs.getUserID();
      current.update();
    }

    gsftSubmit(문자열 통제, 객체 양식, 문자열 action_name)

    사용자가 필수 필드를 확인하고 onSubmit() 클라이언트 스크립트를 실행한 후 UI 작업을 클릭한 것처럼 양식을 제출합니다. 클라이언트 측 코드와 서버 측 코드를 단일 UI 작업에서 호출할 수 있습니다.

    표 2. 매개변수
    이름 유형 설명
    제어 문자열 사용자 클릭을 시뮬레이션할 양식 버튼의 이름입니다. 그렇지 않으면 null 을 사용하십시오.
    양식 객체 옵션입니다. 제출된 입력이 포함된 양식 요소입니다. g_form.getFormElement() 메서드를 호출하여 이 값을 검색할 수 있습니다.
    action_name 문자열 작업 이름입니다. 이 값은 UI 작업 [sys_ui_action] 테이블에 나열된 기록에 제공됩니다.

    예를 들어 'resolve_incident' 은 인시던트 [incident] 테이블에 있는 해결 버튼의 작업 이름입니다.