# Microsoft Dynamics 365 Business Central

> Wie Business Central über seine API und eine eigene API-Seite Seriennummern an BatteryPass übergibt.

> [!NOTE]
> Diese Seite beschreibt ein Integrationsmuster. BatteryPass liefert keinen Konnektor für Business Central und hat keine
> Partnerschaft mit Microsoft; nichts hier ist eine Freigabe des Herstellers.

Die Standard-API v2.0 liefert Artikel und Artikelposten, aber `itemLedgerEntries` hat keine Felder für Serien- oder
Chargennummern. Seriennummern brauchen deshalb eine eigene AL-API-Seite, die Ihr Partner oder Ihre IT schreibt und die
Artikelposten mit ihrer Seriennummer liefert. Das Preset `business-central-serials` passt zu ihren Spalten (und zu den
Spaltennamen der Excel-Ausgabe der Benutzeroberfläche, deutsch und englisch); es setzt voraus, dass die Modellkennung in
BatteryPass die Artikelnummer ist.

Die Middleware meldet sich über Microsoft Entra ID als Dienst an (Client Credentials). Um neue Posten zu bemerken, kann
sie Webhooks mit `POST /api/v2.0/subscriptions` abonnieren: Business Central prüft die Adresse mit einem
Validierungs-Handshake, sendet schlanke Benachrichtigungen (Ressource und Art der Änderung) mit Ihrem `clientState` und
lässt ein Abonnement nach drei Tagen auslaufen; erneuern Sie es rechtzeitig. Die Benachrichtigungen sind nicht
signiert: prüfen Sie den `clientState` und lesen Sie die geänderte Ressource über die API, bevor Sie handeln.

Danach folgen die Schritte von [Einheiten aus der Fertigung](https://passport.kabin.sh/docs/de/integrations/workflows/units-from-production) und
[Pass-Links zurück ins ERP](https://passport.kabin.sh/docs/de/integrations/workflows/passport-links-to-erp).

## Schnittstellen und Prüfstand

- **Hersteller:** Microsoft
- **Cloud:** Business Central online (API v2.0)
- **On-Premise:** Business Central on-premises (API v2.0)

Die Standard-API liefert Artikelposten ohne Serien- und Chargennummern; dafür braucht es eine eigene AL-API-Seite. Webhook-Abonnements laufen nach drei Tagen ab und müssen erneuert werden.

Integrationsmuster, kein Konnektor: BatteryPass liefert keine ERP-Anbindung und ist bei keinem Hersteller zertifiziert.

| Schnittstelle                                                                                                                                                                                                | Protokoll | Anmeldung                    | Ereignisse                | Objekte                                        | Prüfstand                                          |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------- | ---------------------------- | ------------------------- | ---------------------------------------------- | -------------------------------------------------- |
| [`API v2.0`](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/api-reference/v2.0/resources/dynamics_itemledgerentry) (Standard-API (Artikel, Artikelposten, Verkaufsbelege))         | OData V4  | OAuth 2.0 Client Credentials | keine                     | Produkt-/Materialstamm, Lieferung/Warenausgang | geprüft in der Herstellerdokumentation, 24.10.2026 |
| [`Webhook subscriptions (/api/v2.0/subscriptions)`](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/api-reference/v2.0/dynamics-subscriptions) (Benachrichtigungen über Änderungen) | REST      | OAuth 2.0 Client Credentials | Webhooks (nicht signiert) | Produkt-/Materialstamm, Lieferung/Warenausgang | geprüft in der Herstellerdokumentation, 24.10.2026 |
| `Custom AL API page` (Eigene API-Seite für Artikelposten mit Seriennummern)                                                                                                                                  | OData V4  | OAuth 2.0 Client Credentials | keine                     | Charge/Seriennummer                            | geprüft in der Herstellerdokumentation, 24.10.2026 |

**Hinweise**

- `API v2.0`: Anmeldung über Microsoft Entra ID (Service-to-Service); itemLedgerEntries hat keine Felder für Serien- oder Chargennummern.
- `Webhook subscriptions (/api/v2.0/subscriptions)`: Beim Anlegen prüft Business Central die Adresse mit einem Validierungs-Handshake. Benachrichtigungen sind schlank (Ressource und Art der Änderung) und tragen den clientState des Abonnements, aber keine Signatur.
- `Custom AL API page`: Eine Erweiterung, die der Partner oder die eigene IT schreibt; sie liefert die Spalten des Presets business-central-serials.

**Importvorlagen (Presets): Business Central – Artikelposten mit Seriennummern** (`business-central-serials`): Die Artikelposten aus Microsoft Dynamics 365 Business Central mit Seriennummer, wie sie eine eigene AL-API-Seite liefert (die Standard-API itemLedgerEntries enthält keine Seriennummern). Spaltennamen der API-Seite und der Excel-Ausgabe der Benutzeroberfläche (deutsch und englisch). Setzt voraus, dass die Modellkennung die Artikelnummer ist.

| Spalte im Export                                 | Feld in BatteryPass                                   |
| ------------------------------------------------ | ----------------------------------------------------- |
| `itemNo` (auch Item No., Artikelnr.)             | Modellkennung / SKU `identification.model_identifier` |
| `serialNo` (auch Serial No., Seriennr.)          | Seriennummer `identification.serial_number`           |
| `postingDate` (auch Posting Date, Buchungsdatum) | Herstellungsdatum `identification.manufacturing_date` |

**Importvorlagen (Presets): Allgemeine CSV-Datei** (`generic-csv`): Für jedes ERP und für Dateien, die eine Middleware selbst schreibt: GTIN, Seriennummer, Herstelldatum, Produktionsstätte (Name oder GLN), Modellversion und Batteriestatus, mit deutschen und englischen Spaltennamen.

| Spalte im Export                                              | Feld in BatteryPass                                   |
| ------------------------------------------------------------- | ----------------------------------------------------- |
| `GTIN` (auch EAN, GTIN-13, GTIN-14)                           | GTIN (GS1) `identification.gtin`                      |
| `Serial number` (auch Seriennummer, serial_number)            | Seriennummer `identification.serial_number`           |
| `Manufacturing date` (auch Herstelldatum, manufacturing_date) | Herstellungsdatum `identification.manufacturing_date` |
| `Facility` (auch Produktionsstätte, Facility GLN, Werk-GLN)   | Herstellungsort `identification.manufacturing_place`  |
| `Model version` (auch Modellversion, model_version)           | Modellversion `model_version`                         |
| `Battery status` (auch Batteriestatus, battery_status)        | Batteriestatus `identification.battery_status`        |

## Abläufe

- [Einheiten aus der Fertigung](https://passport.kabin.sh/docs/de/integrations/workflows/units-from-production.md): Seriennummern aus Fertigungsrückmeldung oder Wareneingang werden als Import bereitgestellt; Mitglieder prüfen, übernehmen und geben frei, bevor ein Pass erscheint. Scopes des Schlüssels: import
- [Pass-Links zurück ins ERP](https://passport.kabin.sh/docs/de/integrations/workflows/passport-links-to-erp.md): Die Middleware folgt dem Änderungsfeed und schreibt den GS1 Digital Link und den Passstatus an den Seriennummernsatz im ERP, damit Etiketten und Lieferpapiere ihn tragen. Scopes des Schlüssels: read
- [Rücksendungen und Reparaturen als Lebenszyklus-Ereignisse](https://passport.kabin.sh/docs/de/integrations/workflows/returns-and-repairs.md): Abgeschlossene Reparaturen, Prüfungen und Komponententausche aus Service- oder Retourenaufträgen erscheinen als Ereignisse in der Historie der Einheit. Scopes des Schlüssels: read, condition
- [Produktänderung führt zu neuer Modellversion](https://passport.kabin.sh/docs/de/integrations/workflows/product-change.md): Eine Änderung am Produktstamm im ERP löst eine Benachrichtigung aus; ein Mitglied legt in BatteryPass eine neue Modellversion an. Deklarierte Daten werden nie automatisch geschrieben. Scopes des Schlüssels: read
