- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-21-2018 09:50 AM
Business:
My business is I have one button in "data table from instance definition" widget named as "Active" button, Whenever I click that button I need to show only active records, I am a beginner of service portal, So only I starting with basic works.
Issue:
Whenever I try to pass the filter condition via client side, That time the widget showing info message like"No records in".
Use the following image for reference:
I have found the root cause of the issue, But I still cannot able to find the solution for this.
The root cause of the issue:
The embedded widget is not refreshing. (Here embedded widget is "widget-data-table")
data.dataTableWidget = $sp.getWidget('widget-data-table', widgetParams);
The embedded widget is only working one time. If you try and refresh the widget via the server it returns an empty data model.
The following scripts for your reference:
Client script:
var c = this;
$scope.activeRecord = function(){
 
c.data.filter ="active=true"
c.server.update();
spUtil.get("widget-data-table", answer).then(function(response) {
c.data.dataTableWidget = response;
});
}
Server script:
data.filter = input.filter;
data.table_label = gr.getLabel();
var widgetParams = {
table: data.table,
fields: data.field_list,
o: data.o,
d: data.d,
 filter: data.filter,
window_size: data.window_size,
view: options.view,
title: options.title,
show_breadcrumbs: false,
show_keywords: true
};
data.dataTableWidget = $sp.getWidget("widget-data-table", widgetParams);
})();
Html:
<sp-widget ng-if="data.dataTableWidget" widget="data.dataTableWidget"></sp-widget>
Solved! Go to Solution.
- Labels:
- 
						
							
		
			Service Portal
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-22-2018 06:21 AM
The following script is worked as I expected. We need to call the server side object into the client side using var params = $scope.data.widgetParams; [data.widgetParams], We can get the embedded widget using spUtill.get and we can send the response to that specific widget.
Client script:
var c = this;
$scope.activeRecord = function(){
 
var params = $scope.data.widgetParams;
 
params.filter = "active=true"; 
spUtil.get('data_table_1',params).then(function(response){
$scope.data.dataTableWidget = response;
})
}
Server script:
var widgetParams;
data.table_label = gr.getLabel();
 data.widgetParams = {
table: data.table,
fields: data.field_list,
o: data.o,
d: data.d,
filter: data.filter,
window_size: data.window_size,
view: options.view,
title: options.title,
show_breadcrumbs: false
};
//gs.addInfoMessage("Filters"+data.widgetParams.filter);
 
 
 
//data.dataTableWidget = $sp.getWidget("data_table_1", widgetParams);
 
data.dataTableWidget = $sp.getWidget('data_table_1', data.widgetParams); 
 
//data.dataTableWidget = $sp.getWidget('data_table_1', {filter: widgetParams.filter});
})();
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-22-2018 06:21 AM
The following script is worked as I expected. We need to call the server side object into the client side using var params = $scope.data.widgetParams; [data.widgetParams], We can get the embedded widget using spUtill.get and we can send the response to that specific widget.
Client script:
var c = this;
$scope.activeRecord = function(){
 
var params = $scope.data.widgetParams;
 
params.filter = "active=true"; 
spUtil.get('data_table_1',params).then(function(response){
$scope.data.dataTableWidget = response;
})
}
Server script:
var widgetParams;
data.table_label = gr.getLabel();
 data.widgetParams = {
table: data.table,
fields: data.field_list,
o: data.o,
d: data.d,
filter: data.filter,
window_size: data.window_size,
view: options.view,
title: options.title,
show_breadcrumbs: false
};
//gs.addInfoMessage("Filters"+data.widgetParams.filter);
 
 
 
//data.dataTableWidget = $sp.getWidget("data_table_1", widgetParams);
 
data.dataTableWidget = $sp.getWidget('data_table_1', data.widgetParams); 
 
//data.dataTableWidget = $sp.getWidget('data_table_1', {filter: widgetParams.filter});
})();
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-21-2019 08:18 AM
Hi Rajesh,
I have also similar requirements and i am facing same issue. On load of page filter is working fine but on clicking on other value, it is not setting filter.
Data table throws 'No Records in' message. I am trying to display articles within knowledge category on portal on click of article category. I am using data table from instance widget.
Please find below widget code:-
HTML:-
<div>
 <div class="alert alert-danger" ng-if="data.invalid_table">
 ${Table not defined} '{{data.table_label}}'
 </div>
 <sp-widget ng-if="data.dataTableWidget" widget="data.dataTableWidget" c.activeRecord()></sp-widget>
</div>
Server Script:-
(function(){
 /* "use strict"; - linter issues */
 // populate the 'data' object 
 var widgetParams; 
 var sp_page = $sp.getValue('sp_page');
 var pageGR = new GlideRecord('sp_page');
 pageGR.get(sp_page);
 data.page_id = pageGR.id.getDisplayValue();
 $sp.getValues(data);
 if (data.field_list) {
 data.fields_array = data.field_list.split(',');
 } else {
 data.field_list = $sp.getListColumns(data.table);
 }
if (input) {
 data.category = input.category;
 data.p = input.p;
 data.o = input.o;
 data.d = input.d;
 data.q = input.q; 
 
 }
 else
 data.category = $sp.getParameter("kb_category");
 
 //var cat = input.category.toString();
 gs.addInfoMessage("Category selected server " +data.category);
 
 
 data.p = data.p || 1;
 data.o = data.o || $sp.getValue('order_by');
 data.d = data.d || $sp.getValue('order_direction');
data.page_index = (data.p - 1);
 data.window_size = $sp.getValue('maximum_entries') || 10;
 data.window_start = (data.page_index * data.window_size);
 data.window_end = (((data.page_index + 1) * data.window_size));
 
 //data.filter = $sp.getValue("filter");
 //gs.addInfoMessage("filter " + $sp.getValue("filter"));
 
 
 
 var gr = new GlideRecordSecure(data.table);
 if (!gr.isValid()) {
 data.invalid_table = true;
 data.table_label = data.table;
 return;
 }
 var id = data.category.toString();
 gs.addInfoMessage("Category selected server2 " +id);
 data.table_label = gr.getLabel();
 
 data.filter = 'kb_category.sys_id='+id;
 gs.addInfoMessage('filter '+ data.filter);
 
 data.widgetParams = {
 table: data.table,
 fields: data.field_list,
 o: data.o,
 d: data.d,
 filter: data.filter,
 //query: 'kb_category'+id,
 window_size: data.window_size,
 view: 'sp',
 title: options.title,
 show_breadcrumbs: false
 
 };
 data.dataTableWidget = $sp.getWidget('widget-data-table', data.widgetParams);
})();
Client controller:-
function ($scope, $rootScope, spUtil, $location, spAriaFocusManager, spKBCategoryService) {
 
 var c = this;
 
 var removeListener = spKBCategoryService.addListener(function(catId) {
 c.data.category = catId;
 c.data.items = null;
 c.server.update();
 });
$scope.activeRecord = function(){
 
 var params = $scope.data.widgetParams;
 //params.filter = '$scope.data.category.sys_id=c.data.category';
 spUtil.get('widget-data-table',params).then(function(response){
 $scope.data.dataTableWidget = response;
 spUtil.update($scope);
 });
};
// spUtil.get("widget-data-table", answer).then(function(response) {
// c.data.dataTableWidget = response;
// });
}
From where ''$scope.activeRecord'' function should be called as in my case i am using data table instance widget so i need to send only parameter to data table widget.
for 1st time it is setting correct filter and showing list of articles within the clicked category.
I am new to service portal. Could you please help me here .
Thanks a lot in advance!
Ravi Roy
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-19-2021 04:45 AM
Awesome, this saved me
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-12-2019 09:24 AM
Hope this helps someone else, I struggled with this for a while but stumbled up this solution. I wanted to refresh the list of records in the data table with an event, so I just added this line of code to my client controller and the record list refreshed automatically:
$scope.$broadcast('widget-filter-breadcrumbs.queryModified', myEncodedQuery);
