Erfolgreich übertragene Datensätze müssen nicht erneut an Business Central übertragen werden – es sei denn, sie wurden in der Quell-Datenbank zwischenzeitlich geändert. Glücklicherweise verfügt Navision standardmäßig über eine zusätzliche Spalte namens timestamp in jeder Tabelle. Diese wird im normalen Betrieb verwendet, um Änderungen an Datensätzen zu erkennen und die bekannte Meldung „… Ein anderer Anwender hat den Datensatz geändert …“ auszugeben.
DataMigrate Pro macht sich diesen Mechanismus zunutze und erkennt auf Basis des timestamp, welche Datensätze seit der letzten Übertragung verändert wurden.
In einer Protokolltabelle werden automatisch alle Datensätze samt zugehörigem timestamp gespeichert, für die Business Central eine erfolgreiche Übertragung bestätigt hat.
Eine intelligente, dynamische Abfrage stellt sicher, dass im Betriebsmodus --changesonly 1 nur jene Datensätze erneut übertragen werden, deren aktueller timestamp noch nicht in der Protokolltabelle erfasst wurde. Zusätzlich erkennt das System auch Datensätze, die zwar bereits protokolliert wurden, aber inzwischen im Quellsystem gelöscht wurden – etwa, wenn nach Migrationsbeginn Einträge entfernt wurden.
Mit folgendem Befehl werden somit ausschließlich neue oder geänderte Stammdaten und Einrichtungsdaten an Business Central übertragen:
DataMigratePro -t putalldata --tablegroup "1,2" --changesonly 1 --automappingHier ein Beispiel der Abfrage anhand der Debitoren-Tabelle, welche an DataMigrate Pro die Änderungen und die zu löschenden Datensätze übergibt.
;WITH T AS (SELECT CAST(T.[timestamp] AS BIGINT) AS timestamp, ROW_NUMBER() OVER(ORDER BY T.[No_]) [RowNumber], T.[No_],T.[Name],T.[Search Name],T.[Name 2],T.[Address],T.[Address 2],T.[City],T.[Contact],T.[Phone No_],T.[Telex No_],T.[Our Account No_],T.[Territory Code],T.[Global Dimension 1 Code],T.[Global Dimension 2 Code],T.[Chain Name],T.[Budgeted Amount],T.[Credit Limit (LCY)],T.[Customer Posting Group],T.[Currency Code],T.[Customer Price Group],T.[Language Code],T.[Statistics Group],T.[Payment Terms Code],T.[Fin_ Charge Terms Code],T.[Salesperson Code],T.[Shipment Method Code],T.[Shipping Agent Code],T.[Place of Export],T.[Invoice Disc_ Code],T.[Customer Disc_ Group],T.[Country_Region Code],T.[Collection Method],T.[Amount],T.[Blocked],T.[Invoice Copies],T.[Last Statement No_],T.[Print Statements],T.[Bill-to Customer No_],T.[Priority],T.[Payment Method Code],COALESCE(NULLIF(NULLIF(T.[Last Date Modified],'1753-01-01'),'1900-01-01'), '') [Last Date Modified],T.[Application Method],T.[Prices Including VAT],T.[Location Code],T.[Fax No_],T.[Telex Answer Back],T.[VAT Registration No_],T.[Combine Shipments],T.[Gen_ Bus_ Posting Group],T.[Post Code],T.[County],T.[E-Mail],T.[Home Page],T.[Reminder Terms Code],T.[No_ Series],T.[Tax Area Code],T.[Tax Liable],T.[VAT Bus_ Posting Group],T.[Reserve],T.[Block Payment Tolerance],T.[IC Partner Code],T.[Prepayment %],T.[Primary Contact No_],T.[Responsibility Center],T.[Shipping Advice],dbo.DecodeDateFormula(CAST(T.[Shipping Time] AS VARBINARY(32))) [Shipping Time],T.[Shipping Agent Service Code],T.[Service Zone Code],T.[Allow Line Disc_],T.[Base Calendar Code],T.[Copy Sell-to Addr_ to Qte From] FROM [Demo Database NAV (6-0)].dbo.[CRONUS AG$Customer] T WITH (NOLOCK))
SELECT T.*, 1 [Type_of_Change], 'Field1=0('+T.[No_]+')'[EncodedPrimaryKey]
FROM T
WHERE NOT EXISTS
(
SELECT 1
FROM [Migration].dbo.[Transfer] TL WITH (NOLOCK)
WHERE TL.[TableNo]=18
AND TL.[EncodedPrimaryKey]='Field1=0('+T.[No_]+')'
AND TL.[TimestampValue]=CAST(T.[timestamp] AS BIGINT)
)
UNION
SELECT T.*, 2 [Type_of_Change], TL.[EncodedPrimaryKey]
FROM [Migration].dbo.[Transfer] TL WITH (NOLOCK)
LEFT JOIN T ON TL.[EncodedPrimaryKey]='Field1=0('+T.[No_]+')' AND TL.[TableNo]=18
WHERE T.timestamp IS NULL AND TL.[TableNo]=18