MESO-XPO Business

MesoXPO Framework

MESO-XPO Business

Überblick

Die MesoXPO Business Klassenbibliothek bietet eine Geschäftslogikschicht für die Integration mit der Mesonic WinLine. Sie enthält verschiedene Businessklassen, die grundlegende Funktionen für den Zugriff auf WinLine-Daten und -Funktionalitäten bereitstellen.

Installation & NuGet Feed

NuGet-Package-Feed

NuGet Packages (🔑 Zugangsdaten benötigt)

Konfiguration

  1. Füge den oben genannten Feed in Deiner nuget.config hinzu.

  2. Verwende als Benutzername MesoXPO.

  3. Verwende als Passwort den Personal Access Token (PAT), den Du im Rahmen Deiner Lizenzierung erhalten hast.

Beispiel nuget.config

<configuration> <packageSources> <add key="MesoXPO" value="https://nuget.pkg.github.com/CSS-EDV-Support/index.json" /> </packageSources> <packageSourceCredentials> <MesoXPO> <add key="Username" value="MesoXPO" /> <add key="ClearTextPassword" value="PERSONAL_ACCESS_TOKEN" /> </MesoXPO> </packageSourceCredentials> </configuration>

Anschließend kannst Du die Pakete wie gewohnt in Deine Projektdatei integrieren (z. B. via dotnet add package oder über Visual Studio).

MesoXPO.Business

Business-Logik-Bibliothek für Mesonic WinLine

Die MesoXPO.Business-Bibliothek bietet eine umfassende Sammlung von Business-Klassen und Helper-Funktionen für die Integration mit der Mesonic WinLine ERP-Software. Diese Bibliothek abstrahiert komplexe WinLine-Operationen und stellt eine benutzerfreundliche API für verschiedene Geschäftsprozesse zur Verfügung.

🆕 Neuerungen: Vollständige Dependency Injection-Unterstützung, optimierte Performance durch zentrale AutoMapper-Konfiguration und drastisch vereinfachte Projektkonfiguration bei 100% Rückwärtskompatibilität.

📚 Inhaltsverzeichnis

🏢 Business-Klassen

Alle Business-Klassen erben von der abstrakten Basisklasse SystemBasis und bieten drei Konstruktor-Varianten:

  • Mit SystemUnitOfWork

  • Mit IDataLayer

  • Mit Datenbankverbindungsparametern (Server, Port, Datenbank, Benutzer, Passwort)

WorkflowBusiness

Namespace: MesoXPO.Business.System
Zweck: Verwaltung von WinLine CRM Workflows

Die WorkflowBusiness-Klasse ist eine umfassende Lösung für die Workflow-Engine der WinLine und bietet Methoden zur Erstellung, Verwaltung und Abfrage von Workflows und Fällen.

🔧 Hauptmethoden

Methode

Beschreibung

Parameter

Rückgabe

Methode

Beschreibung

Parameter

Rückgabe

FaelleAlsQueryable(string mesocomp)

Liefert alle Fälle als IQueryable für weitere LINQ-Operationen

mesocomp: Mandant

IQueryable<FallDto>

ErzeugeFall(ErzeugeFallAnhandFeldliste fallAnhandFelder, WebServiceParameter parameter)

Erstellt einen neuen Fall anhand einer Feldliste

Falldaten und WebService-Parameter

ErzeugterFall

ExportiereFaelleMitVorlage(ExportiereFaelleMitVorlageParameter parameterFallExport, WebServiceParameter parameter)

Exportiert Fälle mit einer bestimmten Vorlage

Export-Parameter und WebService-Parameter

XmlDocument

ExportiereFaelleAlsJson(ExportiereFaelleMitVorlageParameter parameterFallExport, WebServiceParameter parameter)

Exportiert Fälle als JSON

Export-Parameter und WebService-Parameter

string (JSON)

ErzeugeFallAnhang(int fallId, int schrittnummer, ErzeugeDokument dokument, string mandant)

Erstellt einen Anhang für einen bestehenden Fall

Fall-ID, Schrittnummer, Dokument, Mandant

ErzeugtesDokument

💡 Verwendungsbeispiel

Mit Dependency Injection (Empfohlen):

// Service-Registrierung services.AddMesoXPOBusiness(); // In Ihrem Controller/Service public class WorkflowController : ControllerBase { private readonly WorkflowBusiness _workflowBusiness; public WorkflowController(WorkflowBusiness workflowBusiness) { _workflowBusiness = workflowBusiness; } [HttpPost] public async Task<IActionResult> CreateCase(CreateCaseRequest request) { var fallFelder = new ErzeugeFallAnhandFeldliste( vorlagenId: 30, fallWerte: new List<VorlageFeldwert> { new() { View = 170, Var = 9, Value = request.Kontonummer }, new() { View = 170, Var = 18, Value = request.Beschreibung } } ); var neuerFall = _workflowBusiness.ErzeugeFall(fallFelder, webServiceParameter); return Ok(neuerFall); } }

Legacy-Muster (Weiterhin unterstützt):

// Workflow-Business manuell initialisieren var workflowBusiness = new WorkflowBusiness(systemUnitOfWork, logger); // Neuen Fall erstellen var fallFelder = new ErzeugeFallAnhandFeldliste( vorlagenId: 30, fallWerte: new List<VorlageFeldwert> { new() { View = 170, Var = 9, Value = "10001" }, new() { View = 170, Var = 18, Value = "Test Fall" } } ); var neuerFall = workflowBusiness.ErzeugeFall(fallFelder, webServiceParameter);

ArchivBusiness

Namespace: MesoXPO.Business.System
Zweck: Zugriff auf das WinLine-Archiv und Dokumentenverwaltung

Die ArchivBusiness-Klasse ermöglicht den Zugriff auf archivierte Dokumente, deren Extraktion und Konvertierung.

🔧 Hauptmethoden

Methode

Beschreibung

Parameter

Rückgabe

Methode

Beschreibung

Parameter

Rückgabe

ExtrahiereDokumentAsync(int dokumentenId, string ausgabeVerzeichnis, ...)

Extrahiert ein Archivdokument asynchron

Dokument-ID, Ausgabeverzeichnis, Optional: Konvertierungsoptionen

Task

LadeDokumentAsync(int dokumentenId)

Lädt ein Dokument aus dem Archiv

Dokument-ID

Task<ArchivdokumentDto?>

LadeBelegDokumenteAsync(int belegnummer, string mandant, bool ladeDokumentenInhalt, ...)

Lädt alle Dokumente zu einem Beleg

Belegnummer, Mandant, Optionen

Task<List<ArchivdokumentDto>>

ErmittleDateiname(int dokumentenId, bool verwendeInterneBezeichnungFallsKeinDateinameVorhanden)

Ermittelt den Dateinamen eines Dokuments

Dokument-ID, Fallback-Option

string

SpooldateiInPdfKonvertierenAsync(ArchivdokumentDto spooldokument, ...)

Konvertiert SPL-Dateien zu PDF

Spool-Dokument, Optionen

Task<ArchivdokumentDto>

💡 Verwendungsbeispiel

Mit Dependency Injection (Empfohlen):

public class DocumentService { private readonly ArchivBusiness _archivBusiness; public DocumentService(ArchivBusiness archivBusiness) { _archivBusiness = archivBusiness; } public async Task<ArchivdokumentDto?> GetDocumentAsync(int documentId) { return await _archivBusiness.LadeDokumentAsync(documentId); } public async Task ExtractDocumentAsync(int documentId, string outputPath) { await _archivBusiness.ExtrahiereDokumentAsync( dokumentenId: documentId, ausgabeVerzeichnis: outputPath, spooldateiInPdfUmwandeln: true ); } }

Legacy-Muster (Weiterhin unterstützt):

// Archiv-Business initialisieren var archivBusiness = new ArchivBusiness(systemUnitOfWork, logger); // Dokument aus Archiv laden var dokument = await archivBusiness.LadeDokumentAsync(12345); // Dokument extrahieren await archivBusiness.ExtrahiereDokumentAsync( dokumentenId: 12345, ausgabeVerzeichnis: @"C:\Temp\Archive", spooldateiInPdfUmwandeln: true );

ExImBusiness

Namespace: MesoXPO.Business.System
Zweck: Export/Import-Operationen über Mesonic WebServices

Die ExImBusiness-Klasse bietet eine einfache Schnittstelle zu den Mesonic ExIm WebServices für Datenexport und -import.

🔧 Hauptmethoden

Methode

Beschreibung

Parameter

Rückgabe

Methode

Beschreibung

Parameter

Rückgabe

ExportiereDatenMitVorlage(ExportiereDatenMitVorlageParameter parameterExport, WebServiceParameter parameter)

Exportiert Daten mit einer Vorlage

Export-Parameter, WebService-Parameter

XmlDocument

ExportiereDatenAlsJson(ExportiereDatenMitVorlageParameter parameterExport, WebServiceParameter parameter)

Exportiert Daten als JSON

Export-Parameter, WebService-Parameter

string (JSON)

ImportiereDaten(ImportiereDatenMitVorlageParameter importParameter, WebServiceParameter parameter)

Importiert Daten über WebService

Import-Parameter, WebService-Parameter

MESOWebServiceResult

ImportiereDatenVonJson(ImportiereDatenVonJsonMitVorlageParameter importParameter, WebServiceParameter parameter)

Importiert Daten aus JSON

JSON-Import-Parameter, WebService-Parameter

MESOWebServiceResult

💡 Verwendungsbeispiel

// ExIm-Business initialisieren var eximBusiness = new ExImBusiness(systemUnitOfWork, logger); // Daten exportieren var exportParameter = new ExportiereDatenMitVorlageParameter { VorlagenTyp = "Kunde", Vorlagennummer = 1, DatenAmServerSpeichern = false }; var exportResult = eximBusiness.ExportiereDatenMitVorlage(exportParameter, webServiceParameter);

PowerReportBusiness

Namespace: MesoXPO.Business.System
Zweck: Zugriff auf PowerReport-Datenquellen und BI-Daten

Die PowerReportBusiness-Klasse ermöglicht den Zugriff auf PowerReport-Definitionen und die Ausführung von BI-Datenquellen.

🔧 Hauptmethoden

Methode

Beschreibung

Parameter

Rückgabe

Methode

Beschreibung

Parameter

Rückgabe

LadePowerReportDatenquelleAlsJsonDocument(string name, string mandant, ...)

Lädt eine Datenquelle als JsonDocument

Name, Mandant, Optional: BI-Datenbankname

JsonDocument?

LadePowerReportDatenquelleAlsString(string name, string mandant, string datenbanknameBI)

Lädt eine Datenquelle als String

Name, Mandant, BI-Datenbankname

string

LiefereDatenquelleJsonDefinition(string name, string mandant)

Liefert die JSON-Definition einer Datenquelle

Name, Mandant

PowerReportDefinitionJson?

LiefereSelectStatementFuerDatenquelle(string name, string mandant, string datenbanknameBI)

Generiert SELECT-Statement für Datenquelle

Name, Mandant, BI-Datenbankname

string

💡 Verwendungsbeispiel

// PowerReport-Business initialisieren var powerReportBusiness = new PowerReportBusiness(systemUnitOfWork, logger); // Datenquelle laden var datenquelle = powerReportBusiness.LadePowerReportDatenquelleAlsJsonDocument( name: "Umsatzbericht", mandant: "100" ); // Definition abrufen var definition = powerReportBusiness.LiefereDatenquelleJsonDefinition("Umsatzbericht", "100");

FormsBusiness

Namespace: MesoXPO.Business.System
Zweck: Verarbeitung von Formulardefinitionen

⚠️ Verfügbar nur in WinLine 2023, 2024, 2025 oder DEBUG-Builds

Die FormsBusiness-Klasse bietet Methoden zum Abrufen und Verarbeiten von Formulardefinitionen.

LagerbuchungBusiness

Namespace: MesoXPO.Business.System
Zweck: Verwaltung von Lagerbuchungen und Beständen

Die LagerbuchungBusiness-Klasse ermöglicht die Abfrage von Lagerbeständen und die Erstellung von Lagerbuchungen.

🔧 Hauptmethoden

Methode

Beschreibung

Parameter

Rückgabe

Methode

Beschreibung

Parameter

Rückgabe

Lagerbestaende(string mesocomp)

Liefert alle Lagerbestände als Query

Mandant

IQueryable<BestandDto>

LagerbestandNachArtikelnummer(string mesocomp, string artikelnummer)

Sucht Bestand nach Artikelnummer

Mandant, Artikelnummer

IQueryable<BestandDto>

LagerbestandNachLagerEAN(string mesocomp, string ean)

Sucht Bestand nach EAN

Mandant, EAN

IQueryable<BestandDto>

LagerbestandNachLagerKurzcode(string mesocomp, string lagerCode)

Sucht Bestand nach Lagercode

Mandant, Lagercode

IQueryable<BestandDto>

ErzeugeLagerbuchung(ErzeugeLagerbuchung neueLagerbuchung, WebServiceParameter parameter)

Erstellt eine neue Lagerbuchung

Buchungsdaten, WebService-Parameter

ErzeugteLagerbuchung

💡 Verwendungsbeispiel

Mit Dependency Injection (Empfohlen):

public class InventoryService { private readonly LagerbuchungBusiness _lagerbuchungBusiness; public InventoryService(LagerbuchungBusiness lagerbuchungBusiness) { _lagerbuchungBusiness = lagerbuchungBusiness; } public async Task<List<BestandDto>> GetInventoryAsync(string mandant, string artikelnummer) { return _lagerbuchungBusiness.LagerbestandNachArtikelnummer(mandant, artikelnummer) .Where(b => b.Menge > 0) .ToList(); } public async Task<ErzeugteLagerbuchung> CreateInventoryTransactionAsync( ErzeugeLagerbuchung neueBuchung, WebServiceParameter parameter) { return _lagerbuchungBusiness.ErzeugeLagerbuchung(neueBuchung, parameter); } }

Legacy-Muster (Weiterhin unterstützt):

// Lagerbuchung-Business initialisieren var lagerbuchungBusiness = new LagerbuchungBusiness(systemUnitOfWork, logger); // Lagerbestand abfragen var bestaende = lagerbuchungBusiness.LagerbestandNachArtikelnummer("100", "ART-001") .Where(b => b.Menge > 0) .ToList(); // Neue Lagerbuchung erstellen var neueBuchung = new ErzeugeLagerbuchung { Artikelnummer = "ART-001", Menge = 10, // weitere Eigenschaften... }; var result = lagerbuchungBusiness.ErzeugeLagerbuchung(neueBuchung, webServiceParameter);

GrafikBusiness

Namespace: MesoXPO.Business.System
Zweck: Verwaltung von WinLine-Grafikdaten

Die GrafikBusiness-Klasse ermöglicht den Zugriff auf in WinLine gespeicherte Grafiken und Bilder.

🔧 Hauptmethoden

Methode

Beschreibung

Parameter

Rückgabe

Methode

Beschreibung

Parameter

Rückgabe

ErmittleGrafik(string dateiname)

Lädt eine Grafik anhand des Dateinamens

Dateiname

Image?

ErmittleGrafikNachName(string name)

Lädt eine Grafik anhand des logischen Namens

Logischer Name

Image?

💡 Verwendungsbeispiel

// Grafik-Business initialisieren var grafikBusiness = new GrafikBusiness(systemUnitOfWork, logger); // Grafik laden var logo = grafikBusiness.ErmittleGrafikNachName("Firmenlogo"); if (logo != null) { // Grafik verwenden... }

🛠️ Services

TextTransformationService

Namespace: MesoXPO.Business.Format
Zweck: Konvertierung zwischen verschiedenen Textformaten

Statische Klasse für die Umwandlung zwischen RTF, HTML, Markdown und Plain Text.

🔧 Hauptmethoden

Methode

Beschreibung

Parameter

Rückgabe

Methode

Beschreibung

Parameter

Rückgabe

RtfAlsHtml(string rtfText)

Konvertiert RTF zu HTML

RTF-Text

HTML-String

RtfAlsPlainText(string rtfText)

Konvertiert RTF zu Plain Text

RTF-Text

Plain Text

MarkdownAlsRtf(string markdownText)

Konvertiert Markdown zu RTF

Markdown-Text

RTF-String

MarkdownAlsHtml(string markdownText)

Konvertiert Markdown zu HTML

Markdown-Text

HTML-String

GetTextFormatierung(string unformatierterText, Formatierung formatierung, bool alsHtml)

Formatiert Text mit angegebener Formatierung

Text, Formatierung, HTML-Flag

Formatierter Text

💡 Verwendungsbeispiel

// RTF zu HTML konvertieren string rtfText = @"{\rtf1\ansi\deff0 {\fonttbl {\f0 Times New Roman;}} \f0\fs24 Hello World!}"; string htmlText = TextTransformationService.RtfAlsHtml(rtfText); // Markdown zu RTF string markdown = "# Überschrift\n\n**Fetter Text** und *kursiver Text*"; string rtf = TextTransformationService.MarkdownAlsRtf(markdown);

🔌 Extensions

ViewKontenstammExtensions

Namespace: MesoXPO.Business.Extensions
Zweck: Erweiterungsmethoden für Kontenstamm-Operationen

🔧 Hauptmethoden

Methode

Beschreibung

Parameter

Rückgabe

Methode

Beschreibung

Parameter

Rückgabe

KopierePersonenkonto(ViewKontenstamm vorhandenesKonto, string zielmandant, int zielmesoyear, ...)

Kopiert ein Personenkonto in einen anderen Mandanten

Quellkonto, Zielmandant, Zieljahr, Optional: abweichende Kontonummern

Task<bool>

💡 Verwendungsbeispiel

// Konto kopieren var quellkonto = // ... ViewKontenstamm laden bool erfolgreich = await quellkonto.KopierePersonenkonto( zielmandant: "200", zielmesoyear: 2024, abweichendeKontonummer: "20001" );

🛠️ Helper-Klassen

Die Bibliothek enthält verschiedene Helper-Klassen für spezielle Aufgaben:

  • WebServiceTemplateHelper: Hilfsmethoden für WebService-Vorlagen

  • SerializeHelper: Serialisierung und Deserialisierung

  • JsonHelper: JSON-Verarbeitung

  • EnumFlagsHelper: Enum-Flag-Operationen

  • PredicateExtensions: LINQ-Predicate-Erweiterungen

  • ConditionalWhere: Bedingte LINQ-Where-Operationen

  • CrmIncidencesUndSchritteExtensions: CRM-spezifische Erweiterungen

📦 Installation und Verwendung

Voraussetzungen

  • .NET 8.0 oder höher

  • .NET 9.0 unterstützt

  • DevExpress-Komponenten (Version 25.1.x)

  • Zugriff auf MesoXPO-Packages

  • WinLine-Datenbankverbindung

Basis-Konstruktor-Muster

Moderne Dependency Injection (Empfohlen)

Alle Business-Klassen unterstützen jetzt Dependency Injection für bessere Testbarkeit und Wartbarkeit:

// Registrierung aller Services services.AddMesoXPOBusiness(); // Constructor Injection in Ihren Services public class MyController : ControllerBase { private readonly WorkflowBusiness _workflowBusiness; public MyController(WorkflowBusiness workflowBusiness) { _workflowBusiness = workflowBusiness; } }

Legacy-Konstruktoren (Weiterhin unterstützt)

Für Abwärtskompatibilität folgen alle Business-Klassen weiterhin dem traditionellen Konstruktor-Muster:

// Mit SystemUnitOfWork var business = new WorkflowBusiness(systemUnitOfWork, logger); // Mit IDataLayer var business = new WorkflowBusiness(dataLayer, logger); // Mit Verbindungsparametern var business = new WorkflowBusiness( serverName: "localhost", port: 1433, databaseName: "WinLine", userName: "user", password: "password", threadsafe: false, logger: logger );

Dependency Injection (Empfohlen)

Die Bibliothek unterstützt moderne Dependency Injection-Muster für bessere Testbarkeit und Wartbarkeit:

// In Startup.cs oder Program.cs services.AddMesoXPOBusiness(); // Optional: Mit benutzerdefinierten Logging-Einstellungen services.AddMesoXPOBusiness(loggingBuilder => { loggingBuilder.AddConsole(); loggingBuilder.SetMinimumLevel(LogLevel.Information); });

Verwendung mit Dependency Injection

public class MyService { private readonly WorkflowBusiness _workflowBusiness; private readonly ArchivBusiness _archivBusiness; public MyService(WorkflowBusiness workflowBusiness, ArchivBusiness archivBusiness) { _workflowBusiness = workflowBusiness; _archivBusiness = archivBusiness; } public async Task ProcessWorkflow() { var faelle = _workflowBusiness.FaelleAlsQueryable("100"); // ... weitere Operationen } }

Verfügbare Services

Die AddMesoXPOBusiness() Extension-Methode registriert automatisch folgende Services:

  • WorkflowBusiness - CRM Workflow-Verwaltung

  • ArchivBusiness - Dokumenten-Archiv-Zugriff

  • ExImBusiness - Export/Import-Operationen

  • LagerbuchungBusiness - Lager-Verwaltung

  • PowerReportBusiness - BI-Datenquellen-Zugriff

  • GrafikBusiness - Grafik-Verwaltung

  • FormsBusiness - Formular-Definitionen (WinLine 2023+)

  • IMapperConfigurationService - Shared AutoMapper-Konfiguration

CSS EDV Support - Tobias Forbrich