Table of Contents

Class DiwassDocumentHandlerBase

Namespace
Zedal.Sdk.DocumentHandler
Assembly
Zedal.Sdk.dll

Gemeinsame Basis für alle DIWASS Document Handler. Verwaltet den lokalen Dokument-Status (DocXml, Document, FollowupIntents) und bietet Synchronisation mit dem ZEDAL-Dokumentenspeicher.

public abstract class DiwassDocumentHandlerBase
Inheritance
DiwassDocumentHandlerBase
Derived
Inherited Members

Constructors

DiwassDocumentHandlerBase(ICompanyDocumentApi, IAuthorityDocumentApi, ICoreApi)

Fields

MinTransferPollInterval

Untere Schranke für das Poll-Intervall in WaitForDiwassTransfer(TimeSpan, TimeSpan). Schützt den ZEDAL-Server davor, in zu engem Takt mit GetTransferDetails belastet zu werden.

_authorityApi
_companyApi
_coreApi

Properties

DiwassNotificationId

Von DIWASS zugewiesene NotificationId (bzw. entsprechende Document-Id je Message-Typ), gefüllt nachdem SendToDiwass() erfolgreich mit DIWASS synchronisiert hat.

DocXml

Aktuelles Dokument-XML im Speicher.

FollowupIntents

Mögliche nächste Aktionen im regulatorischen Lebenszyklus.

HasError

true, wenn der jüngste Versand-Versuch (TransferHistory[0]) fehlschlug. Liefert false, wenn die History leer ist (noch kein Versand) oder der letzte Eintrag erfolgreich war.

HasValidationErrors

Convenience: true wenn die letzte Mutation Validierungsfehler gemeldet hat.

LastError

Fehlerinfo des jüngsten fehlgeschlagenen Versands oder null, wenn HasError false ist.

LastTransferLogId

LogId des letzten DIWASS-Versands (zurückgegeben von SendDocument). Wird von SendToDiwass() gesetzt und von WaitForDiwassTransfer(TimeSpan, TimeSpan) als Schlüssel für das Status-Polling gegen GetTransferDetails verwendet.

SaveTarget

Zielbereich für SaveToZedal(FileId). Standard: freier Transportpapierbereich (Transportpapiere).

TargetFileId

Akte (FileId), in der das Dokument liegt — gesetzt nach SaveToZedal(FileId) im FileArea-Pfad. Trägt entweder die vom Server frisch vergebene FileId einer neu angelegten Akte oder die vom Aufrufer übergebene targetFile. Bleibt null bei TransportPaperArea (Movements / freie Transportpapiere haben kein Akten-Konzept).

TransferHistory

Versand-Historie dieses Dokuments (Erfolge + Fehlversuche), neuester Eintrag zuerst — der Server begrenzt serverseitig auf eine plattformweit einheitliche Anzahl, ältere Einträge werden verworfen. Wird durch Refresh() über die typisierten Get-Endpunkte gefüllt; Mutationen aktualisieren die Liste nicht (Set/Submit*-Responses tragen keine transfer_history).

ValidationErrors

Validierungsfehler aus der letzten BXA-Mutation. Leer, wenn das Dokument schemakonform ist; befüllt mit (path, error)-Tupeln, wenn der Server Verstöße gemeldet hat. Refresh() setzt die Liste nicht zurück, da GetDocument keine Validierungsfehler liefert.

ZedalDocumentId

DocId im ZEDAL-Dokumentenspeicher, sofern das Dokument bereits gespeichert/geladen wurde. Wird durch LoadFromZedal(DocumentId), SaveToZedal(FileId) und SendToDiwass() gesetzt.

Methods

LoadFromZedal(DocumentId)

Lädt ein Dokument aus dem ZEDAL-Dokumentenspeicher und initialisiert den Handler-Zustand.

LoadFromZedalSingleEntry(string, string, Func<QueryParameter, Task<DocumentId>>, string)

Resolved eine fachliche ID (Notification-/Movement-/Annex7-Id) gegen den IQueryApi-Index und delegiert anschließend an LoadFromZedal(DocumentId). Voraussetzung: pro fachlicher ID existiert genau ein ZEDAL-Doc; alle Lifecycle-Updates leben als BxA-Blocks in diesem einen Dokument. Bei mehr als einem Treffer wird defensiv das mit dem jüngsten last_changed geladen, bei null Treffern wird KeyNotFoundException geworfen.

Refresh()

Lädt den aktuellen Dokumentstatus neu von der BXA API, ohne das XML zu verändern. Subklassen rufen den passenden typisierten GetNotification/GetAnnex7/GetMovement-Endpoint auf, pflegen ihre typisierte Property und delegieren die Common-Felder an UpdateCommonState(DiwassOperationResult).

ReloadFromZedal()

Lädt die aktuellste Version des Dokuments aus ZEDAL neu. Voraussetzung: ZedalDocumentId ist gesetzt.

RequireDocXml()

Validiert DocXml für Refresh-Aufrufe und gibt es zurück. Wird von Subklassen-Refresh()-Implementierungen verwendet.

SaveToZedal(FileId)

Speichert das aktuelle DocXml in den ZEDAL-Dokumentenspeicher. Wichtig: Es erfolgt keine Weiterleitung an DIWASS.

SendToDiwass()

Überträgt das Dokument an DIWASS. Persistiert lokale Änderungen seit dem letzten ZEDAL-Sync (Erst-Anlage oder BxA-Set*/Create*) implizit über SaveToZedal(FileId), bevor der Server-Push ausgelöst wird — sodass DIWASS garantiert die aktuelle Version sieht.

SetDiwassNotificationIdIfPresent(string)

Aktualisiert die vom DIWASS-Server vergebene Dokument-Id, falls die Subklasse sie aus dem aktuellen typisierten Dokument extrahieren kann. Subklassen rufen das nach jedem Update auf.

UpdateCommonState(DiwassOperationResult)

Übernimmt die familien-unabhängigen Felder eines Operationsergebnisses (DocXml, FollowupIntents, ValidationErrors, TransferHistory) in den Handler-Zustand. Das typisierte Dokument selbst wird in der jeweiligen Subklasse gepflegt.

WaitForDiwassTransfer(TimeSpan, TimeSpan)

Wartet auf den Abschluss des in SendToDiwass() ausgelösten DIWASS-Versands. Pollt zyklisch GetTransferDetails für die in LastTransferLogId hinterlegte Transfer-Log-Id und kehrt zurück, sobald der Server einen terminalen Status meldet:

Lädt das DocXml nicht automatisch neu — Aufrufer, die auf Server-seitig ergänzte Felder (z.B. zugewiesene NotificationId) zugreifen wollen, müssen nach Rückkehr explizit ReloadFromZedal() aufrufen.

WaitUntil(Func<DiwassDocumentHandlerBase, bool>, TimeSpan, TimeSpan)

Wartet auf ein Server-Update, indem das Dokument zyklisch aus ZEDAL neu geladen wird. Typische Use-Cases:

  • Nach SendToDiwass() warten, bis DIWASS Rückmeldungen ins Dokument geschrieben hat.
  • Auf einen erwarteten Statuswechsel / FollowupIntent warten.