ml-connector
Oracle JD EdwardsSalesforce

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.

How Oracle JD Edwards works

Oracle JD Edwards EnterpriseOne is an on-premises ERP suite exposing financials, procurement, and manufacturing data through REST APIs delivered via Application Interface Services (AIS) Server running at customer infrastructure. The transport is REST over HTTPS to a customer-hosted base URL (https://<customer-ais-server-host>:<port>/jderest/v2/), and authentication uses a session token obtained via POST with username and password, returned in the jde-AIS-Auth header on all subsequent requests. Key tables include F0401 (Supplier Master), F4301 (Purchase Order Header), F4311 (Purchase Order Detail), F0901 (Account Master), and F0101 (Address Book with vendors and customers). JD Edwards has no native outbound webhooks, so data must be polled by tracking the UPMJ (date updated) field on tables, and tokens expire after 30-60 minutes, requiring periodic re-authentication.

How Salesforce works

Salesforce is a cloud-based CRM platform accessible via REST API at https://<MyDomain>.my.salesforce.com/services/data/v63.0/ with authentication via OAuth 2.0 Client Credentials Flow using Consumer Key and Consumer Secret. Salesforce exposes Account, Contact, Opportunity, Order, OrderItem, Invoice, and Lead objects with full CRUD operations and SOQL query support. Change Data Capture (CDC) via the Pub/Sub API enables real-time push notifications for Account, Contact, and Opportunity changes with 3-day retention, or ml-connector can poll the updated/ endpoint with a datetime range. OAuth tokens expire after 2 hours by default and must be refreshed on each expiry.

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

Connect Oracle JD Edwards and Salesforce

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started