ml-connector
SAP Business OneMicrosoft Teams

SAP Business One and Microsoft Teams integration

SAP Business One runs your finance, purchasing, and inventory. Microsoft Teams is where your team collaborates. Connecting the two puts critical finance events in front of the right people without leaving Teams. New purchase orders and approved invoices notify the team instantly, and approval requests can be posted to a Teams channel on a schedule that matches your workflow. ml-connector handles the different authentication models, manages the SAP Business One session lifecycle, and delivers the right data to the right channel.

How SAP Business One works

SAP Business One exposes purchase orders, purchase invoices, incoming and outgoing payments, journal entries, business partners, and items through OData v4 REST at https://<customer-server>:<port>/b1s/v2/. Each customer provides their own Service Layer base URL and port. Authentication uses session tokens obtained via POST /Login, which return a B1SESSION cookie with a 30-minute inactivity timeout. The platform is deployed on-premise or partner-hosted, so there is no shared global endpoint. Webhooks are supported in version 10.0 FP 2602 and later if the Webhook Messenger Service is activated, but polling is the recommended default approach since webhook setup requires SAP administrator configuration.

How Microsoft Teams works

Microsoft Teams is accessed via Microsoft Graph REST API at https://graph.microsoft.com/v1.0/, using OAuth2 client credentials flow with a tenant ID, client ID, and client secret registered in Azure AD. The platform has no native finance or ERP entities, so it serves as a notification and approval surface only. Teams can receive chat messages posted to channels and users, and supports change subscriptions that expire after 3 days and must be renewed. All application permissions require Azure AD admin consent.

What moves between them

Data flows from SAP Business One to Microsoft Teams. Purchase orders, purchase invoices, and payment records are read from SAP Business One on a polling schedule and formatted as summaries, then posted to a designated Teams channel or sent as direct messages to users. The integration does not write data back to SAP Business One; Teams is purely an outbound notification surface.

How ml-connector handles it

ml-connector stores SAP Business One credentials encrypted and maintains a reusable session token, respecting the 30-minute inactivity timeout by re-authenticating before expiry rather than waiting for the -5002 session error. It polls SAP Business One for new or updated records using the UpdateDate filter and OData $top/$skip parameters to handle page boundaries. Each record is formatted into a Teams message with the key fields (document number, partner name, amount, status), and posted to the specified channel or user via Microsoft Graph. SAP Business One session startup takes about 5 seconds, so ml-connector caches the token across multiple API calls rather than re-authenticating for each record. Because SAP Business One has no published idempotency keys, the integration checks for duplicates by DocNum before retrying a failed post to Teams. Changes to customer network or certificate configuration are handled by re-reading the SAP Business One instance URL from the configuration, and Teams subscription tokens are renewed before the 3-day expiry window.

A real-world example

A mid-market distributor uses SAP Business One for purchasing, invoicing, and payments across three regional warehouses. The finance team reviews new purchase orders for approval and wants to keep operations staff informed of invoice arrivals without opening SAP Business One constantly. Before integration, the team checked SAP Business One manually several times a day or relied on email notifications that often went unread. With SAP Business One and Microsoft Teams connected, new purchase orders and approved invoices post to the operations team's channel automatically, with a summary of the document number, vendor name, and amount. The team sees notifications in Teams where they are already working, and can drill into SAP Business One when they need details.

What you can do

  • Post purchase orders and invoices from SAP Business One to Microsoft Teams channels on a configurable polling schedule.
  • Include business partner name, document number, and amount in each Teams notification.
  • Handle SAP Business One session token expiry by maintaining a reusable session across multiple API calls.
  • Respect Microsoft Graph OAuth2 token lifecycle and Teams subscription 3-day renewal windows.
  • Filter and deduplicate records by document number to avoid posting duplicate notifications on retry.

Questions

Can I send Teams messages to specific users or only to channels?
ml-connector can post to both Teams channels and direct messages to individual users. You specify the channel or user ID during configuration, and the integration formats each SAP Business One record as a message and routes it to the destination you choose.
How does ml-connector handle SAP Business One session timeouts?
SAP Business One session tokens expire after 30 minutes of inactivity and return error code -5002 when timed out. ml-connector tracks the last activity time and re-authenticates proactively before the timeout occurs, avoiding the need to retry messages. Session startup takes about 5 seconds, so the integration reuses a single session across multiple polling cycles.
What if SAP Business One is deployed on-premise behind a firewall?
SAP Business One requires the Service Layer port to be accessible to ml-connector, either by opening the port to the connector's network or by configuring a VPN or firewall rule. Self-signed TLS certificates are common in on-premise deployments; ml-connector will accept them with proper certificate pinning if your environment requires it.

Related integrations

Connect SAP Business One and Microsoft Teams

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

Get started