<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Integration Broker on psLens</title><link>https://pslens.com/docs/objects/integration-broker/</link><description>Recent content in Integration Broker on psLens</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://pslens.com/docs/objects/integration-broker/index.xml" rel="self" type="application/rss+xml"/><item><title>Nodes</title><link>https://pslens.com/docs/objects/nodes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/objects/nodes/</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;p&gt;Nodes are the network endpoints of the PeopleSoft Integration Broker. Each external system, partner database, or other PeopleSoft environment that sends or receives messages is represented as a node (&lt;code&gt;PSMSGNODEDEFN&lt;/code&gt;). The node carries connection settings (connector type, target URL, authentication mode) and is the unit referenced by every routing rule. psLens shows the node configuration, every routing that involves this node, the service operations granted to its default user, and an inventory of URI text configured against it.&lt;/p&gt;</description></item><item><title>Services</title><link>https://pslens.com/docs/objects/services/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/objects/services/</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;p&gt;A Service is the high-level container in the Integration Broker hierarchy: a logical grouping of related Service Operations (&lt;code&gt;PSSERVICEDEFN&lt;/code&gt;). For example, a &lt;code&gt;STUDENT_ENROLLMENT&lt;/code&gt; service might contain &lt;code&gt;GET_ENROLLMENT&lt;/code&gt;, &lt;code&gt;ADD_ENROLLMENT&lt;/code&gt;, and &lt;code&gt;DROP_ENROLLMENT&lt;/code&gt; operations. The service itself carries metadata (description, owner, WSDL namespace) and acts as the access point for browsing operations together.&lt;/p&gt;</description></item><item><title>Service Operations</title><link>https://pslens.com/docs/objects/service-operations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/objects/service-operations/</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;p&gt;A Service Operation is the actual message-exchange contract — the unit that defines what message type is sent, in which direction (async or sync), through which routings, and handled by which PeopleCode. Each operation belongs to a service and is stored in &lt;code&gt;PSOPERATION&lt;/code&gt; with related metadata in &lt;code&gt;PSOPRDESC&lt;/code&gt;, &lt;code&gt;PSOPRROUTING&lt;/code&gt;, &lt;code&gt;PSOPRHANDLER&lt;/code&gt;, and the security tables. psLens consolidates the full operation — versions, routings, handlers, caller nodes, security access from three angles, and live IB transaction history — into one page.&lt;/p&gt;</description></item><item><title>Application Services</title><link>https://pslens.com/docs/objects/app-services/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/objects/app-services/</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;p&gt;An Application Service is an Application Services Framework (ASF) definition, stored in &lt;code&gt;PSIBAPPLDEFN&lt;/code&gt;. It exposes a REST API backed by application classes, without the hand-built service operations that classic Integration Broker requires. psLens consolidates the service&amp;rsquo;s operations, URI templates and REST methods, method parameters, result-state-to-HTTP-status mappings, header properties, and security grants onto one page.&lt;/p&gt;</description></item><item><title>Messages</title><link>https://pslens.com/docs/objects/messages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/objects/messages/</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;p&gt;A Message definition is the payload schema that a Service Operation carries. It defines the structure of the XML or JSON document exchanged between systems. Messages can be rowset-based (mapped to PeopleSoft records), nonrowset-based (free-form XML/JSON), container, or document. psLens reads &lt;code&gt;PSMSGDEFN&lt;/code&gt; and the version-specific details from &lt;code&gt;PSMSGSCHEMA&lt;/code&gt;, then surfaces the service operations that reference each message and the projects that own them.&lt;/p&gt;</description></item><item><title>Queues</title><link>https://pslens.com/docs/objects/queues/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/objects/queues/</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;p&gt;A Queue is an Integration Broker ordering construct. Async service operations attached to the same queue process serially in the order they arrived, while operations on different queues can run in parallel. Queues are also the unit where IB pauses (&amp;ldquo;Pause&amp;rdquo; status) when an administrator stops message processing for maintenance. Each queue is stored in &lt;code&gt;PSQUEUEDEFN&lt;/code&gt; with a status (Run, Pause) and a partitioning configuration.&lt;/p&gt;</description></item></channel></rss>