Connect an ERP: SAP, Dynamics 365, NetSuite and Odoo
Set up an integration hub mapping that keeps products and passports in step with your ERP, with the exact settings for each supported system.
DPP Shield editorial team · Updated:
Open Integration hub, start a mapping from your ERP's template, point it at the ERP's product API or an exported file, preview the changes, apply them and schedule the feed. The template already names the ERP's standard fields; you only check them against your own installation.
What the connection does
An ERP mapping reads item records - item number, description, GTIN and any attribute you map - and writes them onto the matching products and passports. Records are matched by SKU or GTIN, so your products' SKUs must be written exactly as the ERP writes its item numbers. Applying a run creates a new, schema-validated passport version only where a value actually changed, and every changed field records the mapping and run that wrote it.
Owners and administrators create and edit mappings; editors can run them. One run reads up to 5,000 records and a source of up to 10 MB, so split a large catalogue into several mappings or push it in batches.
Set up the mapping
- Open Integration hub, choose New mapping, then start from the template for your system.
- Check the records path (where the list of items sits in the response) and the key: the source field that holds your SKU or GTIN.
- Review the rules. Each copies one source field to a product field (product.name, product.gtin, product.brand…) or to a passport data path such as data.materials.0.recycled_percent, with a transform where needed - number with decimal comma or unit scale, integer, yes/no, date, country code, upper or lower case - and an optional value map.
- Save, then upload a sample export or use Test feed to see what the source returns.
- Run a preview. It lists, per record, the fields that would change; nothing is written yet.
- Apply the run, then set the schedule to hourly or daily if the source is a feed.
SAP S/4HANA: Product API
Template: SAP S/4HANA product master (OData API_PRODUCT_SRV). Feed URL https://<host>/sap/opu/odata/sap/API_PRODUCT_SRV/A_Product?$format=json&$expand=to_Description&$top=5000, records path d.results, key Product.
Authenticate with a communication user allowed to read the Product API (basic credentials), or with OAuth 2.0 client credentials where your landscape issues tokens. ProductStandardID holds the GTIN only when the product's standard ID type is a GTIN, so check before mapping it. The first description is used: filter to_Description by language if products carry several.
SAP ECC or S/4HANA: MATMAS IDoc
Template: SAP material master IDoc (MATMAS, XML). Records path IDOC.E1MARAM, key MATNR, with E1MAKTM.MAKTX as the name and EAN11 as the GTIN. MATNR is the material number as SAP stores it, often with leading zeros, and your SKUs must use the same form.
Deliver the XML over SFTP from an outbound folder - the feed pins the server's host key - or upload the file. XML with a document type declaration (DOCTYPE) is refused.
SAP Business One
Template: SAP Business One items (Service Layer export), records path value, key ItemCode, with ItemName and BarCode. The Service Layer needs a session login that a scheduled feed cannot hold, so export GET /b1s/v1/Items?$select=ItemCode,ItemName,BarCode to a file and upload it, or have your integration framework post the result to the mapping's push endpoint.
Microsoft Dynamics 365 Business Central
Template: Dynamics 365 Business Central items (API v2.0). Feed URL https://api.businesscentral.dynamics.com/v2.0/<tenant>/<environment>/api/v2.0/companies(<company id>)/items, records path value, key number, with displayName and gtin.
Register an app in Microsoft Entra ID with Business Central API permission and use OAuth 2.0 client credentials: token endpoint https://login.microsoftonline.com/<tenant>/oauth2/v2.0/token, scope https://api.businesscentral.dynamics.com/.default. For Finance and Operations, use the ReleasedProductsV2 data entity with ItemNumber as the key.
Oracle NetSuite
Template: NetSuite items (SuiteQL). It posts SELECT itemid, displayname, upccode FROM item WHERE isinactive = 'F' to https://<account>.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql?limit=1000, records path items, key itemid. SuiteQL returns column names in lower case.
NetSuite's REST API authenticates with token-based or OAuth 2.0 machine-to-machine signatures that a feed cannot produce. Run the query in a scheduled script and post the result to the mapping's push endpoint, or upload a saved-search export.
Odoo
Template: Odoo products (import-compatible export), key default_code (the internal reference), with name and barcode. Export products with “I want to update data (import-compatible export)” so the columns carry Odoo's field names.
A JSON-RPC feed also works: POST a search_read call to /jsonrpc and write {{credential}} where the API key goes, so the key is stored encrypted instead of sitting in the request body.
Check what a run did
The run history lists each run with its trigger - manual, schedule or push - and, per record, whether it was updated, unchanged, unmatched or failed. Unmatched usually means the key is written differently in the two systems, for example with or without leading zeros. A re-run with the same data changes nothing, and an empty source value never blanks a field that already has a value.