Hauptkomponenten
MesoWorkerService besteht aus vierfünf Hauptkomponenten, die jeweils spezifische Aufgaben automatisch ausführen. Jede Komponente läuft als geplanter Job mit konfigurierbaren Zeitplänen.
Mail-Dienst
Funktion: Automatischer E-Mail-Versand basierend auf Workflow-Ereignissen in WinLine
Ausführung: AlleJede 30 SekundenSekunde (konfigurierbar über Quartz__MailWorkerJob__scheduler)
Funktionsweise:
Der Mail-Dienst überwacht kontinuierlich WinLine-Workflows und versendet automatisch E-Mails, wenn bestimmte Kriterien erfüllt sind.
-
Workflow-Prüfung
- Der Dienst ruft Workflows aus WinLine ab, die den konfigurierten Filterkriterien entsprechen
- Filter können zeitbasiert sein (z.B. nur Workflows der letzten 24 Stunden)
- Zusätzliche Filterkriterien ermöglichen detaillierte Selektion
-
Empfänger-Ermittlung
- Das System ermittelt automatisch die richtigen Empfänger basierend auf hierarchischen Regeln
- Unterstützt Kunden, Ansprechpartner, Vertriebsmitarbeiter und statische Empfänger
- Fallback-Mechanismen sorgen dafür, dass immer ein Empfänger gefunden wird
-
E-Mail-Erstellung
- Mail-Texte werden aus Vorlagen generiert
- Platzhalter werden automatisch durch echte Workflow-Daten ersetzt
- Anhänge werden aus Workflows und Belegen zusammengestellt
-
Versand und Protokollierung
- E-Mails werden über konfigurierte SMTP-Konten versendet
- Jeder Versand wird im Mail-Journal protokolliert
- Bei Fehlern werden Administratoren benachrichtigt
Konfiguration:
Mail-Einstellungen werden pro Mandant in der Administrationsoberfläche konfiguriert. Details zur Konfiguration finden Sie im Abschnitt Mail-Dienst Konfiguration.
Screenshots:
SMTP-Konto Einstellungen
E-Mail-Einstellungen für einen Workflow
Mail-Vorlage mit Platzhaltern
Workflow-Erzeugung aus Bestelldateizeilen
Funktion: Automatische Erstellung von CRM-Fällen aus Bestelldateizeilen
Ausführung: Alle 5 Minuten (konfigurierbar über Quartz__OrderLineWorkerJob__scheduler)
Funktionsweise:
Dieser Dienst ermöglicht es, aus Bestelldateizeilen in WinLine automatisch CRM-Fälle zu erzeugen. Dies ist besonders nützlich für wiederkehrende Serviceaufträge oder projektbasierte Tätigkeiten.
-
Beleg-Überwachung
- Der Dienst überwacht Bestelldateizeilen (z.B. Auftragspositionen)
- Filterkriterien bestimmen, welche Zeilen verarbeitet werden
- Unterstützt verschiedene Belegarten (Angebote, Aufträge, Lieferscheine, Rechnungen)
-
Duplikats-Prüfung
- Jede Zeile wird über Kontonummer, Laufnummer und Zeilennummer identifiziert
- Bereits verarbeitete Zeilen werden übersprungen
- Protokollierung verhindert Mehrfachverarbeitung
-
Workflow-Erstellung
- Für jede relevante Zeile wird automatisch ein CRM-Fall erstellt
- Workflow-Felder werden aus Belegdaten befüllt (Kurzbeschreibung, Langbeschreibung, Datumsfelder)
- Template-basierte Textgenerierung mit Platzhaltern
-
Optionale Fall-ID-Speicherung
- Die erzeugte Fall-ID kann in eine benutzerdefinierte Spalte der Belegzeile geschrieben werden
- Ermöglicht Rückverfolgung von Beleg zu CRM-Fall
-
Verknüpfung mit Beleg-Workflow
- Beleg-Workflow als Elternfall verknüpfen: Verknüpft die erzeugten Belegzeilen-Workflows mit dem übergeordneten Beleg-Workflow als Tochter-Fälle
- Warte auf Beleg-Workflow (NEU): Verhindert die Erzeugung von Belegzeilen-Workflows, bis ein Beleg-Workflow existiert
- Wenn aktiviert, werden Belegzeilen nur verarbeitet, wenn bereits ein Workflow für den Beleg (Angebot, Auftrag, Lieferschein oder Rechnung) vorhanden ist
- Nicht verarbeitete Zeilen werden beim nächsten Job-Lauf erneut geprüft
- Nützlich für sequentielle Workflow-Erzeugung: erst Beleg-Workflow, dann Zeilen-Workflows
-
Anhänge anfügen
- Beleg-Dokument anfügen: Fügt das Beleg-PDF aus der ArchivId der Belegstufe an (z.B. ArchivIdAngebot, ArchivIdAuftrag, ArchivIdLieferschein, ArchivIdFaktura)
- Beleg-Anhänge anfügen: Fügt alle Beleganhänge aus der DokumentenId des Belegs als Anhänge zum CRM-Fall hinzu
- Übergeordnete Fall-Anhänge: Kopiert Anhänge vom übergeordneten CRM-Fall, wenn LinkVoucherWorkflowAsParent aktiviert ist
- Alle Anhänge werden automatisch als CrmUploads-Einträge gespeichert
- Duplikate werden erkannt und übersprungen
Datumsfeldkonfiguration:
Der Dienst unterstützt zwei Datumsvarianten:
- Standard: Lieferdatum und bestätigtes Lieferdatum
- Kalender: Kalender-Startdatum und Kalender-Enddatum
Das Enddatum kann über verschiedene Modi berechnet werden:
- Bestätigtes Lieferdatum
- Lieferdatum
- Lieferdatum plus Zeitversatz
- Lieferdatum plus Stunden aus Menge
- NULL (kein Enddatum)
Platzhalter in Vorlagen:
Vorlagen unterstützen Platzhalter für Belegdaten. Eine vollständige Übersicht aller verfügbaren Eigenschaften finden Sie in der BestelldateiMitte-Klassendokumentation.
Zeilenebene:
{Artikelnummer},{Bezeichnung},{Menge},{Einzelpreis},{Gesamtwert}{Lieferdatum},{BestaetigtesLieferdatum}{Projektnummer},{Vertreternummer},{Kostenstelle}
Belegebene:
{BestelldateiKopf.Auftragsnummer},{BestelldateiKopf.Belegnummer}{BestelldateiKopf.Belegart},{BestelldateiKopf.Datum}{BestelldateiKopf.Konto.Name},{BestelldateiKopf.Konto.Adresse.Ort}
Formatierung:
{Lieferdatum:dd.MM.yyyy}- Datum formatiert{Einzelpreis:C2}- Währung mit 2 Dezimalstellen{Menge:N0}- Zahl ohne Dezimalstellen
Hinweis: Für eine vollständige Übersicht aller verfügbaren Formatierungsoptionen (RTF-Konvertierung, Prefix/Suffix, etc.) siehe Formatangaben für Platzhalter.
Beispiel Kurzbeschreibung:
{BestelldateiKopf.Auftragsnummer}: {Artikelnummer} {Bezeichnung}
Ergebnis: AUF-12345: ART001 Premium-Widget
Konfiguration:
Workflow-Erzeugungseinstellungen werden pro Mandant in der Administrationsoberfläche konfiguriert. Für Details zu Platzhaltern und Formatierung siehe Formatangaben für Platzhalter.
Anhangsverwaltung:
Die folgenden Optionen stehen zur Verfügung, um Dokumente automatisch an die erzeugten CRM-Fälle anzufügen:
-
Beleg-Dokument anfügen (AttachVoucherDocument)
- Fügt das Hauptdokument des Belegs aus der ArchivId der entsprechenden Belegstufe an
- Unterstützt alle Belegarten: Angebot (ArchivIdAngebot), Auftrag (ArchivIdAuftrag), Lieferschein (ArchivIdLieferschein), Rechnung (ArchivIdFaktura)
- Das Dokument wird als PDF aus dem Archiv geladen
-
Beleg-Anhänge anfügen (AttachVoucherAttachments)
- Fügt alle zusätzlichen Anhänge des Belegs aus der DokumentenId an
- Lädt alle zum Beleg gehörenden Dokumente über ArchivBusiness.LadeBelegDokumenteAsync
- Besonders nützlich für zusätzliche Unterlagen wie Lieferscheine, Zertifikate, etc.
-
Übergeordnete Fall-Anhänge anfügen (AttachParentWorkflowAttachments)
- Kopiert alle Anhänge vom übergeordneten CRM-Fall
- Funktioniert nur in Verbindung mit "LinkVoucherWorkflowAsParent"
- Ermöglicht die Vererbung von Dokumenten entlang der Belegkette (Angebot → Auftrag → Lieferschein → Rechnung)
Wichtige Hinweise zur Anhangsverwaltung:
- Alle Anhänge werden als CrmUploads-Einträge im CRM-System gespeichert
- Duplikate werden automatisch erkannt und nicht erneut angehängt
- Die Dokumentenkonvertierung (SPL → PDF) erfolgt automatisch über den MesospoolService
- Bei Fehlern werden detaillierte Log-Einträge erstellt, ohne die Workflow-Erstellung zu unterbrechen
Terminsynchronisation
Funktion: Automatische Erstellung von Kalender-Terminen aus CRM-Einträgen über MS Graph API
Ausführung: Alle 10 Minuten (konfigurierbar über Quartz__AppointmentWorkerJob__scheduler)
Funktionsweise:
Dieser Dienst ermöglicht es, aus CRM-Einträgen (Workflows) in WinLine automatisch Termine in Microsoft Exchange/Outlook-Kalendern zu erstellen. Die Termine werden über die Microsoft Graph API direkt in den persönlichen Kalendern der Empfänger angelegt.
-
CRM-Einträge-Auswahl
- Der Dienst überwacht konfigurierte Workflows
- Flexible Filterkriterien für präzise CRM-Eintrags-Selektion
- Nur noch nicht verarbeitete Einträge werden berücksichtigt
-
Datumsfeld-Ermittlung
- Wählbare Datumsfelder aus CRM:
- Start-/Enddatum (C006/C007)
- Kalenderstart-/-enddatum (C031/C032)
- Eskalationsdatum (C018)
- Erfassungsdatum (C005)
- Optional: Zeitdauer-Addition zu ermittelten Datumsfeldern
- Ganztags-Option steuerbar über konfigurierbare CRM-Eigenschaft
- Wählbare Datumsfelder aus CRM:
-
Empfänger-Ermittlung
- Flexible Kombination mehrerer Empfänger-Quellen:
- Verfassender Benutzer: Ersteller des Workflows
- Delegiert an Benutzer: Zuständiger Benutzer
- Delegiert an Gruppe: Alle Mitglieder der zugewiesenen Gruppe
- XRM-Einträge: Alle unterstützten Typen aus CrmMehrfacheinträgen
- XRM-Einträge (Benutzer): Nur Benutzer (Typeeigenschaft = 99)
- XRM-Einträge (Gruppe): Nur Gruppen (Typeeigenschaft = 101)
- XRM-Einträge (Konto): Nur Konten (Typeeigenschaft = 1)
- XRM-Einträge (Kontakt): Nur Kontakte (Typeeigenschaft = 6)
- XRM-Einträge (Vertreter): Nur Vertreter (Typeeigenschaft = 51)
- Vertreter: Vertreter des zuständigen Benutzers (Incidence.Vertreter)
- Kunde: Kundenkonto (Incidence.Kundenkonto)
- Händler: Händlerkonto (Incidence.Haendlerkonto)
- Kontakt Kunde: Kundenkontakt (Incidence.KontaktKunde)
- Kontakt Händler: Händlerkontakt (Incidence.KontaktHaendler)
- Duplikate werden automatisch entfernt
- Flexible Kombination mehrerer Empfänger-Quellen:
-
Termin-Inhalt
- Betreff und Body mit VariableReplacementService
- Unterstützt Platzhalter wie
{{Fall.Kurzbeschreibung}},{{Fall.Beschreibung}} - Vollständige Formatierungsmöglichkeiten verfügbar (siehe Formatangaben für Platzhalter)
- HTML-Formatierung für Body möglich
- Optional: Fall-Anhänge mit Filterung nach Archiv-Formular-ID
-
Termin-Erstellung
- Termine werden über MS Graph API in persönlichen Kalendern erstellt
- Pro Empfänger ein separater Termin
- Authentifizierung über Azure AD Client Credentials (App-only)
- Journal-Protokollierung mit Graph Event ID für Nachverfolgung
-
Rücksynchronisation (Optional)
- Änderungen an Terminen in Exchange können zurück in CRM synchronisiert werden
- Nur verfügbar wenn CRM-Eintrag zu einem einzelnen Termin führte
- Konfigurierbar mit Zeithorizont (z.B. 7 Tage)
- Synchronisiert Änderungen an:
- Datum (Start/Ende) → entsprechende CRM-Datumsfelder
- Betreff → Kurzbeschreibung
- Body → Beschreibung
-
Folgeschritte-Unterstützung
- CRM-Workflows können aus mehreren Schritten bestehen (Id > 0 mit verschiedenen Schrittnummern)
- Bereits erstellte Termine für einen Fall werden unabhängig von der Schrittnummer erkannt
- Bei Folgeschritten werden bestehende Termine automatisch erkannt:
- Gleicher Empfänger: Termin wird aktualisiert (bei aktivierter Änderungserkennung)
- Neuer Empfänger: Neuer Termin wird erstellt
- Journal-Einträge verweisen auf die aktuelle Schrittnummer
- Ermöglicht das Verschieben von Terminen über nachfolgende Workflow-Schritte
-
Änderungserkennung (Optional)
- Aktivierbar über
EnableChangeDetectionin den AppointmentSettings - Prüft ob sich termin-relevante Felder geändert haben:
- Datum (Start/Ende)
- Betreff
- Body
- Empfänger
- Aktualisiert bestehende Termine bei Änderungen
- Erstellt neue Termine für neu hinzugekommene Empfänger
- Verhindert Duplikate bei unveränderter Daten
- Aktivierbar über
-
Automatisches Löschen von Terminen (Optional)
- Termine können automatisch verhindert oder gelöscht werden, wenn bestimmte Bedingungen erfüllt sind
- Zwei Löschbedingungen stehen zur Verfügung (einzeln oder kombiniert):
- DeleteProperty: Eigenschaft die angibt, dass der Termin nicht erstellt werden soll
- DeleteFilter: Filterkriterium zur Ermittlung welche Termine nicht erstellt werden sollen
- Prävention vor Erstellung: Löschbedingungen werden VOR der Terminerstellung geprüft - Termine die Bedingungen erfüllen werden gar nicht erst angelegt (Performance-Optimierung)
- Nachträgliche Löschung: Bereits erstellte Termine werden gelöscht wenn:
- Löschbedingungen nachträglich konfiguriert wurden
- CRM-Daten nach Terminerstellung geändert wurden (z.B. Eigenschaft nachträglich gesetzt)
- Löschung erfolgt pro Empfänger einzeln über die Graph API
- Journal-Protokollierung mit
DeletedundDeletedOnfür Nachverfolgung
Voraussetzungen:
Für die Graph API Integration werden folgende Voraussetzungen benötigt:
-
Microsoft Entra ID App Registration:
- Eine registrierte App in Microsoft Entra ID (ehemals Azure AD)
- Client ID und Tenant ID
- Client Secret zur Authentifizierung
- Konfigurierte Application Permissions:
Calendars.ReadWrite- Zum Erstellen/Aktualisieren von TerminenUser.Read.All- Zum Abrufen von Benutzer-eMail-Adressen
-
Admin Consent:
- Die konfigurierten Permissions benötigen Admin Consent
- Ein Administrator mit entsprechenden Berechtigungen muss die Zustimmung erteilen
-
Microsoft 365 Lizenzen:
- Benutzer benötigen Microsoft 365 / Exchange Online Postfächer
- Kalender müssen für die betroffenen Benutzer verfügbar sein
Schritt-für-Schritt-Anleitung: Microsoft Entra ID App-Registrierung erstellen
Diese Anleitung beschreibt die Erstellung einer App-Registrierung in Microsoft Entra ID für eine serverseitige Integration (App-only), welche Microsoft Graph verwendet.
Erforderliche Berechtigungen:
- Entra Administrator-Rolle oder entsprechende Berechtigungen zum Erstellen von App-Registrierungen
- Berechtigung zur Erteilung der Administratorzustimmung (Admin Consent)
Schritt 1: App registrieren
- Öffnen Sie das Microsoft Entra Admin Center
- Navigieren Sie zu: Identity → Applications → App registrations
- Klicken Sie auf: New registration
- Tragen Sie folgende Werte ein:
- Name:
Mesonic CRM Integration - Supported account types:
Accounts in this organizational directory only (Single tenant) - Redirect URI: Leer lassen
- Name:
- Klicken Sie auf: Register
Schritt 2: Wichtige IDs notieren
- Öffnen Sie in der erstellten App die Seite: Overview
- Notieren Sie folgende Werte für die spätere Konfiguration:
- Application (client) ID
- Directory (tenant) ID
Diese Werte werden später in den Graph API Settings im MesoWorkerService benötigt.
Schritt 3: Anmeldeinformation erstellen (Client Secret)
Schritt 4: API-Berechtigungen hinzufügen (Microsoft Graph)
Schritt 5: Administratorzustimmung erteilen (Admin Consent)
- Bleiben Sie auf der Seite: API permissions
- Klicken Sie auf: Grant admin consent for [Ihr Organisationsname]
- Bestätigen Sie die Aktion mit: Yes
- Überprüfen Sie, dass in der Spalte "Status" bei beiden Berechtigungen ein grüner Haken mit "Granted for [Organisationsname]" angezeigt wird
Schritt 6: Werte für die Konfiguration zusammenstellen
Stellen Sie sicher, dass folgende Werte dokumentiert und sicher aufbewahrt wurden:
- Client ID (Application ID)
- Tenant ID (Directory ID)
- Client Secret (Value)
Diese Werte werden im nächsten Schritt in den Graph API Settings im MesoWorkerService hinterlegt.
Sicherheitsempfehlungen:
- Bewahren Sie das Client Secret ausschließlich in sicheren Passwortspeichern oder Secrets-Management-Systemen auf (z. B. Azure Key Vault)
- Dokumentieren Sie das Ablaufdatum des Secrets und implementieren Sie einen Prozess zur rechtzeitigen Erneuerung
- Verwenden Sie in Produktivumgebungen idealerweise Azure Key Vault zur Speicherung der Secrets
- Vermeiden Sie die Speicherung von Secrets in Quellcode, Konfigurationsdateien oder Datenbanken
- Implementieren Sie eine regelmäßige Rotation der Client Secrets (empfohlen: alle 6-12 Monate)
Konfiguration:
Termin-Einstellungen werden pro Mandant in der Administrationsoberfläche konfiguriert. Für Details zu Platzhaltern und Formatierung in Subject Template und Body Template siehe Formatangaben für Platzhalter.
-
Graph API Settings: Erstellen Sie zunächst wiederverwendbare Graph API Zugangsdaten unter "Graph API Settings"
- Name: Bezeichnung für die Zugangsdaten (z.B. "Production Graph API")
- Client ID: Azure AD Application ID
- Tenant ID: Azure AD Directory ID
- Client Secret: Azure AD Client Secret
-
Appointment Settings: Konfigurieren Sie dann die Termin-Einstellungen unter "Appointment Settings"
- Graph API Settings: Wählen Sie die zuvor erstellten Graph API Zugangsdaten
- Date Field Type: Welches CRM-Datumsfeld verwendet werden soll
- Duration To Add: Optional: Zeitdauer die zum Datum addiert wird
- Recipient Sources: Kombination der Empfänger-Quellen (Mehrfachauswahl)
- Enable Back Sync: Rücksynchronisation aktivieren
- Back Sync Time Horizon: Zeithorizont für Rücksynchronisation (z.B. 7 Tage)
- Delete Property: Optional: Eigenschaft die steuert ob Termine gelöscht werden sollen
- Delete Filter: Optional: Filterkriterium zur Ermittlung zu löschender Termine
Vorteil: Die Graph API Zugangsdaten können für mehrere Termin-Einstellungen wiederverwendet werden.
Beispiel-Setup:
Graph API Settings:
Name: "Production Graph API"
Client ID: "12345678-1234-1234-1234-123456789012"
Tenant ID: "87654321-4321-4321-4321-210987654321"
Client Secret: "***************"
Appointment Settings:
Name: "Service-Termine"
Graph API Settings: → "Production Graph API"
Date Field Type: CalendarStartEndDate
Duration To Add: 01:00:00 (1 Stunde)
Recipient Sources: DelegatedToUser + DelegatedToGroup
Subject Template: "Service: {{Fall.Kurzbeschreibung}}"
Body Template: "<p>Beschreibung: {{Fall.Beschreibung}}</p>"
Enable Back Sync: true
Back Sync Time Horizon: 7.00:00:00 (7 Tage)
Delete Property: → "Termin löschen" (Eigenschaft 999)
Delete Filter: → Filter für "Stornierte Aufträge"
Beispiel für Löschbedingungen:
Die Löschbedingungen werden OR-verknüpft - das heißt, wenn entweder die Eigenschaft vorhanden ist ODER der Filter zutrifft, wird der Termin gelöscht:
DeleteProperty: Eigenschaft "Termin storniert" (Nummer 150)
→ Wenn diese Eigenschaft im CRM-Fall gesetzt ist, wird der Termin gelöscht
DeleteFilter: "c017 = 101 AND c004 = -2"
→ Alle Fälle des Workflows 101 mit Status -2 (storniert) werden gelöscht
Anwendungsfälle für Terminlöschung:
- Stornierte Aufträge: Automatisches Löschen von Terminen bei Auftragsstornierung
- Status-Änderungen: Termine löschen wenn Fall-Status auf "abgeschlossen" oder "storniert" wechselt
- Eigenschafts-basiert: Flexibles Löschen über frei definierbare CRM-Eigenschaften
- Filter-basiert: Komplexe Löschbedingungen über CRM-Filterkriterien
Sicherheitshinweis:
Das Client Secret sollte sicher verwahrt werden. Verwenden Sie idealerweise:
- Azure Key Vault für Production-Umgebungen
- Umgebungsvariablen statt hardcoded in der Datenbank
- Regelmäßige Rotation der Secrets
Offene Posten (OP-Versand)
Funktion: Automatischer Versand von Offene-Posten-Übersichten und Mahnungen an Kunden
Ausführung: Täglich um 7:00 Uhr (konfigurierbar über Quartz__OpenItemWorkerJob__scheduler)
Funktionsweise:
Der OP-Dienst ermittelt offene Posten aus der WinLine FIBU (Tabelle T019), gruppiert diese nach Kunden und versendet konfigurierbare E-Mails mit OP-Übersichten. So können Zahlungserinnerungen und Mahnungen automatisiert an Kunden gesendet werden.
OP-Ermittlung
Kundengruppierung
Empfänger-Ermittlung
E-Mail-Erstellung
{{#OP}}...{{/OP}} — Wiederholungsbereich pro offener Posten
{{OP.xxx}} — OP-Felder, {{Kunde.xxx}} — Kundenstamm-Felder
{{Beleg.xxx}} — Belegdaten, {ArchivLinkExt:...} — Archiv-Links
{SALUTATION} / ##Empfaenger## — Empfängerspezifische Anrede
Anhänge
/ewlservice/reports) als PDF-Anhang. Optional kann über OpenItemListFormId ein alternatives Formular angegeben werden. Der Download wird mit PDF-Validierung (Magic-Bytes-Prüfung) abgesichert.
Versand und Journal
QueuedMail) gespeichert. Der Benutzer kann die Mails in der Administrationsoberfläche prüfen, bearbeiten oder ignorieren. Der MailQueueProcessor versendet freigegebene Mails (Draft=false) automatisch und aktualisiert den OpenItemJournal-Eintrag.
OpenItemJournal-Eintrag pro Versand mit Status (Sent/Error/Ignored), Fehlermeldung und EML-Datei
Sendeintervall (SendIntervalDays): Verhindert Mehrfachversand an denselben Kunden innerhalb eines konfigurierbaren Zeitraums
Ignorieren-Flag: Manuelles Unterdrücken einzelner Kunden im Journal oder Postausgang
Selektionskriterien:
Anhang-Optionen:
Platzhalter-Referenz:
Innerhalb der OP-Vorlagen stehen folgende Platzhalter zur Verfügung. Alle Platzhalter unterstützen optionale Formatangaben (z.B. :C2, :dd.MM.yyyy) — siehe Formatangaben für Platzhalter.
Wiederholungsbereich:
Der Block {{#OP}}...{{/OP}} wird pro offener Posten wiederholt. Innerhalb dieses Blocks stehen die {{OP.xxx}}-Platzhalter zur Verfügung.
OP-Platzhalter (innerhalb {{#OP}}...{{/OP}}):
{{OP.BelegNr}} / {{OP.Belegnummer}}
Belegnummer
{{OP.BuchungsNr}} / {{OP.Buchungsnummer}}
Buchungsnummer (z.B. "10001-RE202600032")
{{OP.Betrag}}
Ursprünglicher Betrag
{{OP.Restbetrag}}
Offener Restbetrag (berechnet)
{{OP.ZahlungBetrag}} / {{OP.Bezahlt}} / {{OP.Teilzahlung}}
Bereits bezahlter Betrag
{{OP.Skontobetrag}}
Skontobetrag
{{OP.BetragWaehrung}}
Betrag in Fremdwährung
{{OP.Waehrung}} / {{OP.Buchungstext}}
Währung
{{OP.Buchungsdatum}}
Buchungsdatum
{{OP.Rechnungsdatum}} / {{OP.ReDatum}}
Rechnungsdatum
{{OP.Faelligkeit}} / {{OP.Fälligkeitsdatum}}
Fälligkeitsdatum
{{OP.ZahlungszielTage}}
Zahlungsziel in Tagen
{{OP.TageUeberfaellig}} / {{OP.Tageüberfällig}}
Überfällige Tage (berechnet)
{{OP.Mahnstufe}}
Aktuelle Mahnstufe
{{OP.BuchungsArt}} / {{OP.Buchungsartid}}
Buchungsart-ID (0=Rechnung, 2=Gutschrift)
{{OP.BuchungsArtText}}
Buchungsart als Text ("Rechnung", "Gutschrift", etc.)
{{OP.Kontonummer}}
Kontonummer
{{OP.Status}}
Status
Zusätzlich kann über die XPO-Objektnavigation auf verschachtelte Eigenschaften des OffenePosten-Objekts zugegriffen werden (z.B. {{OP.Personenkonto.Name}}).
Kunden-Platzhalter (überall in der Vorlage verfügbar):
{{Kunde.Name}} / {{Kunde.Kundenname}} / {{Kunde.Kontoname}}
Kundenname
{{Kunde.Kontonummer}} / {{Kunde.Konto}}
Kontonummer
{{Kunde.Email}} / {{Kunde.EmailAdresse}}
E-Mail-Adresse
{{Kunde.RechnungsEmail}} / {{Kunde.RechnungsversandEMailAdresse}}
Rechnungsversand-E-Mail
{{Kunde.AnsprechpartnerName}} / {{Kunde.Ansprechpartner}}
Ansprechpartner
{{Kunde.AnsprechpartnerEmail}}
E-Mail des Ansprechpartners
{{Kunde.GesamtOffen}} / {{Kunde.Offen}} / {{Kunde.Summe}} / {{Kunde.Total}}
Gesamter offener Betrag
{{Kunde.GesamtBrutto}} / {{Kunde.Brutto}}
Gesamter Bruttobetrag
{{Kunde.GesamtBezahlt}} / {{Kunde.Bezahlt}}
Gesamter bezahlter Betrag
{{Kunde.Anzahl}} / {{Kunde.Count}}
Anzahl offener Posten
{{Kunde.AnzahlUeberfaellig}} / {{Kunde.Anzahlüberfällig}}
Anzahl überfälliger Posten
{{Kunde.SummeUeberfaellig}} / {{Kunde.Summeüberfällig}}
Summe überfälliger Beträge
{{Kunde.AeltesteFaelligkeit}} / {{Kunde.Ältestefälligkeit}}
Ältestes Fälligkeitsdatum
{{Kunde.MaxTageUeberfaellig}} / {{Kunde.Maxtageüberfällig}} / {{Kunde.Maxtage}}
Maximale überfällige Tage
{{Kunde.Mesocomp}}
Mandant
Zusätzlich kann über die XPO-Objektnavigation auf verschachtelte Eigenschaften des ViewKontenstamm-Objekts zugegriffen werden (z.B. {{Kunde.Adresse.Strasse1}}, {{Kunde.FaktStamm.xxx}}).
Beleg-Platzhalter (innerhalb {{#OP}}...{{/OP}}, wenn ein passender Beleg existiert):
{{Beleg.xxx}}
Zugriff auf Eigenschaften des BestelldateiKopf-Objekts (z.B. {{Beleg.Rechnungsnummer}}, {{Beleg.Endbetrag}})
Archiv-Link-Platzhalter (innerhalb {{#OP}}...{{/OP}}):
{ArchivLinkExt:Faktura|text=Rechnung ansehen|stunden=720}
Externer Link zur archivierten Rechnung (zeitbegrenzt, kein Login nötig)
{ArchivLinkInt:Faktura|text=Rechnung ansehen}
Interner Link zur archivierten Rechnung (Login erforderlich)
Unterstützte Belegarten: Faktura, Auftrag, Lieferschein, Angebot oder eine numerische DokId. Optionale Parameter: text=..., stunden=... (nur Ext), prefix=..., suffix=....
Anrede-Platzhalter:
{SALUTATION} / {{SALUTATION}} / ##Empfaenger##
Empfängerspezifische Anrede
Standardformatierung: Dezimalwerte werden automatisch als N2 (z.B. "1.234,56"), Datumswerte als dd.MM.yyyy formatiert (Kultur: de-DE).
Beispiel-Vorlage:
<p>{SALUTATION}</p>
<p>nachfolgend finden Sie eine Übersicht Ihrer offenen Posten:</p>
<table>
<thead>
<tr>
<th>Beleg-Nr.</th><th>Datum</th><th>Fällig</th>
<th>Betrag</th><th>Bezahlt</th><th>Offen</th>
<th>Tage überf.</th><th>Mahnstufe</th>
</tr>
</thead>
<tbody>
{{#OP}}
<tr>
<td>{{OP.BelegNr}}</td>
<td>{{OP.Rechnungsdatum:dd.MM.yyyy}}</td>
<td>{{OP.Faelligkeit:dd.MM.yyyy}}</td>
<td>{{OP.Betrag:N2}} €</td>
<td>{{OP.ZahlungBetrag:N2}} €</td>
<td>{{OP.Restbetrag:N2}} €</td>
<td>{{OP.TageUeberfaellig}}</td>
<td>{{OP.Mahnstufe}}</td>
</tr>
{{/OP}}
</tbody>
<tfoot>
<tr>
<td colspan="5"><strong>Gesamt ({{Kunde.Anzahl}} Posten)</strong></td>
<td><strong>{{Kunde.GesamtOffen:N2}} €</strong></td>
<td colspan="2"></td>
</tr>
</tfoot>
</table>
<p>Bitte überweisen Sie den offenen Betrag von <strong>{{Kunde.GesamtOffen:C2}}</strong>.</p>
Voraussetzungen:
MesoArchivWeb in appsettings.json)
Optional: WinLine Server mit Report-Service (/ewlservice/reports) für OP-Blatt-Download als PDF (Konfiguration unter WinLineServer in appsettings.json)
Konfiguration:
OP-Einstellungen werden pro Mandant in der Administrationsoberfläche unter "OpenItemSettings" konfiguriert. Die Konfiguration umfasst sieben Registerkarten: Allgemein, Selektion, Vorlage, Empfänger, Versand, Anhänge und Antwort-An/Absender.
Überwachungsdienst
Funktion: Überwachung und Warnung bei fehlenden E-Mail-Versendungen
Ausführung: Täglich um 8:00 Uhr (konfigurierbar über Quartz__NoRuleWarningJob__scheduler)
Funktionsweise:
Der Überwachungsdienst hilft dabei, Probleme frühzeitig zu erkennen, die dazu führen, dass E-Mails nicht versendet werden, obwohl aktive Regeln vorhanden sind.
-
Workflow-Überwachung
- Prüft alle Workflows mit aktivierten Mail-Einstellungen
- Vergleicht CRM-Fälle mit tatsächlich versendeten E-Mails
- Berücksichtigt nur Fälle im konfigurierten Zeitraum (z.B. letzte 24 Stunden)
-
Grace Period
- Workflows, die jünger als die Grace Period sind, werden ignoriert
- Verhindert Fehlalarme für Workflows, die gerade verarbeitet werden
- Empfohlen: 15-20 Minuten
bei 30-Sekunden-Mail-Job-Intervall
-
Warnungs-E-Mail
- Bei fehlenden E-Mails wird eine Warnung an Administratoren gesendet
- Enthält detaillierte Liste aller betroffenen Fälle
- Inkl. Fall-ID, Workflow-Nummer, Kurzbeschreibung und Erstellungsdatum
-
Duplikats-Schutz
- Versendete Warnungen werden protokolliert
- Verhindert mehrfache Warnungen für denselben Fall
Einsatzszenarien:
- Fehlende Stammdaten: Kunde hat keine E-Mail-Adresse hinterlegt
- Fehlkonfiguration: Mail-Einstellungen sind nicht korrekt
- Restriktive Filter: Filterkriterien selektieren keine Fälle
- SMTP-Probleme: SMTP-Server ist nicht erreichbar
Konfiguration:
Überwachungseinstellungen werden pro Mandant in der Administrationsoberfläche unter "No Rule Warning Settings" konfiguriert.
Wichtige Einstellungen:
- LookbackPeriod: Zeitraum, wie weit zurück geprüft wird (z.B. 24 Stunden)
- GracePeriod: Mindestalterzeitspanne für Workflows (empfohlen: 15-20 Minuten)
- WarningRecipients: E-Mail-Adressen der Administratoren (kommagetrennt)