Service Portal Widget pagination
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-12-2017 09:31 AM
Hi,
Can anyone suggest how to customize a widget to enable pagination? Please share code if possible.
Thanks in advance.
- Labels:
-
Service Portal

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-12-2017 01:08 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-12-2017 03:40 PM
Hi Jaspal thanks 4 the update... but as said the records are not getting fetched
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-13-2017 08:35 AM
Hi all,
Kindly suggest on where I am going wrong.
HTML Body Template
-------------------------------------------------------------------------------------------
<div>
<div class="panel panel-default">
<div ng-if="data.results.length==0">
<div class="panel-heading"><h4 class="panel-title">${No results}</h4></div>
<div class="panel-body wrapper break-word">
<p>${Your search - <b>{{data.q}}</b> - did not match any documents}</p>
<p>${Suggestions}:</p>
<ul>
<li>${Make sure all words are spelled correctly}</li>
<li>${Try different, more general, or fewer keywords}</li>
</ul>
</div>
</div>
<div ng-if="data.results.length>0" class="panel-heading break-word"><h4 class="panel-title">${Search results for '{{data.q}}'}</h4></div>
<div ng-repeat="item in data.results | orderBy:'score':true" class="panel-body b-b ">
<div ng-if="item.type == 'kb'">
<a href="?id=kb_article&sys_id={{item.sys_id}}" class="h4 text-primary m-b-sm block">
<i class="fa fa-book m-r-sm"></i>
<span ng-bind-html="highlight(item.short_description, data.q)"></span></a>
<p ng-bind-html="highlight(item.text, data.q)"></p>
<span class="text-muted">${Article}: {{item.number}}</span>
<span class="text-muted">
<span class="m-l-xs m-r-xs"> · </span>
${Published}: <sn-day-ago date="item.published"/>
</span>
</div>
<div ng-if="item.type == 'sc'">
<a href="?id={{item.page}}&sys_id={{item.sys_id}}" class="h4 text-primary m-b-sm block">
<i class="fa fa-shopping-cart m-r-sm"></i>
<span ng-bind-html="highlight(item.name, data.q)"></span></a>
<div ng-style="getBGImage(item)" ng-if="item.picture" class="img-responsive m-r item-image pull-left"></div>
<p ng-bind-html="highlight(item.short_description, data.q)"></p>
<span class="text-muted m-r-sm" ng-if="item.price != '$0.00'">{{item.price}}</span>
</div>
<div ng-if="item.type == 'qa'">
<a href="?id=kb_social_qa_question&question_id={{item.sys_id}}" class="h4 text-primary m-b-sm block">
<i class="fa fa-comments-o m-r-sm"></i>
<span ng-bind-html="highlight(item.label, data.q)"></span></a>
<p ng-bind-html="highlight(item.text, data.q)"></p>
<div>
<a ng-repeat="tag in item.tags" ng-href="?id=sqa_tagged_questions&sys_id={{tag.sys_id}}" class="question-tag">{{tag.name}}</a>
</div>
<span class="text-muted">${Asked} <sn-day-ago date="item.sys_created_on"/></span>
<span class="text-muted">
<span class="m-l-xs m-r-xs" ng-if="!$first"> · </span>
${Score}: {{item.votes}}
</span>
</div>
<div ng-if="item.type == 'rec'">
<a href="?id={{item.page}}&sys_id={{item.sys_id}}&table={{item.table}}" class="h4 text-primary m-b-sm block">
<span ng-bind-html="highlight(item.label, 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>
<tr ng-repeat="item in c.data.results | startFrom: currentPage*pageSize | limitTo: pageSize">
<button ng-disabled="currentPage == 0" ng-click="currentPage=currentPage-1">
Previous
</button>
{{currentPage+1}}/{{numberOfPages()}}
<button ng-disabled="currentPage >= c.data.results.length/pageSize - 1" ng-click="currentPage=currentPage+1">
Next
</button>
<div class="clearfix"></div>
</div>
</div>
</div>
-----------------------------------------------------------------------------------------------------------------------------------------------------
Server Script
******************************************************************************************************************************************************
// populate the 'data' variable
data.q = $sp.getParameter('q');
data.t = $sp.getParameter('t');
data.sc_default = $sp.getValue('sc_catalog');
data.kb_default = $sp.getValue('kb_knowledge_base');
data.sc = $sp.getParameter('sc');
data.kbase = $sp.getParameter('kb');
data.title = $sp.getParameter('title');
data.results = [];
if (data.t)
data.count = 15;
else
data.count = 30;
// add in additional search tables from sp_search_groups
var portalGR = $sp.getPortalRecord();
var portalID = portalGR.getUniqueValue();
var sg = GlideRecord('sp_search_group');
sg.addQuery('sp_portal', portalID);
sg.addActiveQuery();
sg.orderBy('order');
sg.query();
while (sg.next())
addSearchTable(sg);
function addSearchTable(sg) {
var table = sg.getValue('name');
var condition = sg.getValue('condition');
var gr = GlideRecordSecure(table);
if (condition)
gr.addEncodedQuery(condition);
gr.addQuery('123TEXTQUERY321', data.q);
gr.query();
while (gr.next()) {
if (data.t != table && data.t)
continue;
var rec = {};
rec.type = "rec";
rec.table = table;
rec.sys_id = gr.getUniqueValue();
rec.page = sg.getDisplayValue('sp_page');
if (!rec.page)
rec.page = "form";
rec.label = gr.getDisplayValue();
rec.score = parseInt(gr.ir_query_score.getDisplayValue());
rec.fields = [];
var fields = $sp.getListColumns(table,'sp');
fields = fields.split(',');
for (var i in fields) {
var field = fields[i];
var obj = getField(gr, field);
if (rec.label != obj.value)
rec.fields.push(obj);
}
data.results.push(rec);
}
}
if (data.t == 'kb' || !data.t) {
//var kb = $sp.getKBRecord();
var kb = new GlideRecord("kb_knowledge");
if(data.kbase){
kb.addQuery('kb_knowledge_base', data.kbase);
}
else {
kb.addQuery('kb_knowledge_base', data.kb_default);
}
kb.addQuery('123TEXTQUERY321', data.q);
kb.setLimit(data.count);
kb.query();
data.article_count = kb.getRowCount();
while (kb.next()) {
// Does user have permission to see this item?
if (!$sp.canReadRecord("kb_knowledge", kb.getUniqueValue()))
continue;
var article = {};
$sp.getRecordDisplayValues(article, kb, 'sys_id,number,short_description,published,text')
article.type = "kb";
if (!article.text)
article.text = "";
article.text = $sp.stripHTML(article.text) + "";
article.text = article.text.substring(0, 200);
article.score = parseInt(kb.ir_query_score.getDisplayValue());
data.results.push(article);
}
$sp.logSearch('kb_knowledge', data.q, kb.getRowCount());
}
if (gs.isLoggedIn() && (data.t == 'sc' || !data.t)) {
var sc = new GlideRecord("sc_cat_item");
if(data.sc){
sc.addQuery('sc_catalogs', data.sc);
} else {
sc.addQuery('sc_catalogs', data.sc_default);
}
sc.addQuery('123TEXTQUERY321', data.q);
sc.setLimit(data.count);
sc.query();
while (sc.next()) {
// Does user have permission to see this item?
var catItem = GlideappCatalogItem.get(sc.sys_id.getDisplayValue());
if (!catItem.canViewOnSearch())
continue;
var item = {};
item.type = "sc";
$sp.getRecordDisplayValues(item, sc, 'name,short_description,picture,price,sys_id');
item.score = parseInt(sc.ir_query_score.getDisplayValue());
item.page = sc.getRecordClassName() == 'sc_cat_item_guide' ? 'sc_cat_item_guide' : 'sc_cat_item';
data.results.push(item);
}
$sp.logSearch('sc_cat_item', data.q, sc.getRowCount());
}
data.sqandaEnabled = gs.getProperty('glide.sp.socialqa.enabled', false) === 'true';
if (data.sqandaEnabled && (data.t == 'qa' || !data.t)) {
var questionGR = new GlideRecord("kb_social_qa_question")
questionGR.addQuery('123TEXTQUERY321',data.q);
questionGR.setLimit(data.count);
questionGR.query();
while (questionGR.next()) {
if (!$sp.canReadRecord(questionGR))
continue;
var question = {};
question.type = "qa";
$sp.getRecordDisplayValues(question, questionGR, 'question,votes,question_details,sys_created_on,sys_id');
question.text = (question.question_details) ? $sp.stripHTML(question.question_details) : "";
question.text = question.text.substring(0,200);
question.label = question.question;
question.votes = 0;
var voteGR = new GlideRecord("kb_social_qa_vote");
voteGR.addQuery("reference_id", questionGR.getUniqueValue());
voteGR.query();
while (voteGR.next())
question.votes = (voteGR.getValue("up_vote") === "1") ? question.votes + 1 : question.votes - 1;
question.votes = question.votes;
question.tags = [];
var labelEntryGR = new GlideRecord("sqanda_tag_entry");
labelEntryGR.addQuery("reference_id", question.sys_id);
labelEntryGR.query();
while (labelEntryGR.next()) {
var labelGR = labelEntryGR.getElement("tag").getRefRecord();
question.tags.push({
sys_id: labelGR.getUniqueValue(),
name: labelGR.getValue("name")
})
}
data.results.push(question);
}
$sp.logSearch('kb_social_qa_question', data.q, questionGR.getRowCount());
}
function getField(gr, name) {
var f = {};
f.display_value = gr.getDisplayValue(name);
f.value = gr.getValue(name);
var ge = gr.getElement(name);
if (ge == null)
return f;
f.type = ge.getED().getInternalType()
f.label = ge.getLabel();
return f;
}
********************************************************************************************************************************************************************
Client Controller
=========================================================================================================
function ($scope, $sce, $location, spUtil, $rootScope) {
spUtil.setSearchPage($scope.data.t);
$scope.currentPage=0;
$scope.pageSize=10;
$scope.numberOfPages=function(){
return Math.ceil($scope.c.data.results.length/$scope.pageSize);
}
$scope.filter('startFrom', function() {
return function(input, start) {
start = +start; //parse to int
return input.slice(start);
}
});
$scope.getBGImage = function(item) {
return {"background-image": "url('" + item.picture + "')"};
}
$scope.highlight = function(haystack, needle) {
if (!haystack)
return "";
if (!needle)
return $sce.trustAsHtml(haystack);
return $sce.trustAsHtml(haystack.replace(new RegExp(needle, "gi"), function(match) {
return '<mark class="highlight">' + match + '</mark>';
}));
}
}
===================================================================================================================
Please help.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-16-2019 03:59 AM
HI DeboPriya,
Were you able to co pagination?I am trying to implement Pagination. Could you please help me on that.
thanks,
Nithya