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="data source=SEVTOPFACT\SQLTOPFACT;initial catalog=topfact6Sync;User ID=USERNAMEXXX;Password=xxxxxx;MultipleActiveResultSets=True;App=EntityFramework"" 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