Customized External Search Source - Show Only Knowledge Articles that are not expired.

MichaelCreatura
Tera Guru

Hello,

 

We have build a customized external search source that looks up another instance of ServiceNow to provide knowledge articles on our Employee Service Centre, which works great. 

 

However, we would like to exclude knowledge articles that have expired, i.e. where the 'valid to' date has passed. 

 

Does anyone know what filter we need to add to the below query to achieve this?

 

(function(query) {  
var results = [];  
	/* Calculate your results here. */  
var url= "https://[INSTANCE NAME].service-now.com/api/now/table/kb_knowledge?sysparm_query=GOTO123TEXTQUERY321%3D" + 
encodeURI(query) + "%5Eworkflow_state=published" + "%5Ekb_knowledge_base=0140807adb32370012127dad689619d8&sysparm_fields=sys_id%2Cnumber%2Cshort_description%2Ccategory%2Ctext";  
	
    var ws = new sn_ws.RESTMessageV2();
        ws.setBasicAuth("[SERVICE ACCOUNT NAME]", "[SERVICE ACCOUNT PASSWORD]");  
        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://[INSTANCE NAME].service-now.com/kb_view.do?sysparm_article=" + result.sys_id;            
            result.target = "_blank";  
            result.primary = result.short_description;
			result.secondary = result.number;
		
        });  
    }  

    if (jsonOutput.haveError()){
        gs.addErrorMessage(jsonOutput.getErrorMessage());
    }

return results;  
})(query);

 

Thanks, 

 

Michael 

 

1 ACCEPTED SOLUTION

Mark Manders
Mega Patron

Not 100% sure, but could you try it like this:

 

(function(query) {
    var results = [];
    /* Calculate your results here. */
    var today = new GlideDateTime();
    var todayString = today.getDisplayValueInternal(); // Get the date in the format required for the query
    
    var url = "https://[INSTANCE NAME].service-now.com/api/now/table/kb_knowledge?sysparm_query=GOTO123TEXTQUERY321%3D" +
        encodeURI(query) + "%5Eworkflow_state=published" +
        "%5Ekb_knowledge_base=0140807adb32370012127dad689619d8" +
        "%5Evalid_to>=javascript:gs.dateGenerate('" + todayString + "', 'start')&sysparm_fields=sys_id%2Cnumber%2Cshort_description%2Ccategory%2Ctext";
    
    var ws = new sn_ws.RESTMessageV2();
    ws.setBasicAuth("[SERVICE ACCOUNT NAME]", "[SERVICE ACCOUNT PASSWORD]");
    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://[INSTANCE NAME].service-now.com/kb_view.do?sysparm_article=" + result.sys_id;
            result.target = "_blank";
            result.primary = result.short_description;
            result.secondary = result.number;
        });
    }
    
    if (jsonOutput.haveError()) {
        gs.addErrorMessage(jsonOutput.getErrorMessage());
    }
    
    return results;
})(query);

Please mark any helpful or correct solutions as such. That helps others find their solutions.
Mark

View solution in original post

1 REPLY 1

Mark Manders
Mega Patron

Not 100% sure, but could you try it like this:

 

(function(query) {
    var results = [];
    /* Calculate your results here. */
    var today = new GlideDateTime();
    var todayString = today.getDisplayValueInternal(); // Get the date in the format required for the query
    
    var url = "https://[INSTANCE NAME].service-now.com/api/now/table/kb_knowledge?sysparm_query=GOTO123TEXTQUERY321%3D" +
        encodeURI(query) + "%5Eworkflow_state=published" +
        "%5Ekb_knowledge_base=0140807adb32370012127dad689619d8" +
        "%5Evalid_to>=javascript:gs.dateGenerate('" + todayString + "', 'start')&sysparm_fields=sys_id%2Cnumber%2Cshort_description%2Ccategory%2Ctext";
    
    var ws = new sn_ws.RESTMessageV2();
    ws.setBasicAuth("[SERVICE ACCOUNT NAME]", "[SERVICE ACCOUNT PASSWORD]");
    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://[INSTANCE NAME].service-now.com/kb_view.do?sysparm_article=" + result.sys_id;
            result.target = "_blank";
            result.primary = result.short_description;
            result.secondary = result.number;
        });
    }
    
    if (jsonOutput.haveError()) {
        gs.addErrorMessage(jsonOutput.getErrorMessage());
    }
    
    return results;
})(query);

Please mark any helpful or correct solutions as such. That helps others find their solutions.
Mark