# Erweiterbarkeit (für Entwickler)

Der eInvoice Sender ist um eine kleine Menge von AL-Schnittstellen herum aufgebaut, sodass Partner und Kunden ihn erweitern können - Unterstützung für neue Belegarten hinzufügen, einen anderen Reader einbinden oder eigene Validierungsregeln ergänzen -, ohne die Basis-App zu verändern. Diese Seite richtet sich an **Entwickler**.

## Schnittstelle 1 - DXP eInv Doc Exporter

Implementieren Sie **DXP eInv Doc Exporter**, um die Export-Payload für eine bestimmte Belegart zu erstellen. Sie besitzt eine einzige Methode, `CreateDocument(DocHeader: Variant): JsonObject` - sie wandelt eine Art von Business-Central-Beleg in die JSON-Payload um, die die Pipeline serialisiert und an die Generierung sendet.

Implementierungen werden über das erweiterbare Enum **Export Document** gebunden: Fügen Sie einen Wert für Ihre Belegart hinzu und verweisen Sie ihn auf Ihre implementierende Codeunit. Die Pipeline wählt den Exporter durch Auflösen dieses Enums aus, sodass das Registrieren eines neuen Exporters lediglich eine Erweiterung des Enums ist.

## Schnittstelle 2 - DXP eInv Doc Reader V2

Implementieren Sie **DXP eInv Doc Reader V2**, um einen Reader über die CIM-Darstellung (Common Information Model) eines Belegs bereitzustellen - seine Methode `ReadDocument` füllt die CIM-Puffer (Beleg, Partei, Zeile, Zu-/Abschlag, Zahlung, Anhang), sodass Regeln und Generierung die Daten einheitlich verarbeiten können.

<p class="callout info">Das Enum **Export Document** bindet *beide* Schnittstellen: jeder Enum-Wert verweist auf einen Exporter und einen Reader für diese Belegart. Wenn Sie eine neue Belegart hinzufügen, stellen Sie beide bereit.</p>

## Schnittstelle 3 - DXP eInv IValidation Rule

Implementieren Sie **DXP eInv IValidation Rule**, um Validierungsregeln hinzuzufügen. Sie besitzt zwei Methoden: `Evaluate` (führt die Prüfung aus und hängt Feststellungen an) und `GetMetadata` (liefert Kategorie, Standard-Schweregrad, Stufe, Beschreibung und Behebungshinweis der Regel zurück - was die Regel-Einrichtung befüllt). Eine einzige Codeunit kann anhand der Regel-ID verzweigen und viele Regeln bedienen, sodass das Budget für Objekt-IDs eingehalten wird.

Regeln werden über das erweiterbare Enum **Validation Rule** gebunden, das einen dedizierten Erweiterungspunkt **CUSTOM** für kunden- und partnereigene Regeln bereitstellt. Fügen Sie einen an Ihre implementierende Codeunit gebundenen Enum-Wert hinzu, und die Regel nimmt wie jede eingebaute Regel an der Validierung teil - sie erscheint in der [Regel-Einrichtung](https://docs.squeeze.one/books/einvoice-sender-for-microsoft-dynamics-365-bc-de-de/page/regel-einrichtung), wo ihr Aktiviert-Kennzeichen, ihre Schweregrad-Übersteuerung und ihre Stufe konfiguriert werden können.

## Das Ereignis OnCollectValidationRules

Die App veröffentlicht das Integrationsereignis **OnCollectValidationRules**. Abonnieren Sie es, um Ihre Regelimplementierungen zur Laufzeit bei der Validierungs-Engine zu registrieren. Dies ist der Einhängepunkt, über den eine erweiternde App Regeln zu der Sammlung beisteuert, die sowohl die Pipeline als auch die Live-Konformitätsprüfung verwenden.

<p class="callout info">Zusammen decken diese drei Schnittstellen plus das Integrationsereignis die wichtigsten Erweiterungsszenarien ab: neue Belegart (Doc Exporter + Enum Export Document), benutzerdefiniertes Modell-Lesen (Doc Reader V2) und benutzerdefinierte Validierung (IValidation Rule + Enum Validation Rule, registriert über OnCollectValidationRules).</p>