- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-04-2023 02:04 AM
I want to create one custom Widget that show Incident count based selected filed.
I have tried below. But not getting any output.
Client Script :
<h3>Incident Count by Assignment Group</h3>
<label for="assignmentGroupSelect">Select Assignment Group:</label>
<select id="assignmentGroupSelect" ng-model="selectedAssignmentGroup" ng-change="getIncidentCounts()">
<option ng-repeat="group in assignmentGroups" value="{{ group.sys_id }}">{{ group.name }}</option>
</select>
<ul>
<li>Active: {{ incidentCounts.active || 0 }}</li>
<li>Closed: {{ incidentCounts.closed || 0 }}</li>
<li>Resolved: {{ incidentCounts.resolved || 0 }}</li>
</ul>
</div>
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-04-2023 08:10 AM
Hi @mahi6 ,
I made the changes to get the list of all groups and get the data selecting each one and put a default group from the url. This is the code:
HTML
<div>
<h3>Incident Count by Assignment Group</h3>
<label for="assignmentGroupSelect">Select Assignment Group:</label>
<select ng-change="c.getIncidentCounts(c.selectedGroup)" id="groups" ng-value="c.defaultgroupURL" name="groups" class="form-control"
ng-model="c.selectedGroup"
ng-options="group.name for group in c.data.groupList">
<option value="">{{c.data.defaultData.name}}</option>
</select>
<ul>
<li>Active: {{ c.incidentCounts.active }}</li>
<li>Closed: {{ c.incidentCounts.closed }}</li>
<li>Resolved: {{ c.incidentCounts.resolved }}</li>
</ul>
</div>
Client Script
api.controller=function() {
var c = this;
c.incidentCounts = {
"active" : 0,
"closed" : 0,
"resolved" : 0,
}
c.getIncidentCounts = function(group) {
var groupID = "";
if(!group){
groupID = c.data.defaultData.sys_id;
} else {
groupID = group.sys_id
}
c.server.get({
'group_id': groupID,
'action': "getGroupInfo"
}).then(function(response){
if(response.data.incidentInfo){
c.incidentCounts = response.data.incidentInfo;
console.log("Received data");
}
}
)
}
c.getIncidentCounts(c.data.defaultData);
}
Server Script
(function() {
/* populate the 'data' object */
/* e.g., data.table = $sp.getValue('table'); */
if(!input){
var assignmentGroupQuery = 'sysparm_clear_stack=true';
// var assignmentGroupUrl = '/api/now/table/sys_user_group?' + assignmentGroupQuery;
var assignmentGroupUrl ='/api/now/table/sys_user_group/36c741fa731313005754660c4cf6a70d' // This dpend on your instance
var defaultgroupID = "36c741fa731313005754660c4cf6a70d" // This is a default group from my group list you will get from the url
data.defaultData = {};
data.groupList = [];
var groupGR = new GlideRecord("sys_user_group");
groupGR.addActiveQuery();
groupGR.addEncodedQuery(assignmentGroupQuery);
groupGR.query();
while(groupGR.next()){
data.groupList.push({
"name": groupGR.getValue("name"),
"sys_id": groupGR.getUniqueValue(),
});
if(defaultgroupID == groupGR.getUniqueValue()){
data.defaultData = {
"name": groupGR.getValue("name"),
"sys_id": groupGR.getUniqueValue(),
}
}
}
}
if(input && input.action == "getGroupInfo"){
var groupId = input.group_id;
data.incidentInfo = {}
var active = 0;
var closed = 0;
var resolved = 0;
var incidentInfo = new GlideRecord("incident");
incidentInfo.addQuery("assignment_group",groupId);
incidentInfo.query();
while(incidentInfo.next()){
/*
Active is State = "New | 1", "In Progress | 2", "On Hold | 3 "
Closed is State = "Closed | 7"
Resolved is State = "Resolved |6"
*/
var incidentState = incidentInfo.getDisplayValue("state");
if(incidentState == "New" || incidentState == "In Progress" || incidentState == "On Hold"){
active++
} else if(incidentState == "Closed"){
closed++
} else if(incidentState == "Resolved"){
resolved++
}
}
data.incidentInfo = {
"active" : active,
"closed" : closed,
"resolved" : resolved
}
}
})();
And this is how it looks for me
You just need to modify to get in the server Script the part to get the group_id from the default url.
Hope that help you
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-05-2023 06:01 AM
I modify a litle bit the widget and add to show a simple list, you cand modify to your style:
HTML
<div>
<h3>Incident Count by Assignment Group</h3>
<label for="assignmentGroupSelect">Select Assignment Group:</label>
<select ng-change="c.getIncidentCounts(c.selectedGroup)" id="groups" ng-value="c.defaultgroupURL" name="groups" class="form-control"
ng-model="c.selectedGroup"
ng-options="group.name for group in c.data.groupList">
<option value="">{{c.data.defaultData.name}}</option>
</select>
<ul>
<li>Active: {{ c.incidentCounts.active }}</li>
<li>Closed: {{ c.incidentCounts.closed }}</li>
<li>Resolved: {{ c.incidentCounts.resolved }}</li>
</ul>
</div>
<h2>
<center>INCIDENT LIST</center>
</h2>
<table class="table-task">
<thead>
<tr>
<th>No.</th>
<th>Incident Number</th>
<th>Short Description</th>
<th>State</th>
<th>Assigned to</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="incident in c.incidentList">
<td>{{incident.no}}</td>
<td>{{incident.number}}</td>
<td>{{incident.short_description}}</td>
<td>{{incident.state}}</td>
<td>{{incident.assigned_to}}</td>
</tr>
</tbody>
</table>
CSS
.table-task {
border-collapse:collapse;
border-spacing: 0;
width:100%;
}
.table-task td{
border-color: black;
border-style:solid;
border-width: 1px;
font-family: Arial, sans-serif;
font-size: 14px;
overflow: hidden;
padding:10px 5px;
word-break:normal;
}
.table-task th{
border-color: black;
border-style: solid;
border-width: 1px;
font-family: Arial, sans-serif;
font-size: 14px;
font-weight: normal;
overflow: hidden;
padding:10px 5px;
word-break:normal;
}
table.table-task thead tr {
background-color: #1432f1;
color:white;
}
table.table-task thead tr th {
text-align: center;
}
Client
api.controller=function() {
var c = this;
c.incidentCounts = {
"active" : 0,
"closed" : 0,
"resolved" : 0,
}
c.incidentList= [];
c.getIncidentCounts = function(group) {
var groupID = "";
if(!group){
groupID = c.data.defaultData.sys_id;
} else {
groupID = group.sys_id
}
c.server.get({
'group_id': groupID,
'action': "getGroupInfo"
}).then(function(response){
if(response.data.incidentInfo){
c.incidentCounts = response.data.incidentInfo;
c.incidentList = response.data.incidentList;
console.log("Received data");
}
}
)
}
c.getIncidentCounts(c.data.defaultData);
}
Server
(function() {
/* populate the 'data' object */
/* e.g., data.table = $sp.getValue('table'); */
if(!input){
var assignmentGroupQuery = 'sysparm_clear_stack=true';
// var assignmentGroupUrl = '/api/now/table/sys_user_group?' + assignmentGroupQuery;
var assignmentGroupUrl ='/api/now/table/sys_user_group/36c741fa731313005754660c4cf6a70d' // This dpend on your instance
var defaultgroupID = "36c741fa731313005754660c4cf6a70d" // This is a default group from my group list
data.defaultData = {};
data.groupList = [];
var groupGR = new GlideRecord("sys_user_group");
groupGR.addActiveQuery();
groupGR.addEncodedQuery(assignmentGroupQuery);
groupGR.query();
while(groupGR.next()){
data.groupList.push({
"name": groupGR.getValue("name"),
"sys_id": groupGR.getUniqueValue(),
});
if(defaultgroupID == groupGR.getUniqueValue()){
data.defaultData = {
"name": groupGR.getValue("name"),
"sys_id": groupGR.getUniqueValue(),
}
}
}
}
if(input && input.action == "getGroupInfo"){
var groupId = input.group_id;
data.incidentInfo = {};
data.incidentList = [];
var count = 0;
var active = 0;
var closed = 0;
var resolved = 0;
var incidentInfo = new GlideRecord("incident");
incidentInfo.addQuery("assignment_group",groupId);
incidentInfo.query();
while(incidentInfo.next()){
/*
Active is State = "New | 1", "In Progress | 2", "On Hold | 3 "
Closed is State = "Closed | 7"
Resolved is State = "Resolved |6"
*/
var incidentState = incidentInfo.getDisplayValue("state");
if(incidentState == "New" || incidentState == "In Progress" || incidentState == "On Hold"){
active++
} else if(incidentState == "Closed"){
closed++
} else if(incidentState == "Resolved"){
resolved++
}
data.incidentList.push({
"no" : count++,
"number" : incidentInfo.getDisplayValue("number"),
"short_description": incidentInfo.getDisplayValue("short_description"),
"assigned_to" : incidentInfo.getDisplayValue("assigned_to"),
"state" : incidentState
})
}
data.incidentInfo = {
"active" : active,
"closed" : closed,
"resolved" : resolved
}
}
})();
And there is how it look, when you select a group then show the list of incidents:
Hope that help you
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-04-2023 08:10 AM
Hi @mahi6 ,
I made the changes to get the list of all groups and get the data selecting each one and put a default group from the url. This is the code:
HTML
<div>
<h3>Incident Count by Assignment Group</h3>
<label for="assignmentGroupSelect">Select Assignment Group:</label>
<select ng-change="c.getIncidentCounts(c.selectedGroup)" id="groups" ng-value="c.defaultgroupURL" name="groups" class="form-control"
ng-model="c.selectedGroup"
ng-options="group.name for group in c.data.groupList">
<option value="">{{c.data.defaultData.name}}</option>
</select>
<ul>
<li>Active: {{ c.incidentCounts.active }}</li>
<li>Closed: {{ c.incidentCounts.closed }}</li>
<li>Resolved: {{ c.incidentCounts.resolved }}</li>
</ul>
</div>
Client Script
api.controller=function() {
var c = this;
c.incidentCounts = {
"active" : 0,
"closed" : 0,
"resolved" : 0,
}
c.getIncidentCounts = function(group) {
var groupID = "";
if(!group){
groupID = c.data.defaultData.sys_id;
} else {
groupID = group.sys_id
}
c.server.get({
'group_id': groupID,
'action': "getGroupInfo"
}).then(function(response){
if(response.data.incidentInfo){
c.incidentCounts = response.data.incidentInfo;
console.log("Received data");
}
}
)
}
c.getIncidentCounts(c.data.defaultData);
}
Server Script
(function() {
/* populate the 'data' object */
/* e.g., data.table = $sp.getValue('table'); */
if(!input){
var assignmentGroupQuery = 'sysparm_clear_stack=true';
// var assignmentGroupUrl = '/api/now/table/sys_user_group?' + assignmentGroupQuery;
var assignmentGroupUrl ='/api/now/table/sys_user_group/36c741fa731313005754660c4cf6a70d' // This dpend on your instance
var defaultgroupID = "36c741fa731313005754660c4cf6a70d" // This is a default group from my group list you will get from the url
data.defaultData = {};
data.groupList = [];
var groupGR = new GlideRecord("sys_user_group");
groupGR.addActiveQuery();
groupGR.addEncodedQuery(assignmentGroupQuery);
groupGR.query();
while(groupGR.next()){
data.groupList.push({
"name": groupGR.getValue("name"),
"sys_id": groupGR.getUniqueValue(),
});
if(defaultgroupID == groupGR.getUniqueValue()){
data.defaultData = {
"name": groupGR.getValue("name"),
"sys_id": groupGR.getUniqueValue(),
}
}
}
}
if(input && input.action == "getGroupInfo"){
var groupId = input.group_id;
data.incidentInfo = {}
var active = 0;
var closed = 0;
var resolved = 0;
var incidentInfo = new GlideRecord("incident");
incidentInfo.addQuery("assignment_group",groupId);
incidentInfo.query();
while(incidentInfo.next()){
/*
Active is State = "New | 1", "In Progress | 2", "On Hold | 3 "
Closed is State = "Closed | 7"
Resolved is State = "Resolved |6"
*/
var incidentState = incidentInfo.getDisplayValue("state");
if(incidentState == "New" || incidentState == "In Progress" || incidentState == "On Hold"){
active++
} else if(incidentState == "Closed"){
closed++
} else if(incidentState == "Resolved"){
resolved++
}
}
data.incidentInfo = {
"active" : active,
"closed" : closed,
"resolved" : resolved
}
}
})();
And this is how it looks for me
You just need to modify to get in the server Script the part to get the group_id from the default url.
Hope that help you
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-04-2023 09:55 PM
Thank you @Marco0o1
Can you please tell how it will work for all group.Which means in above we only set single group ,i want when i select group in list it will show me all incident data.
Can you give some more points on that.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-05-2023 06:01 AM
I modify a litle bit the widget and add to show a simple list, you cand modify to your style:
HTML
<div>
<h3>Incident Count by Assignment Group</h3>
<label for="assignmentGroupSelect">Select Assignment Group:</label>
<select ng-change="c.getIncidentCounts(c.selectedGroup)" id="groups" ng-value="c.defaultgroupURL" name="groups" class="form-control"
ng-model="c.selectedGroup"
ng-options="group.name for group in c.data.groupList">
<option value="">{{c.data.defaultData.name}}</option>
</select>
<ul>
<li>Active: {{ c.incidentCounts.active }}</li>
<li>Closed: {{ c.incidentCounts.closed }}</li>
<li>Resolved: {{ c.incidentCounts.resolved }}</li>
</ul>
</div>
<h2>
<center>INCIDENT LIST</center>
</h2>
<table class="table-task">
<thead>
<tr>
<th>No.</th>
<th>Incident Number</th>
<th>Short Description</th>
<th>State</th>
<th>Assigned to</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="incident in c.incidentList">
<td>{{incident.no}}</td>
<td>{{incident.number}}</td>
<td>{{incident.short_description}}</td>
<td>{{incident.state}}</td>
<td>{{incident.assigned_to}}</td>
</tr>
</tbody>
</table>
CSS
.table-task {
border-collapse:collapse;
border-spacing: 0;
width:100%;
}
.table-task td{
border-color: black;
border-style:solid;
border-width: 1px;
font-family: Arial, sans-serif;
font-size: 14px;
overflow: hidden;
padding:10px 5px;
word-break:normal;
}
.table-task th{
border-color: black;
border-style: solid;
border-width: 1px;
font-family: Arial, sans-serif;
font-size: 14px;
font-weight: normal;
overflow: hidden;
padding:10px 5px;
word-break:normal;
}
table.table-task thead tr {
background-color: #1432f1;
color:white;
}
table.table-task thead tr th {
text-align: center;
}
Client
api.controller=function() {
var c = this;
c.incidentCounts = {
"active" : 0,
"closed" : 0,
"resolved" : 0,
}
c.incidentList= [];
c.getIncidentCounts = function(group) {
var groupID = "";
if(!group){
groupID = c.data.defaultData.sys_id;
} else {
groupID = group.sys_id
}
c.server.get({
'group_id': groupID,
'action': "getGroupInfo"
}).then(function(response){
if(response.data.incidentInfo){
c.incidentCounts = response.data.incidentInfo;
c.incidentList = response.data.incidentList;
console.log("Received data");
}
}
)
}
c.getIncidentCounts(c.data.defaultData);
}
Server
(function() {
/* populate the 'data' object */
/* e.g., data.table = $sp.getValue('table'); */
if(!input){
var assignmentGroupQuery = 'sysparm_clear_stack=true';
// var assignmentGroupUrl = '/api/now/table/sys_user_group?' + assignmentGroupQuery;
var assignmentGroupUrl ='/api/now/table/sys_user_group/36c741fa731313005754660c4cf6a70d' // This dpend on your instance
var defaultgroupID = "36c741fa731313005754660c4cf6a70d" // This is a default group from my group list
data.defaultData = {};
data.groupList = [];
var groupGR = new GlideRecord("sys_user_group");
groupGR.addActiveQuery();
groupGR.addEncodedQuery(assignmentGroupQuery);
groupGR.query();
while(groupGR.next()){
data.groupList.push({
"name": groupGR.getValue("name"),
"sys_id": groupGR.getUniqueValue(),
});
if(defaultgroupID == groupGR.getUniqueValue()){
data.defaultData = {
"name": groupGR.getValue("name"),
"sys_id": groupGR.getUniqueValue(),
}
}
}
}
if(input && input.action == "getGroupInfo"){
var groupId = input.group_id;
data.incidentInfo = {};
data.incidentList = [];
var count = 0;
var active = 0;
var closed = 0;
var resolved = 0;
var incidentInfo = new GlideRecord("incident");
incidentInfo.addQuery("assignment_group",groupId);
incidentInfo.query();
while(incidentInfo.next()){
/*
Active is State = "New | 1", "In Progress | 2", "On Hold | 3 "
Closed is State = "Closed | 7"
Resolved is State = "Resolved |6"
*/
var incidentState = incidentInfo.getDisplayValue("state");
if(incidentState == "New" || incidentState == "In Progress" || incidentState == "On Hold"){
active++
} else if(incidentState == "Closed"){
closed++
} else if(incidentState == "Resolved"){
resolved++
}
data.incidentList.push({
"no" : count++,
"number" : incidentInfo.getDisplayValue("number"),
"short_description": incidentInfo.getDisplayValue("short_description"),
"assigned_to" : incidentInfo.getDisplayValue("assigned_to"),
"state" : incidentState
})
}
data.incidentInfo = {
"active" : active,
"closed" : closed,
"resolved" : resolved
}
}
})();
And there is how it look, when you select a group then show the list of incidents:
Hope that help you