Middleware
Middleware pipeline syncing student enrollments, course data, and grade outcomes from Anthology Planetaris SIS into Salesforce Education Data Architecture for recruitment and engagement tracking.
This middleware integration builds a bidirectional sync layer between Anthology Planetaris (the student information system) and Salesforce Education Data Architecture (the institutional CRM), automating the flow of enrollment, course, and grade data that admissions and student affairs teams rely on for outreach and retention.
The hardest part is resolving the structural mismatch: Anthology Planetaris organizes data around SECTION, ENROLLMENT, and GRADE tables with term-based sections, while Salesforce EDA stores program affiliations, course connections, and contact roles in custom objects like Course_Offering__c, Course_Enrollment__c, and Academic_Standing__c that require careful field mapping and ID correlation to avoid duplicate records or stale data.
A working piece from this integration — no sign-up. The full build handles the edge cases, safeguards, and cutover.
/* Middleware: Planetaris SIS → Salesforce EDA transformation */ /* Inbound from Anthology Planetaris */ { "student": { "person_id":"STU-2024-00142", "first_name":"Mariana", "last_name":"Okonkwo", "email":"[email protected]", "sis_enrollment_status":"active"}, "enrollments": [{ "course_id":"CS-301-A", "course_title":"Data Structures", "term":"Fall-2024", "grade":"B+", "credits":3}] } /* EDA Contact upsert payload */ { "FirstName":"Mariana", "LastName":"Okonkwo", "Email":"[email protected]", "University_ID__c":"STU-2024-00142", "Primary_Language__c":"English"} /* EDA Course Enrollment → Course Connection */ { "Contact__c":"{Contact.Id}", "Course_Offering__c":"{lookup: CS-301-A, Fall-2024}", "Status__c":"Current", "Grade__c":"B+", "Credits__c":3, "Academic_Status__c":"Earned Credit"}
How we'd take this from discovery to a production-safe cutover — the phases, the canonical mapping, and the edge cases that bite.
Middleware pipeline synchronizing student enrollment, course, and grade data from Anthology Planetaris SIS into Salesforce Education Data Architecture (EDA) for recruitment funnel tracking and student engagement lifecycle management. The integration runs on a scheduled middleware layer (e.g., MuleSoft, Boomi, or custom API gateway) performing bidirectional delta-sync with conflict resolution based on a Planetaris timestamp hierarchy.
students, enrollments, courses, and grades. Map each to EDA custom objects. Document pagination limits, rate thresholds, and OAuth2 token refresh cadence on the source system.Planetaris_Id__c, Last_Sync_Timestamp__c) to store origin-system keys and sync metadata. Create a Planetaris_Sync_Log__c object to record each batch run outcome.Status__c picklist values. Convert grade strings to the Grade__c decimal field using a lookup table.modified_since query parameters per endpoint. Maintain a watermark table in middleware tracking the latest synced Planetaris_Id per entity. Handle re-sync of historical records via an initial full-backfill flag.Contact records on Planetaris_Id__c first, falling back to Email fuzzy-match. Prevent duplicate Course_Offering__c inserts using a composite unique key of Course_Code__c + Term_Id__c.Planetaris_Sync_Log__c for zero ERROR rows before handing over to ops.| Planetaris Field | EDA Target Object | EDA Target Field | Transform Rule |
|---|---|---|---|
student_id |
Contact | Planetaris_Id__c |
Direct assignment; set as External ID |
last_name |
Contact | LastName |
Direct; trim whitespace |
email_address |
Contact | Email |
Direct; lowercase normalization |
enrollment.course_offering_id |
Course_Enrollment__c | Course_Offering__c |
Lookup by Planetaris_Offering_Id__c |
enrollment.status |
Course_Enrollment__c | Enrollment_Status__c |
Map "A"→"Active", "W"→"Withdrawn", "D"→"Dropped" |
grade.numeric_value |
Grade__c | Final_Grade__c |
Parse decimal; default 0.00 if null |
course.catalog_number |
Course_Offering__c | Course_Code__c |
Direct; concatenate with term prefix if needed |
Course_Enrollment__c record rather than create a duplicate; the upsert key is Planetaris_Enrollment_Id__c.grade = null for in-progress courses; these must not overwrite an existing Final_Grade__c value in EDA.Course_Enrollment__c record is scoped to the correct Term__c lookup to avoid cross-term contamination.Contact.Email and handle any existing EDA duplicate-matching rules that may have matched on the old address.catalog_number changes mid-sync, the composite key on Course_Offering__c breaks; run a pre-check to flag orphaned offerings before enabling production delta-sync.Cutover is executed as a two-phase switch to preserve reversibility. First, a final historical backfill loads all records with Last_Sync_Timestamp__c set to the cutover window start; EDA records receive a Synced_From_Planetaris__c = true flag for auditability. Second, the delta-sync job is pointed at production Planetaris endpoints with the watermark reset to NULL, forcing a fresh delta from cutover time forward. Reconciliation runs immediately post-switch: a row-count comparison between the Planetaris_Sync_Log__c summary and source system counts per entity type, plus a spot-check of 20 randomly selected records confirming field fidelity. If reconciliation reveals discrepancies exceeding tolerance, the middleware reverts to the pre-cutover configuration and re-runs the backfill. Rollback restores the last known-good watermark and pauses delta-sync until the issue is resolved and re-certified.
Reading the reference is free. Delivering it under liability — with the safeguards that keep production running through the cutover — is what we do.