FubarDev.Lexware.Database.Postgres
0.1.0
Prefix Reserved
dotnet add package FubarDev.Lexware.Database.Postgres --version 0.1.0
NuGet\Install-Package FubarDev.Lexware.Database.Postgres -Version 0.1.0
<PackageReference Include="FubarDev.Lexware.Database.Postgres" Version="0.1.0" />
<PackageVersion Include="FubarDev.Lexware.Database.Postgres" Version="0.1.0" />
<PackageReference Include="FubarDev.Lexware.Database.Postgres" />
paket add FubarDev.Lexware.Database.Postgres --version 0.1.0
#r "nuget: FubarDev.Lexware.Database.Postgres, 0.1.0"
#:package FubarDev.Lexware.Database.Postgres@0.1.0
#addin nuget:?package=FubarDev.Lexware.Database.Postgres&version=0.1.0
#tool nuget:?package=FubarDev.Lexware.Database.Postgres&version=0.1.0
FubarDev.Lexware
.NET-Bibliotheken für den Zugriff auf Daten der Lexware-Desktopanwendung.
Übersicht
Lexware Financial Office speichert seine Daten je nach Version in einer SAP SQL Anywhere- (bis Lexware 2025) oder PostgreSQL-Datenbank (ab Lexware 2026). Eine direkte Schnittstelle für maschinell lesbare Datenexporte existiert nicht. Dieses Projekt stellt ein .NET-10-Bibliothekspaket bereit, das den vollständigen Zugriff auf diese Daten ermöglicht — von der Verbindungsaufbau-Initialisierung bis hin zu NHibernate-Sessions auf die Entitymodelle.
Bibliotheken
| Paket | Inhalt |
|---|---|
FubarDev.Lexware.Database.Abstractions |
Schnittstellen für Session-Factory und Credential-Generator; NHibernate-Hilfsmittel (DateOnlyType, ILexwareSessionFactoryConfigurator) |
FubarDev.Lexware.Database.SqlAnywhere |
NHibernate-Session-Factory für SAP SQL Anywhere 17 |
FubarDev.Lexware.Database.Postgres |
NHibernate-Session-Factory für PostgreSQL |
FubarDev.Lexware.Entities.LxOffice |
NHibernate-Entities für die lxoffice-Datenbank (Benutzer, Firmen) |
FubarDev.Lexware.Entities.LxCompany |
NHibernate-Entities für die Firmendatenbanken (f1, f2, …) |
FubarDev.Lexware.PropertyStore |
Leser für den Lexware PropertyStore (Verbindungsparameter, DSN-Erkennung) |
FubarDev.Lexware.Service |
Refit-HTTP-Client für den lokalen LexwareService (PostgreSQL) |
FubarDev.Lexware.Client |
High-Level-Client: Initialisierung, Login, Session-Management |
FubarDev.Lexware.Client zieht alle weiteren Pakete als transitive Abhängigkeiten mit.
Beispielanwendung
Das Repository enthält samples/lx-access — ein CLI-Tool das zeigt, wie die
Bibliotheken zusammenspielen.
dotnet tool install --add-source https://codeberg.org/api/packages/fubar-dev/nuget/index.json lx-access
Voraussetzungen
- Lexware Financial Office lokal oder über Netzwerkfreigabe erreichbar
- .NET 10 SDK
- Für SQL Anywhere:
Sap.Data.SQLAnywhere.Core.v2.1.dllaus der lokalen SA17-Installation (SAP-Lizenz, nicht im Repository enthalten — siehe CONTRIBUTING.md)
Installation
dotnet add package FubarDev.Lexware.Client
Schnellstart
Die folgenden Beispiele sind als eigenständige C#-Skripte konzipiert und können
direkt mit dotnet run <datei>.cs ausgeführt werden (.NET 10 SDK).
Initialisierung (einmalig)
Die Initialisierung liest den PropertyStore der Lexware-Freigabe, ermittelt
das Datenbankbackend, holt Zertifikate (PostgreSQL) und testet die
Verbindung. Das Ergebnis wird in einem ILexwareConfigurationStore persistiert.
#:package FubarDev.Lexware.Client
using FubarDev.Lexware.Client;
using FubarDev.Lexware.PropertyStore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var cacheFile = Path.Combine(Path.GetTempPath(), "LexwareAccessTestCache.json");
var builder = Host.CreateApplicationBuilder(args);
builder.AddLexwarePropertyStore(new JsonFilePropertyStoreCacheStore(cacheFile));
builder.Services.AddLexwareClient();
var host = builder.Build();
await host.StartAsync();
var client = host.Services.GetRequiredService<ILexwareClient>();
// ILexwareConfigurationStore-Implementierung auf Basis von AbstractLexwareConfigurationStore
// bereitstellen — hier als Beispiel eine einfache In-Memory-Variante:
var store = new MyConfigurationStore();
await client.InitializeAsync(
sharePath: @"\\server\lexware",
configurationStore: store,
progress: new Progress<string>(Console.WriteLine),
cancellationToken: CancellationToken.None);
await host.StopAsync();
Login und Datenbankzugriff
#:package FubarDev.Lexware.Client
using FubarDev.Lexware.Client;
using FubarDev.Lexware.Client.Session;
using FubarDev.Lexware.Entities.LxOffice;
using FubarDev.Lexware.Entities.LxCompany;
using FubarDev.Lexware.PropertyStore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using NHibernate.Linq;
var cacheFile = Path.Combine(Path.GetTempPath(), "LexwareAccessTestCache.json");
var builder = Host.CreateApplicationBuilder(args);
builder.AddLexwarePropertyStore(new JsonFilePropertyStoreCacheStore(cacheFile));
builder.Services.AddLexwareClient();
var host = builder.Build();
await host.StartAsync();
host.Services.GetRequiredService<IPropertyStoreManager>().LoadFromCache();
var client = host.Services.GetRequiredService<ILexwareClient>();
var result = await client.LoginAsync("admin", "geheim", CancellationToken.None);
if (result is SessionResult.Success { Session: ILexwareUserSession session })
{
// Zugriff auf lxoffice (Benutzer, Firmen)
var officeFactory = session.CreateOfficeSessionFactory();
using var officeSession = officeFactory.OpenSession();
var users = await officeSession.Query<LxGlobalUser>().ToListAsync();
Console.WriteLine($"{users.Count} Benutzer gefunden.");
// Zugriff auf eine Firmendatenbank
var companyFactory = await session.CreateCompanySessionFactoryAsync(
companyId: 1,
CancellationToken.None);
using var companySession = companyFactory.OpenSession();
var orders = await companySession.Query<FkAuftrag>().ToListAsync();
Console.WriteLine($"{orders.Count} Aufträge in Firma 1.");
}
await host.StopAsync();
Mappings erweitern oder ersetzen
Eigene NHibernate-Entities können per DI-Registrierung eines
ILexwareSessionFactoryConfigurator eingebunden werden:
#:package FubarDev.Lexware.Client
using FubarDev.Lexware.Client;
using FubarDev.Lexware.Database;
using FubarDev.Lexware.PropertyStore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using NHibernate.Cfg;
var cacheFile = Path.Combine(Path.GetTempPath(), "LexwareAccessTestCache.json");
var builder = Host.CreateApplicationBuilder(args);
builder.AddLexwarePropertyStore(new JsonFilePropertyStoreCacheStore(cacheFile));
builder.Services.AddLexwareClient();
// Eigene Entities zusätzlich laden:
builder.Services.AddSingleton<ILexwareSessionFactoryConfigurator, MyConfigurator>();
var host = builder.Build();
class MyConfigurator : ILexwareSessionFactoryConfigurator
{
public void ConfigureCompanySessionFactory(Configuration cfg)
=> cfg.AddAssembly(typeof(MyCompanyEntity).Assembly);
}
Wird kein Konfigurator registriert oder werden keine Mappings gesetzt, greift der eingebaute Fallback auf die Standard-Entity-Assemblies.
Konfiguration
Die Bibliotheken lesen ihre Einstellungen aus IConfiguration. Die meisten
Werte werden automatisch aus dem PropertyStore befüllt.
| Schlüssel | Beschreibung |
|---|---|
Lexware:Client:SharePath |
Pfad zur Lexware-Freigabe (z.B. \\server\lexware) |
Lexware:Database:DatabaseType |
SqlAnywhere oder Postgres (aus PropertyStore) |
Lexware:Database:SqlAnywhere:DbPath |
Verzeichnis der SA-Datenbankdateien |
Lexware:Database:SqlAnywhere:AdoNetAssemblyDirectory |
Verzeichnis der Sap.Data.SQLAnywhere.Core.v2.1.dll |
Lexware:Database:Postgres:Addresses:0 |
PostgreSQL-Hostadresse (aus PropertyStore) |
Lexware:Database:Postgres:Port |
PostgreSQL-Port (aus PropertyStore) |
Lexware:LexwareService:Port |
Port des lokalen LexwareService (PostgreSQL, aus PropertyStore) |
Lexware:Product:Version |
Lexware-Versionsnummer (aus PropertyStore) |
Zweck und beabsichtigte Nutzung
Diese Bibliothek wurde ausschließlich entwickelt, um Drittanwendungen die Interoperabilität mit lokal installierten, lizenzierten Lexware Financial Office-Installationen zu ermöglichen.
Lexware Financial Office stellt keinen vollständig maschinell lesbaren Datenexport für alle Datenkategorien bereit. Wo nur menschenlesbare Berichte verfügbar sind, ist der programmatische Zugriff auf die zugrundeliegende Datenbank der einzig gangbare Weg. Diese Bibliothek erlaubt es Drittanwendungen, sich mit denselben Zugangsdaten zu authentifizieren, die bereits in Lexware hinterlegt sind.
Die Bibliothek ist ausschließlich für lizenzierte Lexware-Nutzer gedacht, die auf ihre eigenen Daten aus ihrer eigenen lizenzierten Installation zugreifen möchten.
Rechtlicher Hinweis
Interoperabilität
Die in dieser Bibliothek implementierten Verfahren wurden durch Reverse Engineering zum alleinigen Zweck der Herstellung von Interoperabilität mit Lexware Financial Office gewonnen, wie es ausdrücklich durch § 69e UrhG (Urheberrechtsgesetz) und § 3 GeschGehG (Geschäftsgeheimnisgesetz) erlaubt ist.
Vertragliche Klauseln, die Reverse Engineering zu Interoperabilitätszwecken untersagen, sind nach § 69g Abs. 2 UrhG kraft Gesetzes unwirksam.
Nutzungsumfang
Diese Bibliothek wird ausschließlich zu Interoperabilitätszwecken bereitgestellt. Sie ist ausschließlich zur Nutzung mit lizenzierten Lexware-Installationen durch den jeweiligen Lizenznehmer zum Zugriff auf eigene Daten bestimmt. Jede Nutzung, die diesen Rahmen überschreitet — insbesondere der unberechtigte Zugriff auf fremde Systeme — ist kein unterstützter oder beabsichtigter Anwendungsfall und liegt in der alleinigen Verantwortung des Nutzers.
Keine Weitergabe von Lexware-Komponenten
Diese Bibliothek enthält, bündelt oder verteilt keine Komponente, Binary oder sonstige Asset von Lexware oder der Haufe Group.
Haftungsausschluss
DIE SOFTWARE WIRD OHNE MÄNGELGEWÄHR UND OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG BEREITGESTELLT. DIE AUTOREN HAFTEN IN KEINEM FALL FÜR ANSPRÜCHE, SCHÄDEN ODER SONSTIGE VERBINDLICHKEITEN, DIE AUS DER NUTZUNG DER SOFTWARE ENTSTEHEN.
Lizenz
Copyright (c) 2026 Fubar Development Junker
Dieses Projekt steht unter der MIT-Lizenz.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- FubarDev.Lexware.Database.Abstractions (>= 0.1.0)
- FubarDev.Lexware.Entities.LxCompany (>= 0.1.0)
- FubarDev.Lexware.Entities.LxOffice (>= 0.1.0)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.5)
- Npgsql (>= 10.0.2)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on FubarDev.Lexware.Database.Postgres:
| Package | Downloads |
|---|---|
|
FubarDev.Lexware.Client
High-level client for accessing Lexware desktop application data (SQL Anywhere and PostgreSQL). |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.0 | 35 | 4/1/2026 |