ml-connector
Sage 300Microsoft Teams

Sage 300 and Microsoft Teams integration

Sage 300 runs accounting and procurement on your on-premise server. Microsoft Teams is where your finance team collaborates. Connecting the two keeps approvers informed: new vendor invoices appear in Teams channels as soon as Sage 300 records them, and GL journal batches post to a dedicated channel for month-end visibility. ml-connector polls Sage 300 on a schedule, transforms the data, and posts summaries to Teams so approvals and reviews happen in the tools your team already uses.

How Sage 300 works

Sage 300 is an on-premise ERP accessible via REST and OData APIs hosted on a customer's Windows IIS server. It exposes purchase orders, invoices, vendor master data, AR/AP transactions, GL accounts, and journal batches through a standard URL pattern. All requests require HTTP Basic Authentication with uppercase username and password. The API supports OData filtering and pagination via $filter, $orderby, $skip, and $top parameters. Sage 300 has no webhooks or change-data-capture, so integration is entirely poll-based. An API user must be explicitly created in Administrative Services with the Web API security group assigned; the built-in admin account lacks API rights.

How Microsoft Teams works

Microsoft Teams is accessed through the Microsoft Graph REST API using OAuth2 client credentials flow for daemon applications. The API accepts messages, channel updates, and metadata operations on teams, channels, and chat objects. Subscriptions to resource changes can be registered for webhook notifications, though they expire within days and require renewal. Teams is a messaging and collaboration platform without native ERP data, so it functions purely as a notification and approval surface. Rate limits per gateway node apply but are not explicitly documented. User profile operations require Azure AD admin consent.

What moves between them

Invoice and GL batch data flows from Sage 300 into Microsoft Teams. On a daily or weekly schedule, ml-connector polls Sage 300 for new APInvoiceBatches and GLJournalBatches, formats summaries with vendor names and GL account allocations, and posts them as channel messages in Microsoft Teams. The flow is unidirectional; Teams does not write back to Sage 300. Approvals and comments in Teams are logged for audit but do not create transactions in Sage 300.

How ml-connector handles it

ml-connector stores Sage 300 connection details (hostname, username, password) encrypted and encodes them in the HTTP Basic Authorization header on every request, respecting the uppercase-credential requirement. It authenticates to Microsoft Teams via OAuth2 client credentials, exchanging tenant ID, client ID, and client secret for a bearer token that renews before expiry. On the polling schedule, ml-connector reads APInvoiceBatches and GLJournalBatches from Sage 300 using OData filters (DocumentDate gt timestamp), formats each batch into a summary with vendor details and GL account totals, and posts the message to a configured Teams channel via Microsoft Graph chatMessage endpoints. IIS connection timeouts are managed with exponential backoff; basic auth credentials are validated on the first request and credentials re-sent on each subsequent call. Every record carries a full audit trail with the original Sage 300 batch ID and posting timestamp.

A real-world example

A mid-size manufacturing company runs Sage 300 on-premise for accounting and procurement, with a finance team spread across two offices using Microsoft Teams daily. Invoice approvals previously required the AP clerk to email spreadsheets or make phone calls; GL month-end closes meant printing journals and manually distributing them for review. With Sage 300 and Teams connected, new purchase order invoices post automatically to a dedicated Teams channel as soon as they hit Sage 300, with vendor name and line-item details visible in the message thread. GL journal batches from period-end close process post immediately to the close checklist channel, and finance managers review them during their normal Teams workflow. Approvals are recorded in Teams and linked to the source batch in the audit log.

What you can do

  • Post vendor invoice summaries from Sage 300 APInvoiceBatches to Microsoft Teams channels with vendor name, amount, and GL account allocation.
  • Send GL journal batch notifications to finance teams at month-end, formatted with account codes and totals for review and sign-off.
  • Authenticate to Sage 300 via HTTP Basic Auth with encrypted credentials and to Microsoft Teams via OAuth2 client credentials with automatic token renewal.
  • Poll Sage 300 on a configurable schedule using OData filters to fetch only new batches since the last sync.
  • Track every invoice and GL batch with a full audit trail linking the Teams message to the source batch ID in Sage 300.

Questions

Does data flow only from Sage 300 to Microsoft Teams?
Yes. Invoices and GL batches flow from Sage 300 into Teams as notifications and summaries. Finance teams review and approve in Teams, but those approvals are recorded in the audit log and do not create transactions back in Sage 300. Teams is a notification and collaboration surface, not a source of ERP data.
How does ml-connector handle Sage 300's requirement for uppercase credentials and on-premise hosting?
ml-connector stores the Sage 300 hostname, username, and password encrypted in its database. It constructs the full Base URL using the customer's hostname and encodes the uppercase username and password in the HTTP Basic Authorization header on every request. Because Sage 300 is self-hosted on IIS, the customer must expose their instance over HTTPS; ml-connector validates the connection at setup.
Can ml-connector post approvals or status updates from Teams back into Sage 300?
No. ml-connector sends data from Sage 300 to Teams for visibility and collaboration, but Teams messages do not reverse-sync to Sage 300. If a separate workflow is needed to record approvals in Sage 300, that would require a separate integration. The current connection is read-from-Sage-300, write-to-Teams only.

Related integrations

Connect Sage 300 and Microsoft Teams

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

Get started