Freigeben über


Fassade, Ablauf und Aktivitäten bei der Steuerintegration

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:

  1. Die construct Methode erstellt die Sequenz.
  2. Die Methoden appendActivitySequence, appendActivityOnDocument und appendActivityOnLine bauen die Sequenz auf.
  3. 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 und TaxIntegrationAbstractActivityOnDocument wird die act Methode direkt aufgerufen, wenn die Aktivität nicht übersprungen werden soll.

  • Für TaxIntegrationAbstractActivityOnLine zählt die Sequenz alle TaxIntegrationLineObject Objekte im Dokument auf und ruft deren act Methode auf. Auch Gebühren werden vom TaxIntegrationLine Objekt erhoben. Die act 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:

    1. Die erste Anklage des Dokuments
    2. Der zweite Vorwurf des Dokuments
    3. Die erste Zeile des Dokuments
    4. Die erste Ladung der ersten Zeile
    5. Die zweite Ladung der ersten Zeile
    6. Die zweite Zeile des Dokuments
    7. Die erste Ladung der zweiten Zeile
    8. 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.

Aktivitätshierarchie

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:

  1. SteuerintegrationseinstellungAbrufaktivitätaufDokument
  2. TaxIntegrationDataRetrievalActivityOnDocument
  3. TaxIntegrationCalculationActivityOnDocument
  4. SteuerintegrationFehlerbehandlungAktivitätAufDokument
  5. SteuerIntegrationSteuercodeCheckActivityOnLine
  6. SteuerintegrationSteuer-IDAktivitätAufDokument
  7. Steuerintegrationslistencodeaktivität auf Dokument
  8. SteuerIntegrationWährungAustauschAktivitätAufDokument
  9. SteuerintegrationsdatenPersistenzAktivitätAufDokument