ml-connector
Oracle JD EdwardsSlack

Oracle JD Edwards and Slack integration

Finance teams run JD Edwards for AP, GL, purchasing, and order management. Slack is where the team communicates. When a critical AP invoice arrives, a GL posting is made, or a purchase order changes status, the relevant people need to know - but pulling data from JD Edwards requires access to the ERP, and the steps are manual. With Oracle JD Edwards and Slack connected, key financial events surface as Slack notifications in real time, reaching the right channel without re-keying or context switching.

How Oracle JD Edwards works

Oracle JD Edwards EnterpriseOne is an on-premises ERP suite running at customer infrastructure, exposing financials, procurement, manufacturing, HR, and distribution through a REST API via the Application Interface Services (AIS) Server. The AIS Server exposes data tables (F0401 suppliers, F0411 AP ledger, F0901 GL accounts, F0911 GL transactions, F4301 purchase orders, F4311 PO line detail, F03012 customers, F4101 items) through REST endpoints at a customer-provided base URL. Authentication requires a session token obtained via username and password POST, valid for 30 to 60 minutes per configuration, and the token must be passed in the jde-AIS-Auth header on every request. JD Edwards has no native webhooks, so data is read via polling with date-based filters on the UPMJ (update date) or GL date fields. Pagination uses the maxPageSize parameter (default 100 records) and the moreRecords flag.

How Slack works

Slack is a cloud-based team communication platform accessed through the Slack Web API and Events API. All requests use HTTPS against the https://slack.com/api/ endpoint family (e.g. conversations.list, chat.postMessage). Slack authenticates via OAuth2 Authorization Code flow, issuing non-expiring bot tokens (xoxb- prefix) passed in the Authorization Bearer header. Slack supports both webhook delivery (push model via the Events API, which sends HTTP POST callbacks to a registered HTTPS endpoint with HMAC-SHA256 signature verification required, retry up to 3 times on failure) and polling. The chat.postMessage method has a rate limit of 1 per second per channel. All webhook events include an X-Slack-Signature header for constant-time signature verification, and the request timestamp must not be older than 5 minutes.

What moves between them

Data flows from Oracle JD Edwards into Slack. ml-connector polls JD Edwards on a configurable schedule (typically every 30 minutes or hourly) for four key record types: open accounts payable invoices and matching documents (F0411, F0413), GL postings and journal entries (F0911, F0911Z1), purchase order headers and detail lines (F4301, F4311), and address book updates for vendors and customers (F0101, F03012). Each polling cycle extracts records modified since the last run using the UPMJ or GL date filter. For each new or changed record, ml-connector formats a notification and posts it to a designated Slack channel via chat.postMessage, including the record ID, key amounts, affected GL account or cost center, and user or vendor name. Slack is read-only from JD Edwards perspective - no data flows back into the ERP from Slack.

How ml-connector handles it

ml-connector stores the JD Edwards AIS Server URL and session credentials encrypted at rest. On each polling cycle, it authenticates by POST to the /jderest/v2/tokenrequest endpoint with the stored username and password, receives an opaque session token, and uses that token in the jde-AIS-Auth header to query the relevant F-tables. If a token expires (HTTP 444 response), it re-authenticates transparently. Pagination is handled via the maxPageSize and moreRecords parameters, so large result sets are fetched in 100-record chunks. For Slack, ml-connector uses the OAuth2 bot token obtained during the Slack app installation, passed as a Bearer token to each chat.postMessage call. Slack enforces a 1-per-second rate limit per channel, so ml-connector queues outbound notifications and spaces them to stay under the limit. Each JD Edwards record carries a unique identifier (SYSID, batch number, or document number depending on the table), which is included in the Slack message so the receiver can trace the alert back to the source. Since JD Edwards tokens have a 30-to-60-minute lifetime, ml-connector is configured to refresh the token before it expires (tracking the request time and reusing the token within its window), rather than waiting for a 444 failure. The integration also handles the on-premises IP allowlist requirement - customer must add the ml-connector egress IP(s) to the JD Edwards AIS Server allowedHosts configuration. Every polling cycle is logged with a full audit trail so failed or missed syncs can be detected and replayed.

A real-world example

A mid-market manufacturing company uses Oracle JD Edwards on-premises for GL, AP, purchasing, and inventory. The procurement manager, accounts payable clerk, and CFO work in Slack during the day. When a high-value purchase order is created for a critical component, it currently stays in JD Edwards until someone checks the system manually. When an AP invoice arrives from a supplier, the AP clerk receives an email that may be delayed or missed in their inbox. When month-end closes and GL postings are made, the accounting manager has no real-time visibility into the entries being recorded. With the integration, a Slack channel receives a notification each time a purchase order over a threshold is created (with PO number, vendor, amount, cost center), each time an AP invoice is matched and ready for payment (with invoice number, vendor, amount, GL account), and each time a GL posting is made in a critical account (with journal entry ID, account, amount, cost center, date). The team stays informed without logging into JD Edwards, and critical events are surfaced in the chat platform they already use.

What you can do

  • Post real-time Slack notifications whenever open AP invoices and matching documents are created or updated in JD Edwards F0411 and F0413 tables.
  • Send GL posting alerts to Slack when journal entries are posted in JD Edwards F0911 and F0911Z1, mapped to account and cost center.
  • Notify Slack channels when purchase orders are created or status-changed in JD Edwards F4301 and F4311 tables.
  • Authenticate JD Edwards via session token and refresh transparently when the 30-to-60-minute token window expires, handling IP allowlist requirements.
  • Poll on a configurable schedule with per-record audit logging, so any sync miss or error can be traced and replayed.

Questions

What data moves from JD Edwards to Slack, and in which direction?
Data flows from JD Edwards to Slack only. The integration polls JD Edwards for open AP invoices and matching documents, GL postings and journal entries, purchase order headers and line detail, and vendor/customer address book changes, then posts real-time notifications to Slack channels. Slack is read-only; no data flows back into JD Edwards.
How does ml-connector handle JD Edwards session tokens and the on-premises AIS Server URL?
ml-connector stores the AIS Server URL and username/password encrypted. On each polling cycle, it authenticates via POST to /jderest/v2/tokenrequest, receives a session token valid for 30 to 60 minutes, and passes it in the jde-AIS-Auth header on all subsequent requests. The integration tracks token age and re-authenticates before expiry rather than waiting for a 444 failure. The customer must add ml-connector's egress IP to the JD Edwards allowedHosts firewall allowlist.
How are Slack rate limits handled, and what happens if a notification fails to post?
Slack enforces a 1-per-second rate limit per channel. ml-connector queues outbound notifications and spaces them to stay under the limit. Every poll cycle is logged in the audit trail with the source JD Edwards record ID, so if a Slack post fails (network issue, rate limit spike, invalid channel), the notification can be replayed once the underlying cause is resolved.

Related integrations

Connect Oracle JD Edwards and Slack

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

Get started