Middleware
A middleware layer syncing Ellucian Banner student and employee identities to ServiceNow ITSM user provisioning and bidirectional ITSM ticket management.
This middleware integration connects Ellucian Banner to ServiceNow, automating identity provisioning from Banner's HR (NBAJOBS, NBBESTRUN) and student (SPRIDEN, SGASTDN) tables into ServiceNow's user and CMDB models while syncing ITSM incidents bidirectionally.
The primary challenge is that Banner uses a flat, non-normalized table structure with cryptic column names and no native REST or SCIM interface, while ServiceNow expects relational user profiles with group memberships and CI ownership tied to organizational hierarchies.
The middleware layer—built on MuleSoft, Dell Boomi, or SnapLogic—must perform complex field mapping, enrollment-status-to-role translation, and deduplication logic to prevent duplicate user creation when students also appear in Banner's employee tables.
A working piece from this integration — no sign-up. The full build handles the edge cases, safeguards, and cutover.
/* Banner SIS → ServiceNow Identity Sync Mapping */ /* Middleware transform (Banner Oracle → ServiceNow REST) */ /* Source: Banner SPRIDEN (person identity) + SGBSTDN (student status) */ SELECT p.spriden_pidm AS banner_pidm, p.spriden_soundex_last_name, TRIM(p.spriden_nation_code) AS nation, p.spriden_orig_reg_ind FROM spriden p WHERE p.spriden_change_ind IS NULL; /* Output payload to POST /api/now/table/sys_user */ { "user_name": "${banner_pidm}", "user_id": "${banner_pidm}", "first_name": "${spriden_first_name}", "last_name": "${spriden_last_name}", "email": "${spriden_email}", "title": "${sgbstndn_stst_code}", /* Banner student status code */ "department": "${tbbglvl_leve_code}", "source": "Banner SIS", "u_banner_pidm": "${banner_pidm}", /* custom ref field */ "u_student_status": "${sgbstdn_stst_code}" /* mapping: AC=active */ } /* Banner student status → ServiceNow role mapping */ AC → student | UGRD → undergrad_student GR → graduate_student | MED → medical_student
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 Ellucian Banner identities (students and employees) to ServiceNow ITSM for automated user provisioning and manages bidirectional incident lifecycle data. The middleware (recommended: MuleSoft or Boomi) sits between Banner's Oracle database and ServiceNow's REST APIs, handling transformation, deduplication, and error recovery.
SELECT spriden_pidm, spriden_surname, spriden_first_name, spbpers_email, stvstyp_code FROM spriden JOIN spbpers ON spriden_pidm = spbpers_pidm WHERE spriden_entity_ind = 'PERSON'. Map to sys_user payload; use u_banner_pidm as correlation key. Implement upsert logic (insert if not exists, update if sys_updated_on changed).number, state, and short_description to Banner's ticket tracking table (typically custom: GLBSVC_TICKETS). Ensure idempotency by storing number in Banner with a unique constraint.STVSTYP changes to 'W' (withdrawn).sys_user counts. Identify orphaned ServiceNow users (Banner PIDM not found) and resolve. Validate incident mapping completeness (no dropped state transitions).| Banner Field | Banner Table | ServiceNow Field | ServiceNow Table | Notes |
|---|---|---|---|---|
spriden_pidm | SPRIDEN | u_banner_pidm | sys_user | Custom correlation key; indexed |
spriden_surname | SPRIDEN | last_name | sys_user | Direct map |
spriden_first_name | SPRIDEN | first_name | sys_user | Direct map |
spbpers_email | SPBPERS | email | sys_user | Prefer spbpers_email over goraduid_email_addr |
stvstyp_code | STVSTYP/FTVSSTU | u_student_type + role | sys_user | Map to ServiceNow groups: Student, Faculty, Staff |
baninst1.employee_status | BANSAPER | active | sys_user | Active if = 'A', inactive if = 'T' or 'R' |
nbipnme_pref_first_name | NBIPNME | middle_name | sys_user | Optional; join via PIDM |
spriden rows per PIDM (history/alias records). Filter by spriden_user = current user indicator or spriden_add_date to avoid creating duplicate sys_user entries.sys_user.last_name, not create a new user.TRIM(LOWER()) before writing to sys_user.email to avoid ServiceNow uniqueness violations.bansaper.employee_status flips from 'T' back to 'A', middleware must reactivate the existing sys_user record rather than creating a duplicate, using the same PIDM correlation key.state writes. Implement optimistic locking using incident.sys_updated_on timestamp comparison before writing.sys_user records with populated u_banner_pidm. Any mismatch indicates missed upserts requiring manual catch-up via the middleware replay queue. Disable any legacy manual user-provisioning workflows at the moment of cutover to prevent dual writes. Designate a rollback trigger: if error rate exceeds 1% or latency exceeds 15 minutes in the first hour, halt the scheduler and restore Banner-only provisioning while investigating. Reading the reference is free. Delivering it under liability — with the safeguards that keep production running through the cutover — is what we do.