Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Custom Search Widget not work in Service Portal

xingrui
Tera Expert

Hi all,

Because of some specific business requirements, I tried to mimic the data table widget to customize a Table Widget.

When I try to add search function, it seems Not returning the correct data.

Does someone know the reason?

HTML Template
<div ng-repeat="approval in data.approvals" class="sp-approval">
<div ng-if="approval.task.number"><label>${Number}</label> {{::approval.task.number}}</div>
<div ng-if="approval.task.start"><label>${Start}</label> {{::approval.task.start}}</div>
<div ng-if="approval.task.end"><label>${End}</label> {{::approval.task.end}}</div>
</div>
<div>
<form  ng-submit="goSearch(data.keywords)">
<div class="input-group" role="presentation">
<input type="text" ng-model="data.keywords" ng-model-options="{debounce:250}" class="form-control" placeholder="${Keyword Search}" aria-label="${Keyword Search}">
<span class="input-group-btn">
<button name="search" class="btn btn-default" type="submit" aria-label="${Search}" data-placement="bottom"><span class="glyphicon glyphicon-search"></span></button>
</span>
</div>
</form>
</div>
Server script:

if (input && input.action === 'search') {
	var searchTerm = input.term;
    var gr = new GlideRecord('sn_wsd_rsv_reservation');
    gr.chooseWindow(0, 5);
    gr.addEncodedQuery('subjectLIKE' + searchTerm);
    gr.addQuery("state", '!=', 'cancelled');
    gr.orderByDesc("sys_created_on");
    gr.query();
    initFunc();
} else {
    var gr = new GlideRecord('sn_wsd_rsv_reservation');
    gr.chooseWindow(0, 5);
    gr.addQuery("state", '!=', 'cancelled');
    gr.orderByDesc("sys_created_on");
    gr.query();
    initFunc();
}

function initFunc() {
    var approvals = [];
    var ids = [];
    while (gr.next()) {
        var task = gr;
        ids.push(gr.getUniqueValue());
            var t = {};
            t.number = task.getDisplayValue();
            t.start = task.start.getDisplayValue();
            t.end = task.end.getDisplayValue();
            var j = {};
            j.sys_id = gr.getUniqueValue();
            j.table = gr.getRecordClassName();
            j.task = t;
            j.state = gr.getValue("state");
            j.stateLabel = gr.state.getDisplayValue();
            approvals.push(j);
    }
    data.ids = ids;
    data.approvals = approvals;
}
Client controller:

function($scope) {
var c = this;
$scope.goSearch = function(keywords) {
        var input = {
            action: 'search',
            term: keywords
        };
        c.server.get(input).then(function(response) {
            c.data.approvals = response.data.approvals;
        });
    };
}

 

0 REPLIES 0