# Nodes

> Browse PeopleSoft Integration Broker nodes — external systems, partner databases, and internal services that exchange IB messages.

---

Site [llms.txt](/llms.txt)

---

<div id="pslens-context-panel" class="card border-info mb-4 d-none">
  <div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle">
    <i class="bi bi-info-circle-fill me-2"></i>
    <span>Tailored Operational Context</span>
  </div>
  <div class="card-body p-0">
    <ul class="list-group list-group-flush">
      <li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Target Database:</strong>
        <span id="ctx-db" class="badge bg-secondary font-monospace">&mdash;</span>
      </li>
      <li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Context Type:</strong>
        <span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase">&mdash;</span>
      </li>
      <li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Alert Severity:</strong>
        <span id="ctx-severity" class="badge">&mdash;</span>
      </li>
      <li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Triggered Time:</strong>
        <span id="ctx-time" class="text-muted small">&mdash;</span>
      </li>
      <li id="row-details" class="list-group-item py-2 d-none">
        <strong id="label-details" class="d-block mb-1">Firing Context:</strong>
        <code id="ctx-details" class="d-block p-2 bg-light border rounded small"
          style="white-space: pre-wrap; word-break: break-all;">&mdash;</code>
      </li>
      <li id="row-sql" class="list-group-item py-2 d-none">
        <div class="d-flex justify-content-between align-items-center mb-1">
          <strong id="label-sql">Contextual SQL:</strong>
          <button id="btn-copy-sql" type="button" class="btn btn-sm btn-outline-secondary py-0 px-2 small">
            <i class="bi bi-clipboard me-1"></i>Copy SQL
          </button>
        </div>
        <pre class="mb-0 p-2 bg-light border rounded small"><code id="ctx-sql" style="white-space: pre-wrap; word-break: break-word;">&mdash;</code></pre>
      </li>
    </ul>
  </div>
</div>

<script>
  (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 (data.sql) {
          document.getElementById('ctx-sql').textContent = data.sql;
          document.getElementById('row-sql').classList.remove('d-none');
          const copyBtn = document.getElementById('btn-copy-sql');
          if (copyBtn && navigator.clipboard) {
            copyBtn.addEventListener('click', function () {
              navigator.clipboard.writeText(data.sql).then(function () {
                copyBtn.innerHTML = '<i class="bi bi-check2 me-1"></i>Copied';
                setTimeout(function () {
                  copyBtn.innerHTML = '<i class="bi bi-clipboard me-1"></i>Copy SQL';
                }, 2000);
              });
            });
          }
          hasData = true;
        }

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

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 (`PSMSGNODEDEFN`). 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.

## Object Relationships

Nodes represent integration targets and security identities in Integration Broker:

- **Endpoints for Routings**: Nodes (`PSMSGNODEDEFN`) are configured as senders or receivers in Routing definitions (`PSIBRTNGDEFN`).
- **Binds User Authorization**: Nodes link to default user accounts (`OPRID`) that dictate execution rights for incoming service operation requests.

## How psLens Improves Integration Node Inspection

Reviewing Integration Broker nodes in PIA requires stepping through Connectors, Portal, WS Security, and Routings tabs, while searching Service Operations permissions separately for default node users.

psLens surfaces node properties, password security flags, routing traffic, default user service operation permissions, and URI text in a unified view.

## Search Page

URL: `/nodes?db={database}`

<figure><img src="/images/screenshots/ib/nodes-search.png"
			alt="Node search results for PSFT% showing PSFT_CR, PSFT_CS, PSFT_E1, and other delivered nodes"><figcaption>
			<p>Node search results for <code>PSFT%</code></p>
		</figcaption>
</figure>


Wildcard `%` search supported. Each card shows the node type (Local, External, Hub), the node's active flag, the default user ID, and the descriptive name. Enough at a glance to spot inactive nodes or nodes pointing at unexpected user accounts.

## Detail Page

URL: `/nodes/{NODENAME}?db={database}`

<figure><img src="/images/screenshots/ib/nodes-detail.png"
			alt="Detail page for PSFT_CS node"><figcaption>
			<p>Node detail page for <code>PSFT_CS</code></p>
		</figcaption>
</figure>


The main pane shows **Node Properties**: node type, connector ID, default user, authentication option, password-set indicator, contact, and audit metadata. The sidebar has 4 related-data toggles.

When applicable, the detail page also surfaces two operational and security banners at the top of the view:

- **Blocked Transactions (`PSNODESDOWN`)**: Appears when outbound asynchronous transactions to the node have failed and queued rows in `PSNODESDOWN`, displaying the blocked service operations and a deep link to the [IB Nodes Down troubleshooting guide](/docs/alerts/integration-broker/ib-nodes-down/) with contextual SQL.
- **Security Warning (`AUTHOPTN = 'N'`)**: Appears when an active node has no authentication configured, linking to the [Nodes with No Password remediation guide](/docs/reports/security/security-nodes-no-password/) with node context.

## Related Data Panels

### Routings

<figure><img src="/images/screenshots/ib/nodes-panel-routings.png"
			alt="Routings panel for the node"><figcaption>
			<p>Every routing rule that involves this node (sender or receiver)</p>
		</figcaption>
</figure>


Every routing rule (`PSIBRTNGDEFN`) where this node appears as sender or receiver, with the service operation, direction, and status. Lists the message traffic that flows through this node.

### User's Service Operations

<figure><img src="/images/screenshots/ib/nodes-panel-user-svc-ops.png"
			alt="User&#39;s Service Operations panel"><figcaption>
			<p>Service operations the node&rsquo;s default user has permission to invoke</p>
		</figcaption>
</figure>


The service operations the node's default user has been granted permission to invoke. Important for security audits, since a node's default user can be granted service operations that the human OPRID would never get.

### URI Text

<figure><img src="/images/screenshots/ib/nodes-panel-uri-text.png"
			alt="URI Text panel"><figcaption>
			<p>URI text entries configured against the node</p>
		</figcaption>
</figure>


The URI text entries configured against the node (`PSIBNODEURITEXT`). The per-node URL fragments used in REST-style integrations.

### Included in Projects

<figure><img src="/images/screenshots/ib/nodes-panel-projects.png"
			alt="Included in Projects panel for the node"><figcaption>
			<p>App Designer projects that include this node</p>
		</figcaption>
</figure>


App Designer projects that include the node definition.
