Technical knowledge captured from Slack conversations with John Pipkin (OpFocus) and the #force-management-opfocus channel. Intended as a running troubleshooting/engineering reference for the Opportunity Manager (OM) package.
Architecture
-
Code repository: As of April 14, 2026, the OM 2GP package source code lives in FM's own Bitbucket repository (
opportunity-manager), migrated off OpFocus's account. For 2GP packages, Bitbucket (not the Salesforce org) is the source of truth for code. -
2GP install process: New clients install v2.23 of the 2GP package directly. Existing clients need two sequential installs: first the v2.23 upgrade package, then the v2.23 2GP package.
-
Release limitations: Once John releases a package version, there are limits on what can be patched without a full new release. UAT should be done in the packaging org, not the OM demo org. A beta package + scratch org can be spun up for pre-release testing on request.
Known issues & root causes
NullPointerException in FMOppMgr.OpportunityTriggerHandler — occurs when the "running user" of a transaction (e.g. a scheduled job or integration user) isn't a standard resolvable user record, not a Contact Role permissions issue. Scheduled jobs always run as a single user, not "the sales team," so identifying the exact running user ID is the key diagnostic step.
"Apex CPU time limit exceeded" — the package code is optimized; this is almost always caused by other automations in the client's org (e.g. legacy Process Builders on Opportunity) competing for the same transaction, not an OM defect.
Duplicate contact bug (fixed in 2.18) — contacts created with the placeholder name "TBD" no longer generate a duplicate related-contact record. Recommended ways to create contacts without triggering duplicates: (1) Contacts > Create New, (2) the Opportunity/Account page dropdown > New Contact, (3) Relationship Mapper > Add New Contact.
EB/Champion validation rule — the "Require Contact" validation rule on the Economic Buyer/Champion fields is admin-editable, not hardcoded. Any admin can deactivate it via: Object Manager > [EB or Champion field] > Validation Rules > Require Contact > Edit > uncheck Active > Save.
Lead triggers — cannot be disabled directly. They only touch OM-owned fields and only run when the "Lead Manager" feature is enabled; turning off Lead Manager makes them no-ops.
Relationship Mapper drag-and-drop is implemented via jQuery; version-specific browser/jQuery conflicts can cause dragging to silently fail. No fixed root cause identified as of this writing.
Value Drivers field is plain text, not rich text — a legacy oversight predating the switch to rich text fields. Converting it requires a new field and a client-side data migration, so it has not been changed.
Data export — no active OM license is required to export data from OM.
SOAP API deprecation (versions 31.0–64.0) — confirmed (June 2026) that FM has no active flows or integrations relying on SOAP login() API calls; flows/triggers use platform versions instead, so this retirement does not impact OM.
Renewal opportunity creation — not a single hardcoded process; John has built custom renewal-opportunity logic per client (~30 clients). Known issue: newly created renewal opportunities can be dated with the current year instead of the next year when the existing license expires. Needs client-by-client documentation of which orgs have custom logic.
Web-to-case security note — FM's public support page (forcemanagement.com/support-page) exposes the Salesforce Org ID in page HTML, which is how a spam submission included it in a case subject line. No data-leak risk confirmed by OpFocus; recommended fix is adding CAPTCHA to the web-to-case form.
Source
Compiled from Slack: #force-management-opfocus channel and DMs with John Pipkin (jpipkin@opfocus.com), Aug 2025–Jul 2026.