Contents
Contents

Integration Broker and Production Patterns

Struggling to bridge the legacy gap? Cedar Hills Group provides specialized PeopleSoft integration consulting to help teams design, build, and optimize their connection strategies.

When exposing PeopleSoft business logic to external systems over Integration Broker—or supporting high-volume functional uploads—how you wrap your Component Interface determines whether your integration is resilient or brittle.

Direct CI Web Services vs. Message-Plus-Handler Architecture

PeopleTools provides a wizard (PeopleTools > Integration Broker > Web Services > CI-Based Services) that can publish a Component Interface directly as a SOAP/REST web service (Get, Create, Update, UpdateData, Find).

While a Direct CI-Based Web Service can be clicked together in minutes for a quick prototype or a simple lookup (PTLOOKUP), avoid exposing Direct CI Web Services for complex transactional updates.

flowchart TD subgraph DirectCI["Anti-Pattern: Direct CI-Based Web Service"] Ext1["External Caller"] -->|"Tightly Coupled to CI Schema
(All Scroll Levels & Quirks)"| CIWS["Direct CI Web Service"] CIWS --> Comp1["Component Interface"] end subgraph LooseCoupled["Recommended: Message + Application Class Handler"] Ext2["External Caller"] -->|"Clean Business Payload
(JSON / XML)"| SvcOp["Service Operation"] SvcOp --> Handler["OnRequest / OnNotify Handler
(Application Package PeopleCode)"] Handler -->|"Validates, Defaults, Stages &
Drives CI (Create-or-Get)"| Comp2["Component Interface"] end

Why the Message + Application Class Handler pattern wins in production:

  • Loose coupling: External callers send a clean, canonical JSON or XML payload containing only the business fields they care about. If a PeopleSoft PUM upgrade changes an internal work field or scroll structure on the component, you update only your PeopleCode handler—external callers never have to change their payload.
  • Idempotent Create-or-Get logic: A Direct CI Web Service forces the external caller to know in advance whether to call Create or Update/UpdateData. A custom handler can transparently attempt .Get() and fall back to .Create() (or vice versa) in a single operation.
  • Staging and replay: For asynchronous (OnNotify) or high-volume integrations, your handler can write the inbound message to a staging table first and invoke the CI with full error capture, allowing administrators to fix and replay failed transactions inside PIA without asking the external system to resend.

Excel-to-CI (ExcelToCI) Architecture

PeopleSoft delivers the Excel-to-Component Interface (ExcelToCI) utility (ExcelToCI2007.xlsm), which allows functional users to upload spreadsheet rows into PeopleSoft through a Component Interface without writing custom Application Engine programs.

flowchart LR Excel["Excel Workbook
(Connect / Data Input / Staging & Submission)"] -->|"HTTPS SOAP/XML POST
(WEBLIB_SOAPTOCI)"| WebSrv["PeopleSoft Web Server"] WebSrv --> AppSrv["App Server: SOAPTOCI
(iScript_Excel_Request)"] AppSrv --> CI["Target Component Interface
(Get / Create / Update)"] CI --> DB[("PeopleSoft Database")] AppSrv -->|"Per-Row Status (OK / Error)
from PSMessages"| Excel

Key architectural points when using ExcelToCI:

  • How it communicates: The Excel Visual Basic macro posts XML chunks over HTTPS to WEBLIB_SOAPTOCI on the Web Server, which invokes the SOAPTOCI Application Package / iScript on the App Server to instantiate your Component Interface dynamically.
  • Security requirements: The user logging in from Excel needs Permission List access to both the target Component Interface (PSAUTHBUSCOMP) and the WEBLIB_SOAPTOCI web library.
  • Purpose-built CIs: Never point ExcelToCI at a sprawling delivered CI with 300 properties. Create a dedicated, stripped-down Component Interface that exposes only the 5 to 15 fields the functional user actually needs to upload.

Production PeopleCode Patterns

Reusable CIBase Wrapper Class (SetIfDifferent)

When updating existing records through a Component Interface, assigning a property value that is already identical to the current database value can still trigger unnecessary FieldEdit/FieldChange processing or mark a row dirty. Wrapping your CI calls in a reusable base class provides a clean SetIfDifferent() helper and centralized PSMessages formatting:

class CIBase
   method CIBase(&sCIName As string);
   method SetIfDifferent(&oTarget As ApiObject, &sPropName As string, &vNewVal As any) Returns boolean;
   method GetFormattedMessages() Returns string;
   property ApiObject CI readonly;
private
   instance ApiObject &oSession, &oCI;
end-class;

method CIBase
   /+ &sCIName as String +/
   &oSession = %Session;
   &oSession.PSMessagesMode = 1;
   &oSession.PSMessages.DeleteAll();
   &oCI = &oSession.GetCompIntfc(@("CompIntfc." | &sCIName));
   If &oCI = Null Then
      throw CreateException(0, 0, "Failed to instantiate CI: " | &sCIName);
   End-If;
end-method;

method SetIfDifferent
   /+ &oTarget as ApiObject, +/
   /+ &sPropName as String, +/
   /+ &vNewVal as Any +/
   /+ Returns Boolean +/
   Local any &vCurrVal = &oTarget.GetPropertyByName(&sPropName);
   If &vCurrVal <> &vNewVal Then
      &oTarget.SetPropertyByName(&sPropName, &vNewVal);
      Return True;
   End-If;
   Return False;
end-method;

method GetFormattedMessages
   /+ Returns String +/
   Local ApiObject &oMsgColl = &oSession.PSMessages;
   Local ApiObject &oMsg;
   Local integer &i;
   Local string &sOut;
   For &i = 1 To &oMsgColl.Count
      &oMsg = &oMsgColl.Item(&i);
      &sOut = &sOut | "(" | &oMsg.MessageSetNumber | "," | &oMsg.MessageNumber | ") " | &oMsg.Text | Char(10);
   End-For;
   &oMsgColl.DeleteAll();
   Return &sOut;
end-method;

Dynamic Property Inspection (GetPropertyByName and PropertyInfoCollection)

Rather than hardcoding every property name when building generic Integration Broker handlers or diagnostic tools, you can inspect and set CI properties dynamically at runtime using PropertyInfoCollection, GetPropertyByName(), and SetPropertyByName():

/* Dynamically iterate all properties on a CI or Collection Item */
Local ApiObject &oPropInfoColl = &oCI.PropertyInfoCollection;
Local ApiObject &oPropInfo, &oChildColl;
Local integer &i;
Local string &sName;

For &i = 1 To &oPropInfoColl.Count
   &oPropInfo = &oPropInfoColl.Item(&i);
   &sName = &oPropInfo.Name;
   
   If &oPropInfo.IsCollection Then
      /* This property is a child Data Collection (Scroll/Grid) */
      &oChildColl = &oCI.GetPropertyByName(&sName);
   Else
      /* Standard scalar property */
      If Not &oPropInfo.IsReadOnly Then
         Local any &val = &oCI.GetPropertyByName(&sName);
      End-If;
   End-If;
End-For;

Auditing Component Interfaces via PeopleTools Metadata SQL

PeopleTools stores Component Interface definitions in two core metadata tables:

  • PSBCDEFN — Component Interface header table (BCNAME, PNLGRPNAME, MARKET, SEARCHRECNAME, ADDSEARCHRECNAME, DESCR).
  • PSBCITEM — Component Interface item hierarchy (BCNAME, BCITEMNAME, BCITEMTYPE, BCPARENTNAME, RECNAME, FIELDNAME, READONLY).

You can run the following SQL queries to audit your environment for broken or unindexed Component Interfaces:

-- 1. Find Component Interfaces whose underlying Component no longer exists
SELECT B.BCNAME, B.PNLGRPNAME, B.MARKET, B.LASTUPDOPRID, B.LASTUPDDTTM
  FROM PSBCDEFN B
 WHERE NOT EXISTS (
       SELECT 1
         FROM PSPNLGRPDEFN P
        WHERE P.PNLGRPNAME = B.PNLGRPNAME
          AND P.MARKET = B.MARKET
 );

-- 2. Find Component Interfaces that have no Permission List security granted
SELECT B.BCNAME, B.PNLGRPNAME, B.DESCR
  FROM PSBCDEFN B
 WHERE NOT EXISTS (
       SELECT 1
         FROM PSAUTHBUSCOMP A
        WHERE A.BCNAME = B.BCNAME
          AND A.AUTHORIZEDACTIONS > 0
 );

-- 3. Find CI properties with duplicate '_1' auto-generated names
SELECT BCNAME, BCPARENTNAME, BCITEMNAME, RECNAME, FIELDNAME
  FROM PSBCITEM
 WHERE BCITEMNAME LIKE '%\_1' ESCAPE '\'
 ORDER BY BCNAME, BCPARENTNAME, BCITEMNAME;
psLens Platform
psLens Operations & Intelligence

Look up any record, field, page, or component, audit security, and monitor Integration Broker across every database — in seconds.

  • 30+ object types browsable
  • 16 real-time alert types
  • Read-only by design
  • No App Designer or SQL required
Learn More
psLens Platform
psLens Operations & Intelligence

A web console built for the PeopleSoft community — operational monitoring, security auditing, and metadata browsing in one tool.

  • Sub-second object search
  • Catch stuck IB messages before users do
  • Audit service permissions from one screen
  • Works in any browser
Learn More
psLens Platform
psLens Operations & Intelligence

On-demand security and operational reports for your PeopleSoft environment — no client install required.

  • 14 on-demand reports
  • Markdown export for AI/LLM workflows
  • No shared tenancy
  • Built on 25+ years of PeopleSoft expertise
Learn More
psLens Platform
psLens Operations & Intelligence

Research any PeopleSoft object and monitor system health from a single browser tab — no App Designer, no SQL.

  • 30+ PeopleSoft object types browsable
  • Real-time alerts before users report problems
  • Read-only and secure
  • Private alpha — early access now
Learn More
Author Profile
Chris Malek

Chris Malek is a PeopleTools® Technical Consultant with over two decades of experience. He is available for consulting engagements.

Work with Chris
Subscribe to Updates
SWS Bolt-On
PeopleSoft Simple Web Services

SWS turns SQL into production REST APIs — ready for AI, modern apps, and partner integrations. One install, unlimited potential.

  • Configuration-driven, no coding required
  • JSON, XML, and CSV output
  • Works across all PeopleSoft pillars
  • Built on 25+ years of PeopleSoft expertise
Read More & Purchase
SWS Bolt-On
PeopleSoft Simple Web Services

A powerful PeopleSoft bolt-on that makes REST web services easy. You bring the SQL, SWS handles the rest.

  • Go from idea to production in minutes
  • Zero code migrations after install
  • JSON, XML, and CSV output supported
  • No PeopleCode or Integration Broker expertise required
Read More & Purchase
SWS Bolt-On
PeopleSoft Simple Web Services

Traditional PeopleSoft web services cost $3,600–$13,000 each to develop. SWS deploys production REST APIs in under 5 minutes through configuration alone.

  • No PeopleCode or Integration Broker expertise required
  • Works across Campus Solutions, HCM, and Financials
  • Built-in pagination, caching, and nested data structures
  • Trusted by institutions across higher education and government
Read More & Purchase
SWS Bolt-On
PeopleSoft Simple Web Services

Turn PeopleSoft data into clean REST APIs for AI integrations, modern applications, and vendor data feeds. Configuration-driven — no PeopleCode required.

  • Deploy production APIs in under 5 minutes
  • AI and LLM ready (RAG, chatbots, intelligent search)
  • JSON, XML, and CSV output
  • Zero modifications to delivered PeopleSoft objects
Read More & Purchase