ml-connector
Oracle JD EdwardsMicrosoft Teams

Oracle JD Edwards and Microsoft Teams integration

Oracle JD Edwards runs your financials and procurement. Microsoft Teams is where your finance and procurement teams collaborate. Connecting the two surfaces ERP transactions in Teams channels so approvals, exceptions, and financial alerts reach the right people without re-keying or manual status checks. New journal batches, open vouchers, and high-value POs appear in Teams as notifications that teams can acknowledge and act on.

How Oracle JD Edwards works

Oracle JD Edwards EnterpriseOne exposes GL accounts, journal entries, supplier invoices, purchase orders, and item masters through REST APIs served by the customer-hosted AIS Server. Authentication uses session tokens obtained via username and password, passed in the jde-AIS-Auth header on all requests. Tokens have a 30- to 60-minute lifetime and expire with HTTP 444, requiring re-authentication. JD Edwards has no outbound webhooks, so data is read by polling the F-table data services with date filters on updated or GL date columns, and a customer may also trigger scheduled orchestrations to call an inbound endpoint. The AIS Server host URL is customer-specific with no shared public hostname, and the API surface varies by Tools Release, so the connector must account for the customer's version.

How Microsoft Teams works

Microsoft Teams is a messaging and collaboration platform accessed through Microsoft Graph REST API. Authentication uses OAuth 2.0 client credentials flow with a tenant ID, client ID, and client secret to obtain an access token. Teams exposes channels, chats, and chatMessages, allowing the connector to post rich message objects to channels and manage subscriptions. Teams webhook subscriptions expire in 3 days and must be renewed, but for finance workflows most interactions are one-way notifications posted by the connector. Teams has no native finance objects like invoices, POs, or GL accounts, so it serves as a notification and approval surface rather than a data source.

What moves between them

Data flows from JD Edwards into Teams. Journal entries, vouchers, and purchase orders are polled from JD Edwards on a schedule set by the customer, formatted with GL account names and amounts, and posted as messages to Teams channels. Each channel maps to a cost center or business unit, so finance teams receive alerts relevant to their area. Approvals and acknowledgments happen in Teams but do not flow back to JD Edwards; Teams acts as a visibility layer, not a transactional feed.

How ml-connector handles it

ml-connector stores the AIS Server host URL and credentials and maintains a JDE session token, re-authenticating when the token expires or HTTP 444 is received. On the Teams side, it uses the OAuth client credentials flow to obtain a graph.microsoft.com access token and keeps it refreshed. The connector polls JD Edwards F-tables for new GL transactions and PO records using the date-updated column as a cursor, groups them by cost center or business unit, and posts each group as a formatted message to the corresponding Teams channel. JD Edwards imposes practical rate limits based on AIS Server JVM and thread pool capacity, so ml-connector applies adaptive backoff if request latency climbs. Teams webhooks return a validationToken within 10 seconds, and ml-connector caches that token to avoid excessive re-subscriptions. Every polled record is tracked in state so failed message posts can be retried without re-polling the source. Customer IP allowlists commonly restrict AIS Server access, so the connector's egress IP must be whitelisted before deployment.

A real-world example

A mid-sized manufacturing company runs Oracle JD Edwards for procurement and general ledger, with finance and sourcing teams spread across two locations. Before the integration, the accounts payable team received invoice batches via email, manually checked them against JD Edwards, and posted approved vouchers at month-end. The sourcing team tracked high-value POs in spreadsheets because they had no way to be notified of new orders or changes in JD Edwards. With JD Edwards and Teams connected, each voucher batch posted to JD Edwards appears in the Teams AP channel within minutes, and PO changes over a set threshold appear in the sourcing channel. Approvals happen in Teams, and the audit trail of who approved what is captured by Teams' message history. The finance team no longer relies on email or spreadsheets, and exceptions surface in real time instead of at month-end.

What you can do

  • Post GL journal entries and vouchers from JD Edwards to Teams channels within minutes of posting, formatted with account names and cost centers.
  • Alert sourcing and procurement teams to new or high-value purchase orders via Teams, including supplier name and total amount.
  • Route exceptions and out-of-balance batches to a separate Teams channel so finance teams can triage and resolve faster.
  • Maintain state across polls so each record posts exactly once, with manual retry if a Teams message fails to deliver.
  • Track all JDE session tokens and Teams access tokens centrally, refreshing them before expiry so no connector call fails due to stale credentials.

Questions

Does ml-connector push data back from Teams into JD Edwards?
No. Data flows one direction, from JD Edwards into Teams. Teams serves as a notification and acknowledgment surface for finance and procurement teams. Approvals and comments stay in Teams; they do not update JD Edwards records. If an item needs correction in JD Edwards, a team member logs into the ERP directly.
What happens to JD Edwards session tokens when they expire?
JD Edwards tokens have a 30- to 60-minute lifetime and expire with HTTP 444. ml-connector detects 444, re-authenticates using the stored username and password, and retries the failed request. The customer-hosted AIS Server configuration controls the token lifetime, and the connector is built to handle frequent re-auth without delay.
How does ml-connector know which Teams channel to post to?
The customer configures a mapping during setup: each JD Edwards cost center, business unit, or PO type maps to a specific Teams channel. During polling, the connector extracts the cost center or category from each record, looks up the mapped channel, and posts the message there. If no mapping exists for a record, ml-connector can route it to a default exceptions channel or skip it based on configuration.

Related integrations

Connect Oracle JD Edwards and Microsoft Teams

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

Get started