docuBridge ist ein modulares Integrations- und Import-Framework zur strukturierten Übertragung externer Daten und Dokumente in docuvita (docuvita Sidebar).
Das System dient als Brücke zwischen Dateisystemen, Fremdanwendungen und docuvita-Importmechanismen (AutoProfiler, dvImport).
Ziel: reproduzierbare, konfigurierbare und automatisierte Datenübernahme ohne direkte Manipulation der Quelldaten.
docuBridge besteht aus mehreren logisch getrennten Komponenten:
| AppName | Technologie | Beschreibung |
|---|---|---|
docuBridge Client |
.NET 4.8 | Client auf Clientrechnern |
docuBridge Server |
ASP.NET | Serveranwendung |
docuBridge Server.Configurator |
.NET 4.8 | Konfigurationsanwendung für den Server |
Die Architektur folgt einem serverzentrierten Modell mit externer Konfiguration und optionaler Client-Kommunikation über TCP bzw. HTTP.
Externe Datenquelle (ERP, Dateisystem, Anwendung)
→ docuBridge Client
→ strukturierte Metadaten (JSON)
→ docuBridge Server
→ docuvita (Import API / AutoProfiler)
Der docuBridge Client ist für Benutzerinteraktion und Kontextbildung verantwortlich,
während der docuBridge Server die zentrale Verarbeitung, Validierung und Weiterleitung der Metadaten übernimmt.
Bei Interaktion mit einem Objekt im ERP-System wird ein HTTP-Request an docuBridge gesendet.
Beispiel GET Request an localhost:
curl -G "http://hg-blp:25024/api/client/sidebar/selectObject" \
--data-urlencode "user=hkheun\\raphael" \
--data-urlencode "related_Process=Primetall" \
--data-urlencode "objectName=SALES QUOTE" \
--data-urlencode "objectValue=A250184"
Auf Basis dieser Daten wird die docuvita Sidebar im docuBridge Client aktualisiert.
Nach Eingang des Requests zeigt der docuBridge Client in der Sidebar:
Diese Informationen bilden den fachlichen Kontext für alle weiteren Aktionen innerhalb der Sidebar.
Basierend auf den empfangenen Objektinformationen kann eine Suche in docuvita ausgelöst werden.
Die Suche erfolgt anhand der im Server Configurator definierten Objekttypen und kann u. a. folgende Kriterien nutzen:
Die Suche kann flexibel umgeschaltet werden zwischen:

Alle in docuvita archivierten, zum Kontext passenden Objekte können angezeigt werden.

Über eine Drag-and-Drop-Funktion im Client kann ein Dokument für den Import nach docuvita ausgewählt werden.
Nach dem Ablegen des Dokuments öffnet sich eine Maske zur Importvorbereitung.
Abhängig von den empfangenen Kontextdaten werden automatisch vorbelegt:
Die vorbelegten Daten können vor dem Import geprüft und bei Bedarf angepasst werden.

Diese Maske dient der fachlichen und technischen Validierung vor der Übergabe an docuvita.
Der eigentliche Import des Dokuments erfolgt:
Für jeden Objekttyp kann ein oder mehrere Importtemplates definiert werden.
Ein Importtemplate legt fest:
Durch den Einsatz von Importtemplates kann flexibel auf Änderungen an Objekttypen oder fachlichen Anforderungen reagiert werden, ohne Anpassungen am Client-Code vorzunehmen.
RootDocuvitasystemconfig: Liste von Systemeinstellungen.mandanten: Mandanteninformationen.objecttypes: Objekttypdefinitionen.users: Benutzerinformationen.abfragen: Konfiguration der ODBC-Abfragen (inkl. ConnectionString).SystemConfig, Mandant, ObjectType, AbfrageFieldName: Name des Feldes.FieldType: FieldType beschreibt den logischen Datentyp, nicht den JSON-Typ.FieldValue: FieldValue wird immer als string serialisiert.FieldDescription: Beschreibung des Feldes.Die Kommunikation zwischen docuBridge Client und docuBridge Server erfolgt wahlweise über:
HTTP wird primär für synchrone Such- und Abfrageoperationen genutzt, während TCP für zustandsbehaftete oder ereignisbasierte Kommunikation vorgesehen ist.
Der docuBridge Server ist die zentrale Laufzeitkomponente des Systems zur:
JSON-Datei wird durch docuBridge Server beim Start (oder Reload) eingelesen. Wird über docuBridge Server.Configurator erstellt/editiert (GUI) und als JSON serialisiert.
{
"docuvita": {
"systemconfig": [
{
"FieldName": "dvUrl",
"FieldType": "S",
"FieldValue": "https://localhost:443/server/services/web",
"FieldDescription": ""
},
{
"FieldName": "dvApiKey",
"FieldType": "S",
"FieldValue": "",
"FieldDescription": ""
},
{
"FieldName": "dvImportUser",
"FieldType": "S",
"FieldValue": "",
"FieldDescription": ""
},
{
"FieldName": "dvImportPassword",
"FieldType": "S",
"FieldValue": "",
"FieldDescription": ""
}
],
"mandanten": {
"mandant": [
{
"FieldName": "dvMandantName",
"FieldType": "S",
"FieldValue": "",
"FieldDescription": ""
},
{
"FieldName": "dvMandantId",
"FieldType": "N",
"FieldValue": "1",
"FieldDescription": ""
}
]
},
"objecttypes": [
{
"objecttypefields": [
{
"FieldName": "dvObjecttypeName",
"FieldType": "S",
"FieldValue": "",
"FieldDescription": ""
},
{
"FieldName": "dvObjecttypeId",
"FieldType": "N",
"FieldValue": "1",
"FieldDescription": ""
},
{
"FieldName": "dvObjecttypeFieldIdCustomerNumber",
"FieldType": "N",
"FieldValue": "1",
"FieldDescription": ""
},
{
"FieldName": "dvObjecttypeFieldIdVendorNumber",
"FieldType": "N",
"FieldValue": "1",
"FieldDescription": ""
},
{
"FieldName": "dvObjecttypeFieldIdProcess",
"FieldType": "N",
"FieldValue": "1",
"FieldDescription": ""
},
{
"FieldName": "dvObjecttypeDvImportPath",
"FieldType": "S",
"FieldValue": "C:\\pfad\\zur\\Config\\dvImport\\dvImport_1",
"FieldDescription": ""
},
{
"FieldName": "dvTemplateFileName",
"FieldType": "S",
"FieldValue": "ObjectName (Vorgangsnummer)",
"FieldDescription": ""
},
{
"FieldName": "dvLinkedDocumentType",
"FieldType": "S",
"FieldValue": "offer,invoice,order,delivery_note,reminder",
"FieldDescription": ""
}
]
}
],
"users": {
"user": [
{
"FieldName": "benutzerName",
"FieldType": "S",
"FieldValue": "",
"FieldDescription": ""
},
{
"FieldName": "dvBenutzerName",
"FieldType": "S",
"FieldValue": "",
"FieldDescription": ""
},
{
"FieldName": "dvPassword",
"FieldType": "S",
"FieldValue": "",
"FieldDescription": ""
},
{
"FieldName": "dvMandant",
"FieldType": "N",
"FieldValue": "1",
"FieldDescription": ""
}
]
},
"abfragen": {
"abfrage": [
{
"FieldName": "ConnectionString",
"FieldType": "S",
"FieldValue": "",
"FieldDescription": ""
},
{
"FieldName": "dvLieferant",
"FieldType": "S",
"FieldValue": "",
"FieldDescription": ""
},
{
"FieldName": "dvKunde",
"FieldType": "S",
"FieldValue": "",
"FieldDescription": ""
},
{
"FieldName": "SALES+QUOTE",
"FieldType": "S",
"FieldValue": "",
"FieldDescription": ""
},
{
"FieldName": "ARTICLE",
"FieldType": "S",
"FieldValue": "",
"FieldDescription": ""
}
]
}
}
}
Die Konfiguration erfolgt über eine JSON Datei, diese kann in gängigen Editoren angepasst und erweitert werden, eine Anpassung über eine Benutzeroberfläche ist ebenfalls geplant.
Die Typkonvertierung erfolgt serverseitig anhand von FieldType.
| DvUrl | string | URL zum docuvita System |
| dvApiKey | string | API Key für das docuvita System |
| dvImportUser | string | Benutzername für das docuvita System |
| dvImportPassword | string | Passwort zum Benutzernamen |
| mandanten | object | Konfiguration der docuvita-Mandanten |
| mandant | Array | Liste der Mandanten-Felder |
| dvMandantName | string | Name des Mandanten |
| dvMandantId | string | In docuvita vergeben ID des Mandanten |
| objecttypes | Array | Konfiguration der Objekttypen |
| objecttypefields | Array | Felder des Objekttyps |
| dvObjecttypeName | string | Name des Objekttypes (muss identisch zur docuvita Konfiguration sein) |
| dvObjecttypeId | string (numerisch, serverseitig konvertiert) | In docuvita vergebene ID des Objekttyps |
| dvObjecttypeFieldIdCustomerNumber | string (numerisch, serverseitig konvertiert) | docuvita Field-Id für zugehörige Kundennummer bzw. eindeutige Kundenidentifikation aus dem ERP-System |
| dvObjecttypeFieldIdVendorNumber | string (numerisch, serverseitig konvertiert) | docuvita Field-Id für die zugehörige Lieferantennummer bzw. eindeutige Lieferantenidentifikation aus dem ERP-System |
| dvObjecttypeFieldIdProcess | string (numerisch, serverseitig konvertiert) | docuvita Field-Id für die Projektnummer bzw. eindeutige Vorgangs- oder Projektidentifikation aus dem ERP System |
| dvObjecttypeDvImportPath | string | Pfad zum dvImport Template |
| dvTemplateFileName | string | Template für FileName |
| dvLinkedDocumentType | string | Verknüpfte Dokumenttypen zu diesem Objekttyp, dient zum Vorausfüllen von Eigenschaften beim Import von Begleitdokumenten, kommasepariert |
| users | object | Konfiguration der Benutzer |
| user | Array | Liste der User-Felder |
| benutzerName | string | Benutzername im docuBridge System |
| dvBenutzerName | string | Benutzername im docuvita System |
| dvPassword | string | Passwort zum Benutzernamen im docuvita System |
| dvMandant | string | docuvita Mandant des Benutzers |
| abfragen | object | Konfiguration der ODBC Abfragen |
| abfrage | Array | Liste der ODBC-Abfragefelder |
| ConnectionString | string | ODBC Connection String |
| dvLieferant | string | ODBC Abfrage zur Ermittlung der Lieferantennummer |
| dvKunde | string | ODBC Abfrage zur Ermittlung der Kundennummer |
| SALES+QUOTE | string | ODBC Abfrage zur Ermittlung von Objektdaten für den Objekttyp SALES QUOTE |
| ARTICLE | string | ODBC Abfrage zur Ermittlung von Objektdaten für den Objekttyp ARTICLE |
Der docuBridge Client stellt die Benutzerschnittstelle dar und ermöglicht:
objectNameNr, objectName){
"serverUrl": "http://localhost:5000/",
"portTcp": "9010"
}
Die Konfiguration des docuBridge Clients erfolgt über eine JSON Datei, diese kann in gängigen Editoren angepasst und erweitert werden.
| serverUrl | string | URL zum docuBridge Server |
| portTcp | string | Port für TCP requests |
Der docuBridge Server Configurator ist eine WinForms-Anwendung zur Erstellung, Pflege und Serialisierung der docuBridge-Serverkonfiguration.
Der docuBridge Server Configurator stellt eine grafische Benutzeroberfläche zur Erstellung und Pflege der JSON-Konfiguration bereit. Alle Änderungen werden visuell vorgenommen und anschließend als JSON serialisiert und vom Server eingelesen.
Der Configurator basiert auf einem TabControl mit spezialisierten UserControls:
Die Konfiguration ist versionskontrollfähig und deploymentfähig.
Die Konfiguration umfasst u. a.:
Logging dient sowohl Debugging- als auch Audit-Zwecken.
Dieses Kapitel beschreibt die Installation von docuBridge auf einem Zielsystem sowie die grundlegenden vorbereitenden Schritte.
Für die Installation und den Betrieb von docuBridge müssen folgende Voraussetzungen erfüllt sein:
Für produktive Umgebungen wird eine stabile Netzwerkverbindung zwischen Client, Server, Datenbank und docuvita vorausgesetzt.
Für den Betrieb des docuBridge Servers ist ein SQL-Server-Zugriff erforderlich.
Für die Verbindung benötigte Daten:
User Id=docubridge_app;
Password=********;
Die Zugangsdaten werden kundenspezifisch vergeben
Das Installationspaket enthält abhängig von der Auswahl:
Start der Installation
Führen Sie die MSI-Datei mit Administratorrechten aus.
Willkommensdialog
Klicken Sie auf Weiter, um die Installation zu starten.

Lizenzvereinbarung
Lesen Sie die Lizenzvereinbarung sorgfältig durch und bestätigen Sie diese, um fortzufahren.

Auswahl des Installationsverzeichnisses
Wählen Sie den Zielordner für die Installation.
Komponentenauswahl
Wählen Sie die zu installierenden Komponenten:

Konfiguration des Log-Verzeichnisses
Definieren Sie den Ablageort für Log-Dateien.

Start der Installation
Klicken Sie auf Installieren, um den Installationsvorgang zu starten.

Abschluss
Nach erfolgreicher Installation wird ein Abschlussdialog angezeigt.

Fertigstellen
Für einen erfolgreichen Start müssen Sie die Lizenzdatei im Serverordner (docubridge_poc) unter dem unten angegebenen Pfad hinzufügen: C:\Program Files (x86)\docuBridge\docuBridgeServer\docubridge_poc.
Nach Abschluss der Installation sind folgende Schritte erforderlich:
Serverkonfiguration




Konfiguration einlesen
Der docuBridge Server liest die Konfiguration beim Start oder Neustart ein.
Funktionstest
Die Deinstallation erfolgt über die Windows-Systemsteuerung:

Konfigurations- und Log-Dateien können ggf. manuell entfernt werden.
docuBridge Client
C:\ProgramData\docuBridge gespeichert.Logs erstellt.Logs wird zusätzlich ein projektbezogener Unterordner angelegt (docuBridge Client).
docuBridge Server / docuBridge Server Configurator
Logs erstellt.Logs wird jeweils ein separater Unterordner pro Projekt bzw. Komponente angelegt (docuBridge Server, docuBridge Server Configurator).
Der Log-Pfad des docuBridge Clients wird in der Client-Konfigurationsdatei gespeichert:
C:\ProgramData\docuBridge\urlConfig\serverUrl.json
Änderungen am Log-Pfad erfolgen über die Client-Konfiguration und werden beim nächsten Start des Clients wirksam.
Der Log-Pfad für den docuBridge Server sowie den docuBridge Server Configurator wird in einer separaten Konfigurationsdatei gespeichert:
..docuBridge\docuBridgeServer\Config\logConfig.json
Diese Konfiguration wird zentral über den docuBridge Server Configurator gepflegt.
Änderungen am Log-Pfad werden persistent gespeichert und gelten für alle nachfolgenden Starts des Servers bzw. des Configurators.
Dieses Kapitel beschreibt den standardisierten Build- und Packaging-Prozess für docuBridge Client, docuBridge Server und docuBridge Server Configurator inklusive MSI-Erstellung mittels WiX Toolset.
Alte Publish-Ordner werden entfernt und neu erstellt.
$root = "D:\git\fd.docuBridge\docubridge_poc\Installer\publish"
$pub1 = Join-Path $root "WindowsFormsApp1"
$pub2 = Join-Path $root "docubridge_poc"
$pub3 = Join-Path $root "docuBridge.Server.Configurator"
Remove-Item $pub1,$pub2,$pub3 -Recurse -Force -ErrorAction SilentlyContinue
New-Item $pub1,$pub2,$pub3 -ItemType Directory -Force | Out-Null
Die Anwendungen docuBridge Client und docuBridge Server Configurator werden im Release-Modus gebaut.
Die Zielplattform (x86) ist im jeweiligen .csproj über PlatformTarget definiert.
$msbuild = "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe"
& $msbuild "D:\git\fd.docuBridge\docubridge_poc\WindowsFormsApp1\docuBridge.csproj" `
/p:Configuration=Release /m
& $msbuild "D:\git\fd.docuBridge\docubridge_poc\docuBridge.Server.Configurator\docuBridge.Server.Configurator.csproj" `
/p:Configuration=Release /m
robocopy "D:\git\fd.docuBridge\docubridge_poc\WindowsFormsApp1\bin\Release" `
"$pub1" /E /XF *.pdb *.xml *.vshost.*
robocopy "D:\git\fd.docuBridge\docubridge_poc\docuBridge.Server.Configurator\bin\Release" `
"$pub3" /E /XF *.pdb *.xml *.vshost.*
Der Server wird als self-contained Single-File veröffentlicht.
dotnet publish "D:\git\fd.docuBridge\docubridge_poc\docubridge_poc\docubridge_poc.csproj" `
-c Release -r win-x86 --self-contained true `
/p:PublishSingleFile=true /p:PublishTrimmed=false `
-o "$pub2"
Die aktuellen Publish-Verzeichnisse werden mittels heat.exe geharvestet.
cd "D:\git\fd.docuBridge\docubridge_poc\Installer"
$wix = "C:\Program Files (x86)\WiX Toolset v3.11\bin\heat.exe"
$root = "D:\git\fd.docuBridge\docubridge_poc\Installer\publish"
& $wix dir "$root\WindowsFormsApp1" `
-cg App1Group -dr APP1DIR `
-scom -sreg -srd -ke -gg -sfrag `
-var var.App1Src `
-out "App1_Harvest.wxs"
& $wix dir "$root\docubridge_poc" `
-cg App2Group -dr APP2DIR `
-scom -sreg -srd -ke -gg -sfrag `
-var var.App2Src `
-out "App2_Harvest.wxs"
& $wix dir "$root\docuBridge.Server.Configurator" `
-cg App3Group -dr APP3DIR `
-scom -sreg -srd -ke -gg -sfrag `
-var var.App3Src `
-out "App3_Harvest.wxs"
Select-String -Path .\App1_Harvest.wxs,.\App2_Harvest.wxs,.\App3_Harvest.wxs `
-Pattern 'Source="\$\(\s*var\.App[123]Src\)'
Wichtiger Hinweis: manuelle Änderungen in
*_Harvest.wxs(Pflichtschritt nach jedem Harvest)Die Dateien
App1_Harvest.wxs,App2_Harvest.wxsundApp3_Harvest.wxswerden bei jedem Durchlauf vonheat.exe
vollständig neu generiert. Alle manuell eingefügten Anpassungen werden dabei überschrieben.Folge: Wenn in diesen Harvest-Dateien manuelle Erweiterungen gepflegt werden (z. B. Shortcuts oder Windows-Dienst-Definitionen),
müssen diese Änderungen nach jedem Harvest erneut eingepflegt werden.Betroffene manuelle Erweiterungen:
App1_Harvest.wxs: Desktop- und Startmenü-Verknüpfungen (docuBridge Client)App2_Harvest.wxs:ServiceInstallundServiceControlbeimComponentmitdocubridge_poc.exe(docuBridge Server)App3_Harvest.wxs: Startmenü-Verknüpfung (docuBridge Server Configurator)Wird dieser Schritt übersprungen, kann das MSI zwar gebaut werden, aber es fehlen u. a. Verknüpfungen und/oder die Dienstinstallation.
& "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" `
"D:\git\fd.docuBridge\docubridge_poc\Installer\Installer.wixproj" `
/t:Rebuild /p:Configuration=Release /m
Diese Fragmente werden manuell in App1_Harvest.wxs ergänzt.
<Fragment>
<DirectoryRef Id="DesktopFolder">
<Component Id="cmp_DocuBridgeClient_DesktopShortcut"
Guid="*">
<Shortcut Id="sc_WinFormsApp1_Desktop"
Directory="DesktopFolder"
Name="docuBridge Client"
Target="[APP1DIR]WindowsFormsApp1.exe"
WorkingDirectory="APP1DIR" />
<RegistryValue Root="HKCU"
Key="Software\faktur:digital\docuBridge"
Name="DesktopShortcut"
Type="integer"
Value="1"
KeyPath="yes" />
</Component>
</DirectoryRef>
</Fragment>
<Fragment>
<DirectoryRef Id="ProgramMenuFolder">
<Component Id="cmp_DocuBridgeClient_StartMenu" Guid="*">
<Shortcut Id="sc_Client_StartMenu"
Name="docuBridge Client"
Target="[APP1DIR]WindowsFormsApp1.exe"
WorkingDirectory="APP1DIR" />
<RegistryValue Root="HKCU"
Key="Software\faktur:digital\docuBridge"
Name="ClientStartMenu"
Type="integer"
Value="1"
KeyPath="yes" />
</Component>
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="App1Group">
<ComponentRef Id="cmp_DocuBridgeClient_DesktopShortcut" />
<ComponentRef Id="cmp_DocuBridgeClient_StartMenu" />
<!-- weitere ComponentRef aus Harvest -->
</ComponentGroup>
</Fragment>
Installation des Servers als Windows-Dienst ohne automatischen Start.
In App2_Harvest.wxs wird beim Component mit docubridge_poc.exe der Dienst ergänzt.
<Component Id="cmp59617D4686D5A9B63084051CD59361AA" Guid="{B3CFD9F3-4DD7-4272-A35D-A817C80264A5}">
<File Id="filA6006AA4A90F4248FF24B1A5C3B4E6CB" KeyPath="yes" Source="$(var.App2Src)\docubridge_poc.exe" />
<ServiceInstall Id="DocuBridgeServiceInstall"
Type="ownProcess"
Name="docubridge_poc"
DisplayName="docuBridge Server"
Start="demand"
ErrorControl="normal" />
<ServiceControl Id="DocuBridgeServiceControl"
Name="docubridge_poc"
Stop="both"
Remove="uninstall"
Wait="yes" />
</Component>
Diese Fragmente werden manuell in App3_Harvest.wxs ergänzt.
<Fragment>
<DirectoryRef Id="ProgramMenuFolder">
<Component Id="cmp_DocuBridgeConfigurator_StartMenu" Guid="*">
<Shortcut Id="sc_Configurator_StartMenu"
Name="docuBridge Configurator"
Target="[APP3DIR]docuBridge.Server.Configurator.exe"
WorkingDirectory="APP3DIR" />
<RegistryValue Root="HKCU"
Key="Software\faktur:digital\docuBridge"
Name="ConfiguratorStartMenu"
Type="integer"
Value="1"
KeyPath="yes" />
</Component>
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="App3Group">
<ComponentRef Id="cmp_DocuBridgeConfigurator_StartMenu" />
<!-- weitere ComponentRef aus Harvest -->
</ComponentGroup>
</Fragment>
Nach erfolgreichem Rebuild werden folgende Artefakte committed:
App1_Harvest.wxs, App2_Harvest.wxs, App3_Harvest.wxs (inkl. manueller Ergänzungen)Installer.wixproj / weitere .wxs, falls angepasst