Oracle JD Edwards and Salesforce integration
Oracle JD Edwards runs procurement and financials on-premises, while Salesforce manages your sales pipeline and customer data in the cloud. Connecting them ensures suppliers in JD Edwards line up with vendor Accounts in Salesforce, purchase orders flow into Opportunities, and GL accounts validate against Salesforce records. When a purchase order is placed in JD Edwards, the supplier and item details appear in Salesforce for visibility across sales and procurement teams. ml-connector handles both the polling model JD Edwards requires and the OAuth authentication Salesforce demands.
What moves between them
The integration flows primarily from Oracle JD Edwards into Salesforce. Suppliers from the JD Edwards F0401 (Supplier Master) and vendor records in F0101 (Address Book) sync to Salesforce Accounts. Purchase orders from F4301 (PO Header) and F4311 (PO Detail) sync to Salesforce Opportunities, with line items mapping to OrderItem records. GL accounts from F0901 (Account Master) map to Salesforce custom fields on Opportunities for financial tracking. The sync runs on a customer-defined schedule (e.g., daily or per-shift) since JD Edwards provides no push mechanism. Salesforce can push Account or Opportunity updates back to JD Edwards via a reverse flow if configured, updating supplier or purchase order attributes.
How ml-connector handles it
ml-connector connects to the customer-hosted JD Edwards AIS Server using the full instance URL (https://<host>:<port>/jderest/v2/) provided as a credential. It logs in once with the JD Edwards service account username and password, caches the returned session token, and re-authenticates when the token expires (detected via HTTP 444 response). For Salesforce, ml-connector exchanges the Consumer Key and Secret for an OAuth token at the configured My Domain instance URL, caches the token, and refreshes on expiry. Polling runs on a configurable schedule: ml-connector queries F0401, F0101, and F4301 tables with a date filter on the UPMJ field to pick up only records changed since the last poll, avoiding full table scans. Supplier records are mapped to Accounts using the F0101 Address Number as the external ID, purchase order numbers link to Opportunities, and line items create OrderItem records with GL account mappings. Because JD Edwards tokens are tied to service account licensing and the AIS Server may restart, ml-connector handles token invalidation gracefully by re-authenticating on next request. If configured to receive Salesforce CDC events, ml-connector subscribes to Account and Opportunity changes and ingests them into a queue for export back to JD Edwards (e.g., updating supplier status). All records carry audit timestamps, and failed syncs can be replayed by re-querying JD Edwards with the same date range.
A real-world example
A mid-market manufacturing firm runs Oracle JD Edwards EnterpriseOne on-premises for procurement and accounting, and Salesforce in the cloud for sales and customer management. Before the integration, the procurement team managed supplier relationships in JD Edwards while sales used Salesforce, resulting in duplicate supplier data, missed opportunities to bundle related orders, and no visibility into what each customer had already purchased. With Oracle JD Edwards and Salesforce connected, suppliers automatically populate in Salesforce as Accounts, purchase orders appear as Opportunities, and sales reps see the full procurement history. When a customer calls about a product, the rep checks Salesforce and sees it was purchased via an open PO, avoiding re-selling the same item and enabling smarter upselling based on actual procurement patterns.
What you can do
- Sync Oracle JD Edwards suppliers (F0401, F0101) to Salesforce Accounts with automatic external ID mapping.
- Move purchase order headers and line items from JD Edwards to Salesforce Opportunities and OrderItems, preserving PO number and GL account references.
- Authenticate JD Edwards via session token (re-auth on expiry or HTTP 444) and Salesforce via OAuth 2.0, storing credentials encrypted.
- Poll JD Edwards tables on a schedule since it has no webhooks, querying only changed records via UPMJ date filtering to minimize load.
- Optionally subscribe to Salesforce CDC push events for Accounts and Opportunities, and replay failed syncs from the audit trail.
Questions
- How does ml-connector handle Oracle JD Edwards session token expiry?
- JD Edwards session tokens expire after 30-60 minutes and are tied to the service account license. ml-connector caches the token after login and detects expiry when JD Edwards returns HTTP 444. It then re-authenticates automatically on the next request using the stored username and password. If the AIS Server restarts, all cached tokens are invalidated and ml-connector re-authenticates immediately.
- Why does the integration poll JD Edwards instead of using webhooks?
- Oracle JD Edwards EnterpriseOne has no native outbound webhooks. ml-connector polls tables on a customer-defined schedule (e.g., hourly or daily), using the UPMJ date field to fetch only records changed since the last poll. This avoids full table scans and keeps load predictable. Salesforce can optionally push changes back to JD Edwards if configured.
- How are supplier and purchase order records mapped between the two systems?
- Suppliers are mapped by the JD Edwards Address Number from F0101 (Address Book) to the Salesforce Account external ID, ensuring duplicates are updated rather than created. Purchase orders use the JD Edwards PO number as the Opportunity external ID, and line items create OrderItem records. GL account numbers from F0901 map to custom fields on Opportunities for financial tracking.
Related integrations
More Oracle JD Edwards integrations
Other systems that connect to Salesforce
Connect Oracle JD Edwards and Salesforce
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started