Middleware
Middleware layer enabling bidirectional PeopleSoft Campus Solutions roster enrollment and LTI-based grade passback synchronization with Brightspace LMS.
This middleware integration connects Oracle PeopleSoft Campus Solutions to Brightspace (D2L) by exposing PeopleSoft enrollment data through an LTI 1.3 tool registration pipeline that provisions course sections and roster memberships in Brightspace's org unit hierarchy. When a student enrolls or drops a course section in PeopleSoft, the middleware translates the enrollment event, maps PeopleSoft's STRM term and CLASS_NBR to Brightspace course offerings, and pushes the updated roster via the Names and Roles Provisioning Service (NRPS). After an instructor posts grades in Brightspace, the middleware invokes the Assignment and Grade Services (AGS) to write final grades back into PeopleSoft's grade table, completing a closed-loop academic workflow.
The hardest part of this integration is reconciling the data model mismatch: PeopleSoft models enrollment at the CLASS_NBR level with multiple enrollment statuses (enrolled, dropped, waitlisted), while Brightspace uses org units with direct enrollments that lack a native waitlist concept. The middleware must transform effective-dated enrollment records, handle term cross-references for multi-term programs, and manage instructor assignments as Brightspace instructors. Institutions running both systems often have years of historical enrollment data that can conflict during initial sync, requiring a phased cutover strategy.
A working piece from this integration — no sign-up. The full build handles the edge cases, safeguards, and cutover.
// Middleware: PeopleSoft Enrollment → Brightspace Enrollment Mapping // Trigger: PS_CLASS_TBL enrollment changes via Integration Broker // 1. Inbound payload from PeopleSoft (REST/Webhook) { "EMPLID": "01458932", "CRSE_ID": "CS-201-01", "TERM": "2024-FALL", "CLASS_NBR": "45678", "ENROLL_STATUS": "E", "STRM": "2440", "CRSE_GRADE_OFF": "A" } // 2. Middleware resolves Brightspace org unit and user identifiers orgUnitId = resolveBrightspaceOrgUnit(CRSE_ID, TERM) userId = resolveBrightspaceUser(EMPLID) // 3. Outbound call to Brightspace LMS API POST https://{brightspace-domain}/d2l/api/lp/1.43/enrollments/ Content-Type: application/json Authorization: Bearer {D2L_API_TOKEN} { "OrgUnitId": orgUnitId, // e.g., 67890 "UserId": userId, // e.g., 12345 "RoleId": "Learner", // Student role = 3 "IsCancelled": false } // 4. Grade Passback via LTI Assignment and Grade Service POST https://{brightspace-domain}/d2l/api/grades/1.43/{orgUnitId}/grades/ { "GradeObjectType": "Numeric", "Name": "CS-201-01 Final Exam", "ShortName": "FINAL", "MaxPoints": 100, "CanExceedMaxPoints": false } // LTI Grade Passback (AgsService) - sent back to PeopleSoft POST {LineItem.url}/lineitems/{lineItemId}/scores { "userId": "https://lms.example.edu/d2l/api/lp/1.43/users/{userId}", "gradeGiven": 92, "timestamp": "2024-12-15T14:30:00Z", "activityProgress": "Submitted", "gradingProgress": "FullyGraded" }
How we'd take this from discovery to a production-safe cutover — the phases, the canonical mapping, and the edge cases that bite.
This implementation pathway covers the middleware integration between Oracle PeopleSoft Campus Solutions and Brightspace LMS, enabling automated roster synchronization and LTI-based grade passback. The solution uses PeopleSoft Integration Broker as the source of truth for enrollment data, a middleware layer for transformation and orchestration, and Brightspace's Data Sets API for roster management combined with LTI Advantage for grade synchronization.
STDNT_CAR_TERM and CLASS_TBL.STUDENT_ENROLLMENT message); expose STUDENT_REGISTRATIONS component interface for bulk extraction; configure target connectors for HTTP-based middleware consumption.offerings and sections hierarchy); set up CSV async import for enrollment via /d2l/api/lp/<version>/import/; map PeopleSoft term codes (STRM) to Brightspace semester identifiers; test with synthetic enrollment records.LineItem and Result POSTs; validate JWT token exchange with Brightspace's platform OAuth2 endpoint.ENRL_ACTIVITY and Brightspace section rosters; validate LTI grade passback for sample assignments; log discrepancies for reconciliation.| PeopleSoft Field | Brightspace Payload Path | Notes |
|---|---|---|
STDNT_ENRL.EMPLID |
Users[].OrgId or Enrollments[].UserId |
Primary student identifier; may require crosswalk to Brightspace's internal user ID via /d2l/api/lp/<ver>/users/ |
STDNT_ENRL.STRM |
OrgUnits[].Code parent reference |
Academic term; 4-digit format (e.g., 1241 for Fall 2024); maps to Brightspace semester OfferingCode |
CLASS_TBL.CRSE_ID |
Offerings[].Code |
Course identifier from course catalog; stripped of spaces and special chars for Brightspace compatibility |
STDNT_ENRL.CLASS_NBR |
Sections[].Code |
Unique class number per term; forms Brightspace section code as CRSE_ID-CLASS_NBR |
STDNT_ENRL.STDNT_ENRL_STATUS |
Enrollments[].IsActive |
Map E (enrolled) to true; D (dropped) to false; exclude W (withdrawn) |
STDNT_ENRL.CLASS_ROLE |
Enrollments[].Role |
STUDENT or INSTRUCTOR; instructor role maps to Brightspace section enrollment type Teacher |
STDNT_CRSE_VW.CRSE_GRADE_OFF |
GradeObjects[].FinalGradeValue (via LTI) |
Posted to LTI lineitem; ensure letter-to-numeric mapping if Brightspace uses weighted scales |
EMPLID + CRSE_ID entries; Brightspace section matching must include STRM to prevent incorrect roster additions.CRSE_ID with multiple CLASS_NBR values (split sections) must map to a single Brightspace section or instructor receives duplicate grade columns; validate with academic scheduling team.decimal while PeopleSoft CRSE_GRADE_OFF contains letter grades; implement grade translation table before posting to LTI resultScoreMaximum.CLASS_NBR changes and re-map enrollments.ltiResult.sourcedId to resubmit corrected values to the same lineitem.STDNT_ENRL extract. Configure middleware to operate in shadow mode for the first production term—validating data without writing—then compare counts by section and resolve discrepancies in PeopleSoft before committing. Implement a cutover hold period of 48 hours during which manual enrollment in PeopleSoft remains authoritative; if corruption occurs, disable Brightspace grade passback, restore rosters from the snapshot, and re-enable sync after identifying the failing record. All automated operations must write audit logs to INTEGRATION_LOG (PeopleSoft) and Brightspace API audit endpoints with timestamps, record counts, and error codes for post-incident reconciliation. Reading the reference is free. Delivering it under liability — with the safeguards that keep production running through the cutover — is what we do.