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
Konfiguration
Füge den oben genannten Feed in Deiner
nuget.confighinzu.Verwende als Benutzername
MesoXPO.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
SystemUnitOfWorkMit
IDataLayerMit 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 |
|---|---|---|---|
| Liefert alle Fälle als IQueryable für weitere LINQ-Operationen |
|
|
| Erstellt einen neuen Fall anhand einer Feldliste | Falldaten und WebService-Parameter |
|
| Exportiert Fälle mit einer bestimmten Vorlage | Export-Parameter und WebService-Parameter |
|
| Exportiert Fälle als JSON | Export-Parameter und WebService-Parameter |
|
| Erstellt einen Anhang für einen bestehenden Fall | Fall-ID, Schrittnummer, Dokument, Mandant |
|
💡 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 |
|---|---|---|---|
| Extrahiert ein Archivdokument asynchron | Dokument-ID, Ausgabeverzeichnis, Optional: Konvertierungsoptionen |
|
| Lädt ein Dokument aus dem Archiv | Dokument-ID |
|
| Lädt alle Dokumente zu einem Beleg | Belegnummer, Mandant, Optionen |
|
| Ermittelt den Dateinamen eines Dokuments | Dokument-ID, Fallback-Option |
|
| Konvertiert SPL-Dateien zu PDF | Spool-Dokument, Optionen |
|
💡 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 |
|---|---|---|---|
| Exportiert Daten mit einer Vorlage | Export-Parameter, WebService-Parameter |
|
| Exportiert Daten als JSON | Export-Parameter, WebService-Parameter |
|
| Importiert Daten über WebService | Import-Parameter, WebService-Parameter |
|
| Importiert Daten aus JSON | JSON-Import-Parameter, WebService-Parameter |
|
💡 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 |
|---|---|---|---|
| Lädt eine Datenquelle als JsonDocument | Name, Mandant, Optional: BI-Datenbankname |
|
| Lädt eine Datenquelle als String | Name, Mandant, BI-Datenbankname |
|
| Liefert die JSON-Definition einer Datenquelle | Name, Mandant |
|
| Generiert SELECT-Statement für Datenquelle | Name, Mandant, BI-Datenbankname |
|
💡 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 |
|---|---|---|---|
| Liefert alle Lagerbestände als Query | Mandant |
|
| Sucht Bestand nach Artikelnummer | Mandant, Artikelnummer |
|
| Sucht Bestand nach EAN | Mandant, EAN |
|
| Sucht Bestand nach Lagercode | Mandant, Lagercode |
|
| Erstellt eine neue Lagerbuchung | Buchungsdaten, WebService-Parameter |
|
💡 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 |
|---|---|---|---|
| Lädt eine Grafik anhand des Dateinamens | Dateiname |
|
| Lädt eine Grafik anhand des logischen Namens | Logischer Name |
|
💡 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 |
|---|---|---|---|
| Konvertiert RTF zu HTML | RTF-Text | HTML-String |
| Konvertiert RTF zu Plain Text | RTF-Text | Plain Text |
| Konvertiert Markdown zu RTF | Markdown-Text | RTF-String |
| Konvertiert Markdown zu HTML | Markdown-Text | HTML-String |
| 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 |
|---|---|---|---|
| Kopiert ein Personenkonto in einen anderen Mandanten | Quellkonto, Zielmandant, Zieljahr, Optional: abweichende Kontonummern |
|
💡 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-VorlagenSerializeHelper: Serialisierung und DeserialisierungJsonHelper: JSON-VerarbeitungEnumFlagsHelper: Enum-Flag-OperationenPredicateExtensions: LINQ-Predicate-ErweiterungenConditionalWhere: Bedingte LINQ-Where-OperationenCrmIncidencesUndSchritteExtensions: 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-VerwaltungArchivBusiness- Dokumenten-Archiv-ZugriffExImBusiness- Export/Import-OperationenLagerbuchungBusiness- Lager-VerwaltungPowerReportBusiness- BI-Datenquellen-ZugriffGrafikBusiness- Grafik-VerwaltungFormsBusiness- Formular-Definitionen (WinLine 2023+)IMapperConfigurationService- Shared AutoMapper-Konfiguration