A single training is just a record. A useful program is the relationships between records — what's required, who it applies to, what tier it rolls up to, when it expires. The dashboard is built on four custom objects, layered so each answers one question. Adding training to the org is a four-decision flow: What thing exists? → Who needs it? → What's the goal? → Did it happen?
Brand-new install? Start at the Install & setup guide first — it walks you through deploying the schema, exposing the new fields on layouts, the J2R-only contact list view, and the OAuth backend.
Don't see a field on the edit form? Salesforce deploys fields but doesn't auto-add them to page layouts. Install → step 3 lists exactly which fields each layout needs and how to drag them on.
1 · Catalog
Training_Program__c
The thing that exists. One row per course or accreditation. Vendor, Framework, Category, Cert Level, Validity Days. Decoupled from any specific person.
Examples: "ISO 27001 Awareness", "Palo Alto Networks Sales Accreditation 2025".
2 · Rule
Compliance_Requirement__c
The policy. Points at a Program and says who must hold it: either everyone (Applicability=All Employees) or a role match (By Role + Applicable_Roles).
Roles available: Sales, SE, Technical, DoD-Facing, Executive, Operations, HR. Multi-select on both sides.
3 · Goal
Vendor_Tier_Target__c
The vendor-side ambition. "We want to hit Gold tier with vendor X." Records the target, the portal URL for renewals, and notes. Tier attainment on the dashboard is computed against these.
Tiers: Authorized, Member, Bronze, Silver, Gold, Platinum, Premier, Diamond, Innovator, Pioneer, Advanced, Custom.
4 · Event
Training__c
The fact. One row per (Contact, Program, attempt). Says a person took (or was assigned) something. Required flag distinguishes mandatory vs. elective. Framework tags the audit context.
Drives every dashboard hero number — completion %, expirations, partner tier rollups.
Contact.Training_Role__c — a multi-select on each person (Sales, SE, Technical, DoD-Facing, Executive, Operations, HR). This is the join key for By Role applicability. A contact with no training role is in scope only for All Employees requirements.
A program is in the catalog.
Without a Training_Program__c row, nothing else can reference it. Set Active=true to include it in dashboard rollups; old/retired programs flip to false rather than getting deleted.
A requirement makes it mandatory for someone.
Create a Compliance_Requirement__c with Program__c = your program, set Applicability__c to All Employees or By Role (with one or more Applicable_Roles__c). The dashboard's compliance hero ignores any program that has no active requirement.
Contacts get scoped in.
For By Role, a Contact with Training_Role__c matching any one of the requirement's roles is in scope. For All Employees, every active Contact is in scope. The "denominator" for compliance is the count of in-scope contacts × the number of programs they need.
Trainings close the loop.
A Training__c record (Contact + Program, status complete, within validity window) counts as compliant. Past the program's Validity_Days__c from completion, the dashboard treats it as expired and the contact slides back into "needs it." The Top Overdue and Expiring Soon lists on Home are exactly this.
Vendor tiers roll up separately.
For partner programs, tier attainment is an additional layer: Vendor_Tier_Target__c says "Gold needs N Sales accreditations + M Technical." The Partners page checks completed Trainings for that vendor's programs at the right Cert Level and shows a per-vendor met/total.
Training_Program__c per course. Set Framework__c to a consistent string (e.g. "ISO 27001") — that string is what groups them on the dashboard. Pick a Category__c, set Validity_Days__c to how long a completion stays good (use 365 for annual cycles).Compliance_Requirement__c pointing at it. Set Applicability__c: most ISO/security awareness items are All Employees; role-specific ones (e.g. CMMC for DoD-facing staff) use By Role with Applicable_Roles__c selected.Training__c rows that should count toward the new framework, set their Framework__c to match. New trainings created after this point will inherit the program's framework if you populate it.Account.Type = 'OEM Partner'. Find or create the vendor's Account and set Type accordingly. Tick Track_Partner_Status__c if this is a partner you want on the tracked-partner health view (untracked partners are ignored by that dashboard).Training_Program__c rows per vendor: Sales Accreditation (Cert_Level=Sales), Technical Accreditation (Cert_Level=Technical), and optionally Specialist Certification (Cert_Level=Specialist). Set Partner__c to the partner Account and Framework__c to "Partner Vendor Cert". (Vendor__c free text is legacy — only kept as a migration fallback; new records should use Partner__c.)Vendor_Tier_Target__c with Partner__c = the partner Account, Target_Tier__c = your aim (e.g. Gold), Required_Revenue__c = the revenue the tier needs (optional gate), Vendor_Portal_URL__c = the partner portal. Achieved_Revenue__c fills in automatically — it mirrors the partner Account's DLRS-rolled Closed-Won revenue; don't type into it.Product2.OEM_Account__c = the partner Account on every product whose sales should count toward that partner. Closed-Won Opportunity Line Items for those products then roll up into Account.Partner_Achieved_Revenue__c automatically (DLRS + the OLI partner-stamp trigger).Compliance_Requirement__c per program with Applicability=By Role and Applicable_Roles__c = Sales (for Sales accred) or SE/Technical (for Technical accred). This is what makes them show up as "owed" on individual profiles.Training__c rows. The Partners page rolls up holders per Cert Level, computes tier attainment, and the tracked-partner health card flags this partner if its program/target/revenue is incomplete.Training_Program__c. If it's brand new, create it — even one-offs benefit from being in the catalog so completions can be reused later.Compliance_Requirement__c is necessary. The training will count as an elective — visible on their profile, but not pulling down compliance.Training__c with Account__c = the contact's account (often via the Contact's parent), Program__c = the program, Required__c = false (it's elective), Framework__c blank or whatever audit you want to credit.| Object | Key fields | Required |
|---|---|---|
| Training_Program__c | Name (program name), Vendor, Framework, Category, Cert_Level, Validity_Days, Active, Description | Name only |
| Compliance_Requirement__c | Program (lookup), Applicability (All Employees | By Role), Applicable_Roles (multi), Tier_Target, Required_Count, Active, Description, Guidance, Compliance_Deadline, Effective_Start_Date | Program, Applicability, Required_Count |
| Vendor_Tier_Target__c | Vendor, Target_Tier, Vendor_Portal_URL, Notes, Active, Tier_Deadline, Required_Revenue, Current_Revenue | Vendor |
| Training__c | Program, Account, Required, Framework (plus standard who/when fields) | Program |
| Contact | Training_Role (multi: Sales, SE, Technical, DoD-Facing, Executive, Operations, HR) | — |
Programs exist. Requirements oblige. Roles scope. Trainings satisfy. Tier targets aspire. Deadlines pressurize. Revenue gates. Anything you see on the dashboard is one of those seven verbs in motion — if a number looks wrong, walk the chain backwards from it. Year-over-year transitions: bump Compliance_Deadline__c/Tier_Deadline__c; set Effective_Start_Date__c if old completions shouldn't carry over.
Use the Edit in Salesforce menu (top-right) to jump straight to any list view.