SQL: Importieren von DocuWare Stempeln ins topfact Archiv mit dem Stamp Tool

topfact AG intern>Organisation>Richtlinien - verbindliche Anweisungen>Urlaub - Organisationsrichtlinie>technische Dokumentation Überblick>Standard Tools und Skripts>SQL: Importieren von DocuWare Stempeln ins topfact Archiv mit dem Stamp Tool
Produkt: topfact6 MyWork
Erstellt am 28.12.2020 10:43, letzte Aktualisierung am 05.06.2026 11:02.

Um die Stempel aus DocuWare auszulesen sind folgende Schritte nötig:

  • Ausführen des StampTools auf die Dateistruktur des DW Archivs
  • Vorbereiten der DWStamps Tabelle mit tf_docids
  • Einfügen der DWStamps als Kommentare im topfact Archivsystem


Anlegen der DWStamps Tabelle 

Folgendes Script erstellt die DWStamps Tabelle in der Zieldatenbank


USE [topfact6Sync_xxxxkundexxxx]

GO

 

SET ANSI_NULLS ON

GO

 

SET QUOTED_IDENTIFIER ON

GO

 

CREATE TABLE [dbo].[DWStamps](

[id] [int] IDENTITY(1,1) NOT NULL,

[docid] [int] NULL,

[username] [varchar](50) NULL,

[datecreated] [datetime] NULL,

[value] [varchar](max) NULL,

[color] [varchar](50) NULL,

[tfdocid] [int] NULL,

 CONSTRAINT [PK_DWStamps5] PRIMARY KEY CLUSTERED

(

[id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

 

 


Ausführen des StampImport Tools auf die Dateistruktur des DW Archivs

Das Stamp Tool extrahiert aus den DocuWare XML Dateien die Stempel und Annotationen die auf dieses Dokument ausgeführt wurden. 

Das Ergebnis ist eine Datenbanktabelle in einer bestimmten Ziel-DB namens "DWStamps". Diese enthält den Nutzer, Datum und den Inhalt des Stempels.

  • Starten über topfact.DocuWare.XMLReader.exe als Konsolenanwendung


Konfiguriert wird das StampImport Tool in der zugehörigen Datei "topfact.DocuWare.XMLReader.exe.config"

Hier kann der Import-Pfad und die Ziel-Datenbank gewählt werden.


Wichtig ist der Connection String. Dieser muss direkt den Server, die Datenbank und die Connection enthalten.

<add name="topfact6SyncEntities" connectionString="metadata=res://*/DB.DWModel.csdl|res://*/DB.DWModel.ssdl|res://*/DB.DWModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SEVTOPFACT\SQLTOPFACT;initial catalog=topfact6Sync;User ID=USERNAMEXXX;Password=xxxxxx;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />


Achtung: Prüfen des Ergebnis

  • Log: C:\ProgramData\topfact AG\Logs\DocuWare XML
  • Wenn in der Logfile Exceptions auftauchen kann es sein, das Tool hat nicht alle xml Dateien verarbeitet! 
  • Grund prüfen und nochmal laufen lassen.


Sicherungskopie der DWStamps Tabelle (z.B. pro Archiv)

Dies ist besonders bei Systemen mit mehreren Archiven nötig. 

USE [topfact6Sync_KUNDENDBNAME];


/* copy stamps info to a backup copy table */

SELECT *

INTO [dbo].DWStamps_NAMEDERQUELLDATENBANK

FROM [dbo].[DWStamps]

 

/* clean original table afterwards. ready for next archive ... */

truncate table [dbo].[DWStamps]


Vorbereiten der DWStamps Tabelle mit tf_docids

In der Tabelle DWStamps ist eine Spalte "tfdocid" mit NULL vorgesehen um den späteren INSERT auszuführen. 

Um die tfdocid zu den passenden Dokumenten zu finden müssen die Datensätze anhand der alten DWDOCID gematched werden.

Dazu ist notwendig, dass alle DocuWare Dokumente bereits mit ihrer DWDOCID im topfact Archiv importiert sind (via XML Reader)


-- SQL Script um die vom Stamp Tool erstellte DWStamps Tabelle mit den korrekten tf_docids zu füllen

-- Quelldatenbank für DWStamps beachten!

-- Zielarchiv beachten!

 

UPDATE

[topfact6Sync_HardtAllbrand].[dbo].[DWStamps]

SET

[topfact6Sync_HardtAllbrand].[dbo].[DWStamps].tfdocid = archiv.tf_docid

 

FROM

[topfact6Sync_HardtAllbrand].[dbo].[DWStamps] AS dwstamps,

[topfactArchiv].[dbo].tf_Archive006AS archiv

 

WHERE

dwstamps.docid = archiv.dwdocid



Prüfen ob alle Nutzer in Stempeln auch noch existieren

Falls in der rechten Spalte "NULL" erscheint würden diese Stempel nicht eingefügt wenn nicht in DWStamps die Nutzernamen auf einen existierenden angepasst werden.

SELECT

distinct dwstamps.username as AlteStampsUserKuerzel, tfbenutzer.Kuerzel as NeueNutzerKuerzel

FROM

 

  [topfact6Sync].[dbo].[DWStamps_whm] dwstamps

 

  LEFT JOIN [topfact6].[dbo].[TF_Benutzer] tfbenutzer

  ON dwstamps.username = tfbenutzer.Kuerzel

 

  order by dwstamps.username asc


Lösung für NULL-Nutzer

Initial muss ein tf6 Nutzer angelegt werden mit Benutzername und Kürzel "dwstampdummy". Dieser wird dann in der Zuordnung verwendet.


Hinzufügen einer Spalte "alterusername" zu der DWStamps Tabelle.

Dann ausführen dieses Scripts (sichern der original Nutzernamen)

update

   [topfact6Sync].[dbo].[DWStamps_whm]

   SET alterusername = username

   WHERE id > 0


Dann ausführen dieses Scripts (Überschreiben der alten Nutzernamen mit "dwstampdummy")

 

UPDATE dwstamps

 

  SET dwstamps.username = 'dwstampdummyKUNDENNAME'

 

  FROM

  [topfact6Sync_RohdeClean].[dbo].[DWStamps] dwstamps

 

  WHERE dwstamps.alterusername

  IN(SELECT DISTINCT alterusername

  FROM [topfact6Sync_RohdeCleanxxxxxxxxxx].[dbo].[DWStamps] dwstamps

  WHERE alterusername NOT IN (SELECT DISTINCT kuerzel FROM [topfact6].[dbo].[TF_Benutzer] tfbenutzer WHERE tfbenutzer.OrgID = 28111111111)

  )

 


Einfügen der DWStamps als Kommentare im topfact Archivsystem

Bevor alle verfügbaren Stempel ins topfact Archiv übernommen werden kann es Sinn machen die bisherigen Importe zu löschen:

Die ArchiveId und die ArchiveGuid identifizieren das Zielarchiv. Hier besonders in der Cloud vorsichtig sein!


 DELETE

  FROM [topfact6].[dbo].[MW_QuickCheckComments]

  WHERE ID IN (

select ID from [topfact6].[dbo].[MW_QuickCheckComments]

 WHERE ArchiveId = 18111111111111 --rohde clean or andere Kundneid

 AND Title LIKE 'DW-Stempel%'

 )


Das finale Script, welches nun ausgeführt wird fügt im topfact Archivsystem die entsprechenden DWStamps als Kommentare hinzu. Die Nutzernamen werden anhand der Namenskuerzel gematched. 

Achtung! Die Namenskürzel-Zuordnung kann bei anderen Kunden ggf. nicht wirksam sein. Es ist jedoch zwingend nötig, dass die Kommentare eine Nutzer-ID haben die auch im System existiert. Ansonsten wird der Stempel nicht angezeigt! (Siehe auch oben bei "Lösung für NULL-User")


 

INSERT INTO [topfact6].[dbo].[MW_QuickCheckComments]

           ([QuickCheckId]

           ,[ArchiveId]

           ,[ArchiveGuid]

           ,[DocId]

           ,[Title]

           ,[Comment]

           ,[UserId]

           ,[Username]

           ,[DateCreated]

           ,[Color])

SELECT

0 AS QuickCheckId, --freies Kommentar

7111111 AS ArchiveId, -- Zielarchiv-ID

'FC27396B-52F4-4BFF-AB9C-9442961A6748xxxxxxxxxxxxxxxxxx' AS ArchiveGuid, -- Zielarchiv-GUID

 

dwstamps.tfdocid AS DocId, --die tfArchiv ID -- muss vorher gesetzt werden!

 

-- 'DW-Stempel' AS Title, --nur nutzen wenn kein "alter" nutzername angelegt wurde

CONCAT('DW-Stempel (',dwstamps.alterusername,')') AS Title,


dwstamps.value AS Comment,

 

tfbenutzer.UserId AS UserId,

tfbenutzer.Benutzername AS Username,

 

dwstamps.datecreated AS DateCreated,

dwstamps.color AS Color

 

FROM

  [topfact6Sync_HardtAllbrandxxxxxxxx].[dbo].[DWStamps] dwstamps,

  [topfact6].[dbo].[TF_Benutzer] tfbenutzer

 

  WHERE

dwstamps.username = tfbenutzer.Kuerzel

AND dwstamps.tfdocid IS NOT NULL

AND dwstamps.value IS NOT NULL

AND tfbenutzer.OrgID = 281111111  --OrgId von RohdeClean

 

AND dwstamps.docid = 1094395 --DWDOCID eines TESTBELEGs



Inhaltsverzeichnis