튜토리얼: 외부 지식베이스 검색 소스 설정

  • 릴리스 버전: Washingtondc
  • 업데이트 날짜 2026년 01월 10일
  • 읽기5분
  • 고급 검색 소스를 정의하여 인터넷의 모든 소스에서 데이터를 반환할 수 있습니다. 검색 소스의 강력한 기능을 이해하려면 이 튜토리얼을 따라 외부 지식베이스 검색 소스를 설정하십시오.

    시작하기 전에

    필요한 역할: 없음

    고급 검색 소스를 만들려면 REST API를 통해 외부 웹 사이트에 대한 인증된 액세스와 AngularJS에 대한 기본 지식이 필요합니다.

    이 태스크 정보

    이 통합에서는 다음을 수행합니다.

    • ServiceNow 테이블 API를 사용하여 다른 ServiceNow 인스턴스에서 지식베이스를 쿼리하는 데이터 가져오기 스크립트를 만듭니다.
    • JSON 응답을 디코딩하고 검색 위젯이 예상하는 필드를 정의합니다.
    • 검색 소스 HTML 템플릿을 업데이트하여 외부 사이트에서 검색 결과를 엽니다.

    프로시저

    1. 플랫폼 UI에서 다음으로 이동합니다. Service Portal > 포털 을 클릭하고 검색 소스를 추가할 포털을 선택합니다.
    2. Search Sources(검색 소스) 관련 목록에서 New(새로 만들기)를 클릭합니다.
    3. 검색 소스의 이름과 ID를 생성합니다.
      ID는 고유해야 하며 공백이나 특수 문자를 포함해서는 안 됩니다.
    4. 데이터 원본 탭에서 스크립팅된 원본 확인란을 선택합니다.
    5. 데이터 가져오기 스크립트 필드에 콘텐츠를 추가합니다.
      1. 인스턴스가 실행할 검색 기능을 정의합니다.

        이 예제에서는 레코드 없는 RESTMessageV2 예제를 사용하지만 필요한 경우 사전 구성된 아웃바운드 REST 웹 서비스를 사용하거나 보다 안전한 인증 프로파일을 만들도록 이 예제를 수정할 수 있습니다.

        (function(query) {  
        var results = [];  
        /* Calculate your results here. */ 
        var url= "https://myInstance.service-now.com/api/now/table/kb_knowledge?sysparm_query=GOTO123TEXTQUERY321%3D" + encodeURI(query) + "&sysparm_fields=sys_id%2Cnumber%2Cshort_description%2Ccategory%2Ctext";  
            var ws = new sn_ws.RESTMessageV2();
                ws.setBasicAuth("search_user", "search");  
                ws.setHttpMethod("get");  
                ws.setEndpoint(url);  
          
                var jsonOutput = ws.execute();  
        
        return results;  
        })(query);
        주:
        앞의 예에서 ws.setBasicAuth 에는 원격 인스턴스에 대한 사용자 이름과 비밀번호가 필요합니다. 자세한 내용은 RESTMessageV2 - Scoped, Global 을 참조하십시오.
      2. if 문을 데이터 가져오기 스크립트에 추가하여 반환되는 JSON 객체를 디코딩하고, 각 결과를 반복하고, 예상 필드를 설정합니다.

        최종 데이터 가져오기 스크립트는 다음과 같습니다.

        (function(query) {  
        var results = [];  
        /* Calculate your results here. */  
        var url= "https://<my-instance>.service-now.com/api/now/table/kb_knowledge?sysparm_query=GOTO123TEXTQUERY321%3D" + 
        encodeURI(query) + "&sysparm_fields=sys_id%2Cnumber%2Cshort_description%2Ccategory%2Ctext";  
        var ws = new sn_ws.RESTMessageV2();  
            ws.setBasicAuth("search_user", "search");  
            ws.setHttpMethod("get");  
            ws.setEndpoint(url);  
          
            var jsonOutput = ws.execute(); 
            if (jsonOutput) {  
                var response = new JSON().decode(jsonOutput.getBody());  
                results = response.result;  
                results.forEach(function(result) {  
                    result.url = "https://myInstance.service-now.com/kb_view.do?sysparm_article=" + result.number;            
                    result.target = "_blank";  
                    result.primary = result.short_description;  
                });  
            }  
        
            if (jsonOutput.haveError()){
                gs.addErrorMessage(jsonOutput.getErrorMessage());
            }
        
        return results;  
        })(query); 
        이 예제에서는 결과 객체에 다음 필드가 설정됩니다.
        • url: 인스턴스에서 ServiceNow 기록을 열지 않고 외부 사이트에 링크하는 경우 링크가 연결되는 위치를 정의합니다.
        • target: 링크의 대상입니다. 새 탭에서 결과를 열려면 대상을 _blank 로 설정하고, 그렇지 않으면 비워 둡니다.
        • primary: 검색 결과에 표시되는 기본 필드입니다.
    6. 검색 페이지 서식 파일을 업데이트하여 외부 사이트에서 검색 결과를 엽니다.
      <div>
       <a href="https://myInstance.service-now.com/kb_view.do?sysparm_article={{item.number}}" target="_blank" class="h4 text-primary m-b-sm block">   
          <span ng-bind-html="highlight(item.primary, data.q)"></span>
        </a>
        <span class="text-muted" ng-repeat="f in item.fields | limitTo: 4">
          <span class="m-l-xs m-r-xs" ng-if="!$first"> · </span>
          {{f.label}}: <span ng-bind-html="highlight(f.display_value, data.q)"></span>
        </span>
      </div>
    7. 업데이트를 클릭합니다.

    결과

    포털에서 외부 검색을 테스트합니다. 3단계에서 정의한 이름 필드 값 아래에 결과가 표시됩니다.

    검색 페이지의 외부 검색 소스

    각 검색 결과는 검색 페이지 템플릿에 정의된 외부 사이트에서 열립니다.

    외부 검색 소스의 단일 검색 결과