<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Pages on psLens</title><link>https://pslens.com/tags/pages/</link><description>Recent content in Pages on psLens</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://pslens.com/tags/pages/index.xml" rel="self" type="application/rss+xml"/><item><title>Pages</title><link>https://pslens.com/docs/objects/pages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/objects/pages/</guid><description>&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function() {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;

&lt;h2 id="what-it-is"&gt;What It Is&lt;/h2&gt;
&lt;p&gt;Pages are the visual screens users interact with in PeopleSoft: the panel definitions from &lt;code&gt;PSPNLDEFN&lt;/code&gt; and the per-control bindings from &lt;code&gt;PSPNLFIELD&lt;/code&gt;. psLens shows the full control list (every field, label, group box, and subpage on the page), the underlying records each control reads from, and the rest of the metadata graph hanging off the page: which components include it, which PeopleCode is attached, which projects contain it.&lt;/p&gt;</description></item></channel></rss>