Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Fassade steuert den Steuerintegrationsfluss durch eine Sequenz , die eine Liste von Aktivitäten verwaltet. Dieser Artikel stellt diese drei Klassen der Steuerintegration vor.
Fassade
public final static class TaxIntegrationFacade
Die Fassade (TaxIntegrationFacade
) ist die äußerste Schnittstelle der Steuerintegration. Es ist eine Brücke zum Steuerberechnungsdienst.
Das folgende Beispiel zeigt die wichtigste Methode.
[Replaceable]
public static void calculate(TaxIntegrationDocumentObject _document)
Diese Methode akzeptiert ein Dokument (TaxIntegrationDocumentObject
) als Eingabe und gibt void
zurück.
Die Methode ändert das Dokument direkt. Das Dokument dient gleichzeitig als Ausgabe.
Notiz
Die Methode ist austauschbar. Mit anderen Worten: Es ist vollständig austauschbar (anpassbar).
TaxIntegrationSequence sequence = TaxIntegrationSequence::construct(LoggerName)
.appendActivityOnDocument(TaxIntegrationSettingRetrievalActivityOnDocument::construct())
.appendActivityOnDocument(TaxIntegrationDataRetrievalActivityOnDocument::construct())
.appendActivityOnDocument(TaxIntegrationCalculationActivityOnDocument::construct())
// ...
.appendActivityOnDocument(TaxIntegrationDataPersistenceActivityOnDocument::construct());
sequence.act(_document);
if (!_document.isOK())
{
throw _document.getException();
}
Innerhalb der Methode wird eine Sequenz (TaxIntegrationSequence
) erstellt und aufgerufen. Alle Aktivitäten werden der Reihe nach an die Sequenz angehängt.
Bei Bedarf wird am Ende explizit eine Exception geworfen.
Sequenz
Die Sequenz (TaxIntegrationSquence
) ist eine spezielle Aktivität, die eine Abfolge von Aktivitäten aufrechterhält. Wenn die Methode act
aufgerufen wird, werden alle Aktivitäten in der Reihenfolge ausgeführt, in der sie angehängt werden.
public final class TaxIntegrationSequence
extends TaxIntegrationAbstractActivity
{
public final void act(TaxIntegrationDocumentObject _document);
private void actInternal(TaxIntegrationDocumentObject _document);
}
Zur Verwendung einer Sequenz (TaxIntegrationSequence
) sind folgende Schritte notwendig:
- Die
construct
Methode erstellt die Sequenz. - Die Methoden
appendActivitySequence
,appendActivityOnDocument
undappendActivityOnLine
bauen die Sequenz auf. - Die
act
Methode spielt die Sequenz ab.
Intern verwaltet die Sequenz eine Aktivitätenliste (List
). Anschließend wird diese Liste beim Aufruf aufgezählt (act
).
Die Sequenz ruft die
shouldSkip
Methode einer Aktivität auf, um zu bestimmen, ob die Aktivität für das aktuelle Dokument übersprungen werden soll.Für
TaxIntegrationSequence
undTaxIntegrationAbstractActivityOnDocument
wird dieact
Methode direkt aufgerufen, wenn die Aktivität nicht übersprungen werden soll.Für
TaxIntegrationAbstractActivityOnLine
zählt die Sequenz alleTaxIntegrationLineObject
Objekte im Dokument auf und ruft derenact
Methode auf. Auch Gebühren werden vomTaxIntegrationLine
Objekt erhoben. Dieact
Methode wird zuerst für die Gebühren des Dokuments aufgerufen. Es wird dann auf die Zeilen des Dokuments angewendet, zusammen mit den Gebühren in jeder Zeile. Beispielsweise sind auf einem Dokument zwei Belastungen und zwei Zeilen vorhanden. Gleichzeitig liegen auf jeder Leitung zwei Ladungen. In diesem Fall sieht der vollständige Ablauf wie folgt aus:- Die erste Anklage des Dokuments
- Der zweite Vorwurf des Dokuments
- Die erste Zeile des Dokuments
- Die erste Ladung der ersten Zeile
- Die zweite Ladung der ersten Zeile
- Die zweite Zeile des Dokuments
- Die erste Ladung der zweiten Zeile
- Die zweite Ladung der zweiten Zeile
TaxIntegrationSequence
ist für die direkte Verwendung vorgesehen und wird als konkrete Klasse implementiert, die über eine öffentliche act
Methode verfügt.
Die folgenden Beispiele zeigen die actInternal
Methode zur schnellen Referenz.
private void actInternal(TaxIntegrationDocumentObject _document)
{
var enumerator = list.getEnumerator();
while (enumerator.moveNext())
{
anytype current = enumerator.current();
if (current is TaxIntegrationSequence)
{
TaxIntegrationSequence sequence = current;
sequence.act(_document);
continue;
}
if (current is TaxIntegrationAbstractActivityOnDocument)
{
TaxIntegrationAbstractActivityOnDocument activity = current;
if (!activity.shouldSkip(_document))
{
activity.act(_document);
}
continue;
}
if (current is TaxIntegrationAbstractActivityOnLine)
{
TaxIntegrationAbstractActivityOnLine activity = current;
if (!activity.shouldSkip(_document))
{
SetEnumerator chargeEnumerator = _document.getChargeSet().getEnumerator();
while (chargeEnumerator.moveNext())
{
TaxIntegrationLineObject charge = chargeEnumerator.current();
activity.act(charge);
}
SetEnumerator lineEnumerator = _document.getLineSet().getEnumerator();
while (lineEnumerator.moveNext())
{
TaxIntegrationLineObject line = lineEnumerator.current();
activity.act(line);
chargeEnumerator = line.getChargeSet().getEnumerator();
while (chargeEnumerator.moveNext())
{
TaxIntegrationLineObject charge = chargeEnumerator.current();
activity.act(charge);
}
}
}
continue;
}
}
}
Aktivität
Eine Aktivität erledigt die eigentliche Arbeit in einem Integrationsfluss. Es fungiert als Segment im Integrationsfluss. Der Name einer Aktivität beschreibt ihren Zweck.
Alle Aktivitäten werden von derselben Klasse geerbt, TaxIntegrationAbstractActivity
. Es gibt drei Arten von Aktivitäten:
TaxIntegrationSequence
TaxIntegrationAbstractActivityOnDocument
TaxIntegrationAbstractActivityOnLine
Jeder Aktivitätstyp enthält eine act
Methode und eine actInternal
Methode, aber sie akzeptieren unterschiedliche Argumente.
TaxIntegrationAbstractActivityOnDocument
und TaxIntegrationAbstractActivityOnLine
sollen verlängert werden. Sie werden als abstrakte Klassen implementiert, die über eine interne act
Methode und eine abstrakte actInternal
Methode verfügen. Daher sollte eine neue Aktivität eine dieser beiden abstrakten Klassen erweitern. Die Aktivität sollte ihre eigene actInternal
Methode implementieren, um die eigentliche Logik der Aktivität beizubehalten. Wenn die Aktivität nicht auf alle Transaktionen/Dokumente anwendbar ist, sollte sie eine eigene shouldSkip
Methode implementieren.
TaxIntegrationSequence
ist zur direkten Verwendung bestimmt. Es wird als konkrete Klasse implementiert, die über eine öffentliche act
Methode verfügt.
Alle drei Aktivitätstypen protokollieren Ereignisse während der act
Methode wie erforderlich, nachdem TaxIntegrationLogLevelUtility
aktiviert wurde. Der Protokollierungskontext wird von TaxIntegrationAbstractActivity
geerbt. Die folgende Abbildung zeigt die Hierarchie der Aktivitäten.
Weitere Informationen zum Hinzufügen einer neuen Aktivität finden Sie unter Neue Aktivität in der Steuerintegration hinzufügen.
Sequenz
TaxIntegrationSequence
ist eine besondere Aktivität.
Dokumentaktivität
Die Dokumentaktivität wirkt auf TaxIntegrationDocumentObject
und erweitert TaxIntegrationAbstractActivityOnDocument
.
public abstract class TaxIntegrationAbstractActivityOnDocument
extends TaxIntegrationAbstractActivity
{
internal final void act(TaxIntegrationDocumentObject _document);
protected abstract void actInternal(TaxIntegrationDocumentObject _document);
}
Eine neue Dokumentaktivität sollte die actInternal
Methode implementieren, um die Logik dieser Aktivität zu speichern. Die actInternal
Methode akzeptiert ein TaxIntegrationDocumentObject
Objekt als Eingabe. Daher können im Gegensatz zu einer Zeilenaktivität Daten auf Dokumentebene bearbeitet werden. Eine Dokumentaktivität kann jedoch auch durch Aufzählung des Objekts erfolgen. TaxIntegrationLineObject
TaxIntegrationDocumentObject
Die meisten Dokumentaktivitäten verarbeiten Daten sowohl auf Dokumentebene als auch auf Zeilenebene. Wenn eine Aktivität nicht auf alle Transaktionen und Dokumente anwendbar ist, sollte sie eine eigene shouldSkip
Methode implementieren.
Linienaktivität
Die Linienaktivität wirkt auf TaxIntegrationLineObject
und erweitert TaxIntegrationAbstractActivityOnLine
.
public abstract class TaxIntegrationAbstractActivityOnLine
extends TaxIntegrationAbstractActivity
{
internal final void act(TaxIntegrationLineObject _line);
protected abstract void actInternal(TaxIntegrationLineObject _line);
}
Eine neue Zeilenaktivität sollte die actInternal
Methode implementieren, um die Logik dieser Aktivität zu speichern. Die actInternal
Methode akzeptiert ein TaxIntegrationLineObject
Objekt als Eingabe und kann Daten nur auf dem angegebenen Zeilenobjekt manipulieren. Da Gebühren jedoch auch als TaxIntegrationLineObject
Objekt beschrieben werden, werden Gebühren auch von der Zeilenaktivität verarbeitet. Wenn eine Aktivität nicht auf alle Zeilen im Dokument anwendbar ist, sollte sie eine eigene shouldSkip
Methode implementieren. Die shouldSkip
Methode gibt an, ob die aktuelle Aktivität für alle Zeilen (einschließlich Gebühren) im Dokument übersprungen werden soll, da sie ein TaxIntegrationDocumentObject
Objekt als Eingabe akzeptiert.
Aktuelle Aktivitäten
Hier ist die Liste der aktuellen Aktivitäten in der Reihenfolge TaxIntegrationFacade::calculate
:
- SteuerintegrationseinstellungAbrufaktivitätaufDokument
- TaxIntegrationDataRetrievalActivityOnDocument
- TaxIntegrationCalculationActivityOnDocument
- SteuerintegrationFehlerbehandlungAktivitätAufDokument
- SteuerIntegrationSteuercodeCheckActivityOnLine
- SteuerintegrationSteuer-IDAktivitätAufDokument
- Steuerintegrationslistencodeaktivität auf Dokument
- SteuerIntegrationWährungAustauschAktivitätAufDokument
- SteuerintegrationsdatenPersistenzAktivitätAufDokument