When Approvals, assignments or meeting invitations are True then CC notification should also be true
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-07-2025 12:50 AM
When Approvals, assignments, or meeting invitations are True, then CC notification should also be true in the Delegate Form. Could someone please help me, since I don't have much hands-on Service Portal ? How can I achieve this?
Below is the HTML code :
<div class="panel-body">
<table>
<tr>
<td class="form-field-td">
<table>
<tr>
<td>
<div class="row form-group">
<label class="field-label" title="">
<span class="field-decorations">
<span class="fa fa-asterisk mandatory ng-scope" ng-class="{'mandatory-filled': c.user_filled()}" style="padding-right: .25em"></span></span>
<span style="padding-right: .25em" class="ng-binding" title="">User</span>
</label>
<sn-record-picker id="user" mandatory="true" ng-change="c.onUser()" field="user" table="'sys_user'" default-query="'active=true'" sn-disabled="c.data.user_readonly" display-field="'name'" value-field="'sys_id'" search-fields="'name'" page-size="100" autofocus></sn-record-picker>
</div>
</td>
</tr>
<tr>
<td>
<div class="row form-group">
<label class="field-label" title="">
<span class="field-decorations">
<span class="fa fa-asterisk mandatory ng-scope" ng-class="{'mandatory-filled': c.delegate_filled()}" style="padding-right: .25em"></span></span>
<span style="padding-right: .25em" class="ng-binding" title="">Delegate</span>
</label>
<sn-record-picker id="delegate" ng-change="c.onDelegate()" field="delegateUser" table="'sys_user'" default-query="'active=true'" display-field="'name'" value-field="'sys_id'" search-fields="'name'" page-size="100"></sn-record-picker>
</div>
</td>
</tr>
<tr>
<td>
<div class="row form-group">
<label class="field-label" title="">
<span class="field-decorations">
<span class="fa fa-asterisk mandatory ng-scope" ng-class="{'mandatory-filled': c.starts_filled()}" style="padding-right: .25em"></span></span>
<span style="padding-right: .25em" class="ng-binding" title="">Starts</span>
</label>
<sp-date-picker field="starts" ng-model="c.starts" ng-model-options="{getterSetter: true}" sn-change="c.onStarts()" sn-include-time="true"></sp-date-picker>
</div>
</td>
</tr>
<tr>
<td>
<div class="row form-group">
<label class="field-label" title="">
<span class="field-decorations">
<span class="fa fa-asterisk mandatory ng-scope" ng-class="{'mandatory-filled': c.ends_filled()}" style="padding-right: .25em"></span></span>
<span style="padding-right: .25em" class="ng-binding" title="">Ends</span>
</label>
<sp-date-picker field="ends" ng-model="c.ends" ng-model-options="{getterSetter: true}" sn-change="c.onEnds()" sn-include-time="true"></sp-date-picker>
</div>
</td>
</tr>
</table>
</td>
<td class="assignments form-field-td" style="padding-left:15%;padding-top:2%;">
<table>
<tr>
<td>
<div class="row form-group">
<label class="checkbox-inline">
<input id="approvals" name="approvals" type="checkbox" ng-change="c.onApprovals()" ng-model="c.approvals">Approvals
</label>
</div>
</td>
</tr>
<tr>
<td>
<div class="row form-group">
<label class="checkbox-inline">
<input type="checkbox" ng-change="c.onAssignments()" ng-model="c.assignments ">Assignments
</label>
</div>
</td>
</tr>
<tr>
<td>
<div class="row form-group">
<label class="checkbox-inline">
<input type="checkbox" ng-change="c.onNotifications()" ng-model="c.notifications">CC notifications
</label>
</div>
</td>
</tr>
<tr>
<td>
<div class="row form-group">
<label class="checkbox-inline">
<input type="checkbox" ng-change="c.onInvitations()" ng-model="c.invitations">Meeting invitations
</label>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
Client Script for the Widget :
api.controller = function($scope) {
/* widget controller */
var c = this;
// get Share data from parent widget
var shareData = c.widget.options.shared;
var delegate = null;
// default object to be returned to parent widget via Share data
var newData = {
user: null,
delegateUser: null,
starts: null,
ends: null,
approvals: null,
assignments: null,
notifications: null,
meetings: null
};
c.starts = '';
c.ends = '';
//c.data.user_readonly = true;
// When is an UPDATE load current Delegate data to the model
if (shareData.update) {
shareData.modifiedDelegateData = newData;
delegate = shareData.currentDelegateData;
c.approvals = delegate.approvals == '1';
c.assignments = delegate.assignments == '1';
c.notifications = delegate.notifications == '1';
c.invitations = delegate.invitations == '1';
c.starts = delegate.starts;
c.ends = delegate.ends;
}
// When is a NEW Delegate
else {
shareData.newDelegateData = newData;
c.approvals = false;
c.assignments = false;
c.notifications = false;
c.invitations = false;
}
$scope.user = {
displayValue: delegate ? delegate.user_dv : $scope.data.cur_user_dv,
value: delegate ? delegate.user_id : $scope.data.cur_user_id,
name: 'user'
};
$scope.delegateUser = {
displayValue: delegate ? delegate.delegate_dv : '',
value: delegate ? delegate.delegate_id : '',
name: 'delegateUser'
};
$scope.starts = {
displayValue: delegate ? delegate.starts : '',
value: delegate ? delegate.starts : '',
name: 'starts'
};
$scope.ends = {
displayValue: delegate ? delegate.ends : '',
value: delegate ? delegate.ends : '',
name: 'ends'
};
c.onUser = function() {
shareData.modifiedDelegateData.user = $scope.user.value;
};
c.onDelegate = function() {
if (shareData.update) shareData.modifiedDelegateData.delegateUser = $scope.delegateUser.value;
else shareData.newDelegateData.delegateUser = $scope.delegateUser.value;
};
c.onStarts = function() {
if (shareData.update) shareData.modifiedDelegateData.starts = c.starts;
else shareData.newDelegateData.starts = c.starts;
};
c.onEnds = function() {
if (shareData.update) shareData.modifiedDelegateData.ends = c.ends;
else shareData.newDelegateData.ends = c.ends;
};
c.onApprovals = function() {
if (shareData.update) {
shareData.modifiedDelegateData.approvals = c.approvals;
//shareData.modifiedDelegateData.notifications = true;
}
else{
shareData.newDelegateData.approvals = c.approvals;
}
};
c.onAssignments = function() {
if (shareData.update)
{
shareData.modifiedDelegateData.assignments = c.assignments;
//shareData.modifiedDelegateData.notifications = true;
}
else
{
shareData.newDelegateData.assignments = c.assignments;
}
};
c.onNotifications = function() {
if (shareData.update)
{
shareData.modifiedDelegateData.notifications = c.notifications;
}
else{
shareData.newDelegateData.notifications = c.notifications;
}
};
c.onInvitations = function() {
if (shareData.update)
{
shareData.modifiedDelegateData.invitations = c.invitations;
//shareData.modifiedDelegateData.notifications = true;
}
else{
shareData.newDelegateData.invitations = c.invitations;
}
};
c.user_filled = function() {
return $scope.user.value != '';
};
c.delegate_filled = function() {
return $scope.delegateUser.value != '';
};
c.starts_filled = function() {
return c.starts != '';
};
c.ends_filled = function() {
return c.ends != '';
};
};
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-07-2025 02:30 AM
is that an OOB widget? I couldn't search it
somehow you need to determine if either Approvals or Assignments or Meeting invitations checkboxes are selected it should mark CC notification checkbox as well
If my response helped please mark it correct and close the thread so that it benefits future readers.
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-07-2025 02:35 AM - edited 01-07-2025 02:37 AM
No, its not a OOB widget thats why i shared the HTML and Client code above.
somehow you need to determine if either Approvals or Assignments or Meeting invitations checkboxes are selected it should mark CC notification checkbox as well --- This is the only requirement.
Could you share where i have to make changes in above html and client script to make this work
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-07-2025 02:40 AM
is the current code working fine?
I tried and it gives some error when I previewed the widget
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-07-2025 02:42 AM
@Ankur Bawiskar Yes it works fine
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-07-2025 02:44 AM
then check my below comments
Something like this
api.controller = function($scope) {
var c = this;
var shareData = c.widget.options.shared;
var delegate = null;
var newData = {
user: null,
delegateUser: null,
starts: null,
ends: null,
approvals: null,
assignments: null,
notifications: null,
meetings: null
};
c.starts = '';
c.ends = '';
// When is an UPDATE load current Delegate data to the model
if (shareData.update) {
shareData.modifiedDelegateData = newData;
delegate = shareData.currentDelegateData;
c.approvals = delegate.approvals == '1';
c.assignments = delegate.assignments == '1';
c.notifications = delegate.notifications == '1';
c.invitations = delegate.invitations == '1';
c.starts = delegate.starts;
c.ends = delegate.ends;
}
// When is a NEW Delegate
else {
shareData.newDelegateData = newData;
c.approvals = false;
c.assignments = false;
c.notifications = false;
c.invitations = false;
}
$scope.user = {
displayValue: delegate ? delegate.user_dv : $scope.data.cur_user_dv,
value: delegate ? delegate.user_id : $scope.data.cur_user_id,
name: 'user'
};
$scope.delegateUser = {
displayValue: delegate ? delegate.delegate_dv : '',
value: delegate ? delegate.delegate_id : '',
name: 'delegateUser'
};
$scope.starts = {
displayValue: delegate ? delegate.starts : '',
value: delegate ? delegate.starts : '',
name: 'starts'
};
$scope.ends = {
displayValue: delegate ? delegate.ends : '',
value: delegate ? delegate.ends : '',
name: 'ends'
};
// Function to handle when Approvals checkbox changes
c.onApprovals = function() {
if (shareData.update) {
shareData.modifiedDelegateData.approvals = c.approvals;
}
else {
shareData.newDelegateData.approvals = c.approvals;
}
// Automatically select "CC notifications" when Approvals is checked
if (c.approvals) {
c.notifications = true; // Automatically select CC notifications
}
};
// Function to handle when Assignments checkbox changes
c.onAssignments = function() {
if (shareData.update) {
shareData.modifiedDelegateData.assignments = c.assignments;
}
else {
shareData.newDelegateData.assignments = c.assignments;
}
// Automatically select "CC notifications" when Assignments is checked
if (c.assignments) {
c.notifications = true; // Automatically select CC notifications
}
};
// Function to handle when Invitations checkbox changes
c.onInvitations = function() {
if (shareData.update) {
shareData.modifiedDelegateData.invitations = c.invitations;
}
else {
shareData.newDelegateData.invitations = c.invitations;
}
// Automatically select "CC notifications" when Invitations is checked
if (c.invitations) {
c.notifications = true; // Automatically select CC notifications
}
};
// Function to handle when CC Notifications checkbox changes
c.onNotifications = function() {
if (shareData.update) {
shareData.modifiedDelegateData.notifications = c.notifications;
}
else {
shareData.newDelegateData.notifications = c.notifications;
}
};
// Other methods...
};
If my response helped please mark it correct and close the thread so that it benefits future readers.
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader