- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-02-2021 06:08 AM
I would like to make the watch list on the tickets on the service portal editable (after submission). I reviewed a thread that was started 4 years ago and tried to follow that thread and populate the various Client and Server script fields accordingly, but nothing is showing on the portal. I am pretty much a newbie at service portal. Any help would be appreciated. Thanks!
Solved! Go to Solution.
- Labels:
-
Service Portal Development
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-02-2021 12:31 PM
Hi Chuck,
The following are the widget modifications that we made, you can place this into the relevant fields on the widget form.
Body HTML Termplate:
<div class="panel panel-primary" ng-if="data.canRead">
<div class="panel-heading">
<h4 class="panel-title pull-left">
${Watch list}
</h4>
<div class="clearfix"></div>
</div>
<div class="panel-body">
<form ng-submit="save()">
<div class="text-center text-italic text-muted">
<div>
<sn-record-picker field="watch_list" sn-disabled="!data.canWrite" table="'sys_user'" display-field="'email'" display-fields="'name'" search-fields="'email'" value-field="'sys_id'" default-query="'active=true^web_service_access_only=false^user_nameISNOTEMPTY^emailISNOTEMPTY'" page-size="10" multiple="true"></sn-record-picker> </div>
<div style="margin-top:15px; float: right;">
<button type="submit" class="btn btn-primary post-btn ng-scope">Save</button>
</div>
</div>
</form>
</div>
</div>
Server Script:
(function() {
var gr;
if(input){
gr = new GlideRecord(input.table);
if(gr.get(input.sys_id)){
if(gr.watch_list.canWrite()){
gr.watch_list = input.watchList;
gr.update();
gs.addInfoMessage('Updated');
}
else{
gs.addErrorMessage("Update failed, you don't have the required access");
}
}
}
else{
var sys_id = (input && input.sys_id) || options.sys_id || $sp.getParameter("sys_id");
var table = (input && input.table) || options.table || $sp.getParameter("table");
gr = new GlideRecord(table);
if(gr.get(sys_id)){
data.table = table;
data.sys_id = sys_id;
data.canRead = gr.watch_list.canRead();
data.canWrite = gr.watch_list.canWrite();
if(data.canRead){
var dV = gr.getDisplayValue('watch_list');
var sV = gr.getValue('watch_list');
data.displayValue = dV == '' ? [] : dV;
data.value = sV == null ? [] : sV;
data.displayValue = dV;
data.value = sV;
}
}
}
})();
Client Controller:
function($scope, spUtil, $http) {
var c = this;
$scope.watch_list = {
displayValue: c.data.displayValue,
value: c.data.value,
name: 'watch_list'
};
$scope.save = function(){
c.data.watchList = $scope.watch_list.value;
c.server.update().then(function() {
spUtil.recordWatch($scope, c.data.table, "sys_id=" + c.data.sys_id, function(name, data) {
if(name.name == 'record.updated' && data.operation == 'update'){
$scope.watch_list.value = data.record.watch_list.value;
$scope.watch_list.displayValue = data.record.watch_list.display_value;
$scope.$apply();
}
});
});
};
$scope.$on("field.change", function(evt, parms) {
if (parms.field.name == 'watch_list') {}
});
};
This result in a widget that has only valid users in there. If you wish to change which users are filtered, check out the default-query in the HTML Body
default-query="'active=true^web_service_access_only=false^user_nameISNOTEMPTY^emailISNOTEMPTY'"
This if done correctly, you'll get a widget like the following:
Hopefully the above is helpful!
Thanks,
Mike
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-02-2021 06:49 AM
Hi Chuck,
We added the following widget to our instance and it works great. There will be a bit of configuration that might take a bit to understand. e.g. adding the widget to the form, but the widget works great
https://developer.servicenow.com/connect.do#!/share/contents/3082544_serviceportal_watchlist?t=PRODUCT_DETAILS
Thanks,
Mike
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-02-2021 07:37 AM
Thanks Mike,
I downloaded the update set and see it, but now how do I add it to my ticket widget?
Thanks!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-02-2021 07:53 AM
Hi Chuck,
I would suggest watching a few ServiceNow portal configuration videos I think TechNow hosted by Chuck Tomasi has a few on the Basic ServicePortal config.
Find the page that you wish to add the widget to in the page designer. In the below example I've used "Ticket" however use any page that you have cloned.
From there, you can search Widgets on the left hand side.Find the watch list widget, and you should be able to drag and drop where you want on the form.
And configure as you wish.
Thanks,
Mike
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-02-2021 08:34 AM
Hi Mike,
I added it to the ticket where I wanted it using Designer and it seems to work great but now need to remove the original watchlist (see attached) because when I update the new watchlist it doesn't reflect in the circled watchlist, so could become confusing. Is there an easy way to do this? I don't see it defined in the ticket widget.