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
Fields
- MinTransferPollInterval
Untere Schranke für das Poll-Intervall in WaitForDiwassTransfer(TimeSpan, TimeSpan). Schützt den ZEDAL-Server davor, in zu engem Takt mit
GetTransferDetailsbelastet zu werden.
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. Liefertfalse, wenn die History leer ist (noch kein Versand) oder der letzte Eintrag erfolgreich war.
- HasValidationErrors
Convenience:
truewenn die letzte Mutation Validierungsfehler gemeldet hat.
- 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 gegenGetTransferDetailsverwendet.
- 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. Bleibtnullbei 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
GetDocumentkeine 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üngstenlast_changedgeladen, 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
GetTransferDetailsfür die in LastTransferLogId hinterlegte Transfer-Log-Id und kehrt zurück, sobald der Server einen terminalen Status meldet:RECEIVED_RECEIPT_POSITIVE→ erfolgreich.RECEIVED_RECEIPT_NEGATIVE→ wirft DiwassTransferFailedException mit Errors/Warnings.CANCELLED→ wirft DiwassTransferFailedException.
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.
- Nach