Sync / roster
Real-time bidirectional sync of student demographics, enrollment, and academic standing between Ellucian Colleague and PeopleSoft Campus Solutions using MuleSoft as the integration middleware.
This integration establishes a real-time bidirectional synchronization between Ellucian Colleague and Oracle PeopleSoft Campus Solutions, enabling institutions to consolidate SIS platforms or support cross-departmental operations during a migration lifecycle. MuleSoft serves as the integration engine, managing identity resolution, field-level mapping, and conflict detection between the two disparate student record schemas.
The primary challenge lies in reconciling fundamentally different data models: Colleague uses its own identifier conventions, term structures, academic standing rules, and student person types that do not map one-to-one onto PeopleSoft's STVTERM-based terminology and STU record architecture. Without a canonical layer, every sync cycle requires careful conflict resolution to prevent data drift, especially when both systems may be updated by different administrative offices within hours of each other.
A working piece from this integration — no sign-up. The full build handles the edge cases, safeguards, and cutover.
%dw 2.0 %output application/json /* Ellucian Colleague → PeopleSoft Campus Solutions */ /* Student Demographics Sync Mapping */ payload map ((person) -> { EMPLID: person.STU_ID, FIRST_NAME: person.FIRST_NAME, LAST_NAME: person.LAST_NAME, MIDDLE_NAME: person.MIDDLE_NAME default "", EMAIL_ADDR: person.EMAIL_ADDRESS, BIRTHDATE: person.BIRTH_DATE as Date {format: "yyyy-MM-dd"}, CAMPUS: person.PRIMARY_COLLEGE, ACAD_PROG_PRIMARY: person.PROGRAM_CODE, LASTUPDDTTM: now() as String {format: "yyyy-MM-dd'T'HH:mm:ss"} }) /* PeopleSoft PUT to: /api/campus-community/person/$(EMPLID) */
How we'd take this from discovery to a production-safe cutover — the phases, the canonical mapping, and the edge cases that bite.
This integration synchronizes student core data, enrollment events, and academic standing between Ellucian Colleague (system of record for academics) and PeopleSoft Campus Solutions (system of record for financials and student accounts) via MuleSoft Anypoint Platform, using a publish/subscribe event architecture with guaranteed delivery and idempotent processing.
EMPLID mapping table hosted in MuleSoft Object Store. Build a lookup service that correlates PIDM from Colleague to EMPLID in PeopleSoft. Seed this from a batch comparison of STUDENTS.ID vs. PS_PERSONAL_DATA.EMPLID using a deterministic hash where IDs differ./api/students, /api/enrollments, and /api/academic-records endpoints. Implement DataWeave transforms that flatten Colleague's nested JSON entities into a canonical sync payload schema.STU_ENRL and STDNT_CAREFL components.STUDENTS, STU_ENROLLMENTS, and STDNT_CAREFL tables. Capture UPD_DTTM timestamps to generate delta payloads. Tag payloads with operation type: INSERT, UPDATE, or DELETE.SYNC_ID, TIMESTAMP, STATUS, and PAYLOAD_HASH.SYNC_ID as an idempotency key stored in Object Store with a 48-hour TTL. Implement a dead-letter queue (DLQ) in Anypoint MQ for failed records. Configure exponential backoff retry (3 attempts: 1min, 5min, 30min). Route 4xx errors to the DLQ for manual review; 5xx errors trigger auto-retry with alerting.GPA values in STDNT_CAREFL.CUM_GPA match ACADEMIC_RECORD.GPA within 4 decimal places.| Domain | Colleague Entity | Colleague Field | PeopleSoft Record | PeopleSoft Field | Transform Notes |
|---|---|---|---|---|---|
| Identity | STUDENTS | PIDM |
PS_PERSONAL_DATA | EMPLID |
Use mapping table; fallback to STUDENTS.ID if direct match |
| Demographics | STUDENTS | FIRST_NAME, LAST_NAME |
PS_NAMES | FIRST_NAME, LAST_NAME |
Name Primary Name type (NAME_TYPE = 'PRI') |
| Demographics | STUDENTS | EMAIL |
PS_EMAIL_ADDRESSES | EMAIL_ADDR |
Primary email flag; truncate to 254 chars |
| Enrollment | STU_ENROLLMENTS | STU_ID, CRN, TERM |
PS_SFA_STDNT_ENRL | EMPLID, CRSE_ID, STRM |
Map CRN to CRSE_ID via CRSE_CATALOG join |
| Enrollment | STU_ENROLLMENTS | ENROLLMENT_STATUS |
PS_SFA_STDNT_ENRL | ENRL_STATUS |
Map Colleague codes (E/W/D) to PS codes (A/W/D) |
| Academics | STDNT_CAREFL | STU_ID, CUM_GPA |
PS_STDNT_CAREFL | EMPLID, CUM_GPA |
Decimal(5,3); set UNT_TAKEN from HOURS_ATTEMPTED |
| Academics | STDNT_CAREFL | CLASS_LEVEL |
PS_STDNT_CAREFL | CLASSIFICATION |
Map codes (FR/SO/JR/SR) to PS classification values |
| Financial Aid | FINANCIAL_AID | AID_YEAR, AWARD_AMOUNT |
PS_SFA_AID_APP | AID_YEAR, AWARD_AMT |
PeopleSoft → Colleague direction only |
EMPLID silently drops; must be caught in the lookup step and routed to an exception flow that creates the person in PeopleSoft first.ENROLLMENT_STATUS update arrives after a contradictory PeopleSoft update; without idempotency keys the record flips back and forth indefinitely.STRM codes diverge between systems if mapping is hardcoded; handle null or unknown STRM by holding events until the term is provisioned in both systems.PS_NAMES immediately can invalidate active documents.CUM_GPA asynchronously after grade posting; syncing the old value before recalculation completes causes a stale read in PeopleSoft that never reconciles.UPD_DTTM timestamps and skip records newer than the batch start time.STUDENTS, STU_ENROLLMENTS, and STDNT_CAREFL. Any record with a checksum mismatch is quarantined. During cutover, pause PeopleSoft inbound traffic at the integration boundary (not the database), perform the snapshot load, then resume with a 24-hour read-only verification period before switching to full bidirectional mode. If rollback is required, replay the shadow table logs in reverse order, which restores both systems to their pre-cutover state within a 15-minute window. Reading the reference is free. Delivering it under liability — with the safeguards that keep production running through the cutover — is what we do.