Direkt zum Hauptinhalt

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.

  1. 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
  2. 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
  3. 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
  4. 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 SMTP-Konto Einstellungen

E-Mail Einstellungen E-Mail-Einstellungen für einen Workflow

Mail-Template 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.

  1. Beleg-Überwachung

    • Der Dienst überwacht Bestelldateizeilen (z.B. Auftragspositionen)
    • Filterkriterien bestimmen, welche Zeilen verarbeitet werden
    • Unterstützt verschiedene Belegarten (Angebote, Aufträge, Lieferscheine, Rechnungen)
  2. Duplikats-Prüfung

    • Jede Zeile wird über Kontonummer, Laufnummer und Zeilennummer identifiziert
    • Bereits verarbeitete Zeilen werden übersprungen
    • Protokollierung verhindert Mehrfachverarbeitung
  3. 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
  4. 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
  5. 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
  6. 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:

  1. 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
  2. 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.
  3. Ü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.

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. Änderungserkennung (Optional)

    • Aktivierbar über EnableChangeDetection in 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
  9. 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 Deleted und DeletedOn für Nachverfolgung

Voraussetzungen:

Für die Graph API Integration werden folgende Voraussetzungen benötigt:

  1. 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 Terminen
      • User.Read.All - Zum Abrufen von Benutzer-eMail-Adressen
  2. Admin Consent:

    • Die konfigurierten Permissions benötigen Admin Consent
    • Ein Administrator mit entsprechenden Berechtigungen muss die Zustimmung erteilen
  3. 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

  1. Öffnen Sie das Microsoft Entra Admin Center
  2. Navigieren Sie zu: Identity → Applications → App registrations
  3. Klicken Sie auf: New registration
  4. Tragen Sie folgende Werte ein:
    • Name: Mesonic CRM Integration
    • Supported account types: Accounts in this organizational directory only (Single tenant)
    • Redirect URI: Leer lassen
  5. Klicken Sie auf: Register

Schritt 2: Wichtige IDs notieren

  1. Öffnen Sie in der erstellten App die Seite: Overview
  2. 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)

  1. Navigieren Sie zu: Certificates & secrets

  2. Unter "Client secrets" klicken Sie auf: New client secret

  3. Konfigurieren Sie das Secret:

    • Description: MesonicCRMIntegration-Secret
    • Expires: Nach interner Sicherheitsvorgabe (z. B. 6 oder 12 Monate)
  4. Klicken Sie auf: Add

  5. Wichtig: Kopieren Sie den Wert aus der Spalte "Value" sofort in einen sicheren Passwortspeicher

    ⚠️ Hinweis: Der Secret-Wert wird nur einmal angezeigt und kann später nicht mehr abgerufen werden.

Schritt 4: API-Berechtigungen hinzufügen (Microsoft Graph)

  1. Navigieren Sie zu: API permissions
  2. Klicken Sie auf: Add a permission
  3. Wählen Sie: Microsoft Graph
  4. Wählen Sie: Application permissions (nicht Delegated permissions)
  5. Fügen Sie folgende Berechtigungen hinzu:
    • Calendars.ReadWrite - Ermöglicht das Erstellen und Aktualisieren von Kalenderterminen
    • User.Read.All - Ermöglicht das Abrufen von Benutzerinformationen (eMail-Adressen)
  6. Klicken Sie auf: Add permissions

Schritt 5: Administratorzustimmung erteilen (Admin Consent)

  1. Bleiben Sie auf der Seite: API permissions
  2. Klicken Sie auf: Grant admin consent for [Ihr Organisationsname]
  3. Bestätigen Sie die Aktion mit: Yes
  4. Ü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.

  1. 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
  2. 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

      Abfrage der offenen Posten aus der WinLine FIBU-Tabelle T019 Filterung nach Kontoart (Debitoren, Kreditoren oder beide) Optionale Einschränkung auf bestimmte Kontobereiche Konfigurierbare Fälligkeits- und Mahnstufenfilter

      Kundengruppierung

        Offene Posten werden nach Kundenkontonummer gruppiert Kundenstammdaten (Name, Adresse, E-Mail) werden aus dem Kontenstamm angereichert Zusammenfassung mit Gesamtbetrag und Anzahl überfälliger Posten pro Kunde

        Empfänger-Ermittlung

          Mehrstufige Empfängerermittlung mit Fallback-Logik:
            Rechnungs-E-Mail-Adresse des Kunden Kunden-E-Mail-Adresse Kundenkontakt Mahnempfänger (über erweiterte Empfängerregeln) Statische Empfänger Konfigurierbar über die OpenItemSettings in der Administrationsoberfläche

            E-Mail-Erstellung

              Drei Template-Optionen (nach Priorität):
                HTML-Editor-Vorlage (HtmlMailTemplate) RichText-MailMerge-Vorlage (MailTemplate) WinLine-Textbaustein (OverrideTextBlocknumber) Standard-Template als Fallback Platzhalter für OP- und Kundendaten (vollständige Referenz siehe unten)
                  {{#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

                    Originalrechnungen aus dem Archiv: Anhängen von Belegen aus MesoArchivWeb (konfigurierbar über Archivformular-IDs) OP-Blatt aus der FIBU als PDF: Automatischer Download des OP-Blatts über den WinLine Server Report-Service (/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

                      Direktversand über konfigurierte SMTP-Konten Entwurfsmodus (SaveMailsAsDraft): Mails werden als EML-Datei im Postausgang (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:

                      Einstellung Beschreibung AccountType Debitoren, Kreditoren oder beide OnlyDueItems Nur fällige Posten berücksichtigen MinOverdueDays Mindestanzahl überfälliger Tage MinDunningLevel Mindest-Mahnstufe CustomerFilter Optionaler DevExpress-Filterausdruck auf den Kontenstamm OpenItemFilter Optionaler DevExpress-Filterausdruck auf die offenen Posten

                      Anhang-Optionen:

                      Einstellung Beschreibung AttachOriginalInvoice Originalrechnung aus dem Archiv anhängen AttachArchiveFormIds Archivformulare, deren Belege angehängt werden sollen AttachOpenItemList OP-Blatt als PDF vom WinLine Server anhängen OpenItemListFormId Alternative Formular-ID für das OP-Blatt (optional, 0 = Standard-Formular)

                      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}}):

                      Platzhalter Beschreibung {{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):

                      Platzhalter Beschreibung {{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):

                      Platzhalter Beschreibung {{Beleg.xxx}} Zugriff auf Eigenschaften des BestelldateiKopf-Objekts (z.B. {{Beleg.Rechnungsnummer}}, {{Beleg.Endbetrag}})
                      Platzhalter Beschreibung {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:

                      Platzhalter Beschreibung {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:

                        WinLine FIBU mit offenen Posten in Tabelle T019 Optional: MesoArchivWeb für Archiv-Anhänge (Konfiguration unter 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.

                        1. 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)
                        2. 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
                        3. 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
                        4. 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)