I am working on extracting the sysparm_targetCompanyID from a UI Page URL.
Here's the setup: I have two UI Pages. The first UI Page serves as a dashboard displaying a grid of cards, with each card representing a customer. When a card is clicked, it redirects to a second UI Page, passing the sys_id of the company as part of the URL, to display detailed information about that company.
The second UI Page is built using Jelly. While I can successfully retrieve the sys_id using standard code in the client script section, I am unable to assign the value to the targetCompanyID variable. Any attempt results in a "Reference Error," preventing the company data from being displayed.
Here is an example of the URL I am trying to extract the sysparm_targetCompanyID from:
<a href="https://instancenamedev.service-now.com/ui_page.do?sys_id=1610e12947965e5020ed43f4116d439e&syspa...}" target="_blank" style="text-decoration: none; color: inherit;">
I am thinking the problem is getting it to work using Jelly, not sure if i need to use j:set or something else. If anyone can point me in the right direction, much appreciated, thank you.
Also, using a hard code sysid DOES work, no problem, everything shows for the company. I hope I provided enough information.
---
var data = {};
//var targetCompanyID = "${jvar_targetCompanyID}"; // for example
//var targetCompanyID = "b66f310b93bd0250b0153b6a7bba10bd";
var grProject = new GlideRecord('pm_project');
grProject.addQuery("active", true);
grProject.addQuery("company", targetCompanyID);
grProject.query();
while (grProject.next()) {
var companyID = grProject.getValue('company');
var companyName = grProject.company.getDisplayValue();
var projectSysID = grProject.getValue('sys_id');
if (!data[companyID]) {
data[companyID] = {
name: companyName,
risks: [],
issues: [],
actions: [],
decisions: [],
proddowns: []
};
}
var grRisk = new GlideRecord('risk');
grRisk.addQuery('task', projectSysID);
grRisk.query();
while (grRisk.next()) {
data[companyID].risks.push({
number: grRisk.getValue('number'),
task: grRisk.getDisplayValue('task'),
project: grProject.getValue('short_description'),
phase: grProject.getValue('u_project_phase'),
shortDescription: grRisk.getValue('short_description'),
description: grRisk.getValue('description'),
created: grRisk.getValue('sys_created_on'),
dueDate: grRisk.getValue('due_date'),
probability: grRisk.getValue('probability'),
impact: grRisk.getValue('impact'),
state: grRisk.getDisplayValue('state'),
assignedTo: grRisk.getDisplayValue('assigned_to'),
mitigationPlan: grRisk.getValue('mitigation_plan'),
workNotes: grRisk.getValue('work_notes')
});
}
var grIssue = new GlideRecord('issue');
grIssue.addQuery('parent', projectSysID);
grIssue.query();
while (grIssue.next()) {
data[companyID].issues.push({
number: grIssue.getValue('number'),
shortDescription: grIssue.getValue('short_description'),
impact: grIssue.getValue('impact'),
priority: grIssue.getDisplayValue('priority'),
assignedTo: grIssue.getDisplayValue('assigned_to'),
dueDate: grIssue.getValue('due_date'),
state: grIssue.getDisplayValue('state'),
parent: grIssue.getDisplayValue('parent')
});
}
var grAction = new GlideRecord('project_action');
grAction.addQuery('parent', projectSysID);
grAction.query();
while (grAction.next()) {
data[companyID].actions.push({
number: grAction.getValue('number'),
shortDescription: grAction.getValue('short_description'),
impact: grAction.getValue('impact'),
priority: grAction.getDisplayValue('priority'),
assignedTo: grAction.getDisplayValue('assigned_to'),
dueDate: grAction.getValue('due_date'),
state: grAction.getDisplayValue('state'),
parent: grAction.getDisplayValue('parent')
});
}
// Query decisions related to this project
var grDecision = new GlideRecord('dmn_decision');
grDecision.addQuery('parent', projectSysID); // Assuming 'parent' relates decisions to the project
grDecision.query();
while (grDecision.next()) {
data[companyID].decisions.push({
number: grDecision.getValue('number'),
shortDescription: grDecision.getValue('short_description'),
state: grDecision.getDisplayValue('state'),
priority: grDecision.getDisplayValue('priority'),
assignedTo: grDecision.getDisplayValue('assigned_to'),
created: grDecision.getValue('sys_created_on'),
dueDate: grDecision.getValue('due_date'),
decisionOutcome: grDecision.getValue('decision_outcome'), // Example custom field
notes: grDecision.getValue('decision_notes') // Example custom field
});
}
// Query ProdDown related to this project
var grProdDown = new GlideRecord('u_incident_pd');
grProdDown.addQuery('parent', projectSysID); // Assuming 'parent' relates prod down incidents to the project
grProdDown.query();
while (grProdDown.next()) {
data[companyID].proddowns.push({
number: grProdDown.getValue('number'),
shortDescription: grProdDown.getValue('short_description'),
priority: grProdDown.getDisplayValue('priority'),
assignedTo: grProdDown.getDisplayValue('assigned_to'),
state: grProdDown.getDisplayValue('state'),
created: grProdDown.getValue('sys_created_on'),
updated: grProdDown.getValue('sys_updated_on'),
resolutionNotes: grProdDown.getValue('close_notes'), // Example field for resolution notes
workNotes: grProdDown.getValue('work_notes') // Example field for work notes
});
}
}
var tableData = [];
for (var key in data) {
tableData.push({
companyID: key,
name: data[key].name,
risks: data[key].risks,
issues: data[key].issues,
actions: data[key].actions,
decisions: data[key].decisions,
proddowns: data[key].proddowns
});
}
tableData;
the following is an example of the table formatting to display data.
<div class="container my-5 p-4 bg-light rounded shadow">
<!-- Header Section -->
<div class="text-center mb-4">
<h2 class="fw-bold">Profile View</h2>
</div>
<!-- Company Section -->
<j:forEach var="jvar_row" items="${jvar_tableData}">
<!-- Company Header -->
<div class="bg-primary text-white p-3 rounded mb-4">
<h3 class="m-0">${jvar_row.name}</h3>
</div>
<!-- Risk Section -->
<div class="bg-secondary text-white p-2 rounded mb-3">
<h5 class="m-0">Risks</h5>
</div>
<div class="table-responsive">
<table class="table table-striped table-bordered">
<thead class="table-light">
<tr>
<th>Number</th>
<th>Project#</th>
<th>Project Name</th>
<th>Phase</th>
<th>Short Description</th>
<th>Description</th>
<th>Created</th>
<th>Due Date</th>
<th>Probability</th>
<th>Impact</th>
<th>State</th>
<th>Assigned To</th>
<th>Mitigation Plan</th>
<th>Work Notes</th>
</tr>
</thead>
<tbody>
<j:forEach var="jvar_risk" items="${jvar_row.risks}">
<tr>
<td>${jvar_risk.number}</td>
<td>${jvar_risk.task}</td>
<td>${jvar_risk.project}</td>
<td>${jvar_risk.phase}</td>
<td>${jvar_risk.shortDescription}</td>
<td>${jvar_risk.description}</td>
<td>${jvar_risk.created}</td>
<td>${jvar_risk.dueDate}</td>
<td>${jvar_risk.probability}</td>
<td>${jvar_risk.impact}</td>
<td>${jvar_risk.state}</td>
<td>${jvar_risk.assignedTo}</td>
<td>${jvar_risk.mitigationPlan}</td>
<td>${jvar_risk.workNotes}</td>
</tr>
</j:forEach>
</tbody>
</table>
</div>
---