Daten hinzufügen und aktualisieren
In Comarch ERP Standard
In der Comarch ERP Standard-Datenbank gibt es eine POS.ExportCustomObjects-Prozedur. Sie muss so überschrieben werden, damit sie Daten für die betreffende POS-Stelle aus der Datenbank übernimmt und im XML-Format zurückgibt.
Der Prozedur werden Parameter übergeben, um die an eine bestimmte Kasse gesendeten Daten einzuschränken und anzupassen:
- @rowVersion (bigint) – mit dem Wert kann die differenzierte Synchronisation durchgeführt werden. Dies ist ein Wert, der in der von dieser Prozedur bei der letzten erfolgreichen Synchronisierung erzeugten XML-Datei (im Attribut RowVersion) zu finden ist.
- @companyUnitId (int) – Id des Zentrum, in dem POS definiert wurde (CompanyStructure.CompanyUnits)
- @pointOfSaleId (int) – POS-Id (Synchronization.PointsOfSales)
- @languageId (int) – Id der Datensprache (Dictionaries.Languages)
Bei dem Datenexport aus den Spalten vom typ bit und datetime sollen Sie die POS.GetBitString und POS.GetDatetimeString-Funktionen verwenden.
In Comarch POS
In der POS-Datenbank gibt es eine Synchronization.ImportCustomObjects-Prozedur. Sie sollte überschrieben werden, damit sie die Tabellen in der POS-Datenbank auf der Grundlage der von ERP Standard empfangenen XML-Daten aktualisiert, die durch das Verfahren in Kapitel 1 erzeugt wurden.
Beispiel
Das Beispiel zeigt die differenzierte Synchronisation von zwei Tabellen – Export aus der ERP Standard-Datenbank und Import in die POS-Datenbank:
- Dic_PaymentForms -> Configuration.CustomPaymentForms
- Dic_Country -> Configuration.CustomCountries
a) Exportprozedur
ALTER PROCEDURE [POS].[ExportCustomObjects] @rowVersion bigint, @companyUnitId int, @pointOfSaleId int, @languageId int AS BEGIN SET NOCOUNT ON; declare @dbts bigint = cast(@@DBTS as bigint) select @dbts as [@RowVersion], (select pf.Id as [@Id], pf.Name as [@Name], pf.CategoryId as [@Type], POS.GetBitString(pf.Active) as [@IsActive] from SecDictionaries.Dic_PaymentForms pf where pf.Timestamp > @rowVersion for xml path('PaymentForm'), type), (select c.Id as [@Id], c.Code as [@Code], c.Name as [@Name], POS.GetBitString(c.Active) as [@IsActive] from dbo.Dic_Country c where c.Timestamp > @rowVersion for xml path('Country'), type) for xml path('CustomObjects') END
b) Importprozedur
ALTER PROCEDURE [Synchronization].[ImportCustomObjects] @XML xml AS BEGIN SET NOCOUNT ON; -- Countries -- select doc.col.value('@Id', 'int') Id, doc.col.value('@Code', 'nvarchar(50)') Code, doc.col.value('@Name', 'nvarchar(100)') Name, doc.col.value('@IsActive', 'bit') IsActive into #Countries from @XML.nodes('/DataFromERP/CustomObjects/Country') doc(col) update pos set Code = erp.Code, Name = erp.Name, IsActive = erp.IsActive from Configuration.CustomCountries pos join #Countries erp on erp.Id = pos.Id insert into Configuration.CustomCountries ( Id, Code, Name, IsActive ) select Id, Code, Name, IsActive from #Countries erp where not exists (select 1 from Configuration.CustomCountries where Id = erp.Id) -- Payment forms -- select doc.col.value('@Id', 'int') Id, doc.col.value('@Name', 'nvarchar(50)') Name, doc.col.value('@Type', 'tinyint') [Type], doc.col.value('@IsActive', 'bit') IsActive into #PaymentForms from @XML.nodes('/DataFromERP/CustomObjects/PaymentForm') doc(col) update pos set Name = erp.Name, Type = erp.Type, IsActive = erp.IsActive from Configuration.CustomPaymentForms pos join #PaymentForms erp on erp.Id = pos.Id insert into Configuration.CustomPaymentForms ( Id, Name, Type, IsActive ) select Id, Name, Type, IsActive from #PaymentForms erp where not exists (select 1 from Configuration.CustomPaymentForms where Id = erp.Id) END
Umgang mit universellen Dictionaries
Exportprozedur aktualisieren
In der Prozedur POS.ExportGenericDirectories, in der Klausel WHERE ist InternalName von Dictionary, welcher auch synchronisiert werden soll, zu berücksichtigen.
In der Prozedur POS.ExportGenericDirectoriesValues, in der Klausel WHERE ist InternalName von Dictionary, welcher auch synchronisiert werden soll, zu berücksichtigen.
Fremdschlüssel für Comarch ERP Standard
Für synchronisierte Tabellen
Die Verfügbarkeit der Objekten, Berechtigungen usw. in einer Zeile der Tabelle können darauf auswirken, welche Daten synchronisiert werden. Beispielsweise können dies Kunden, Kundengruppen, Lager, Register, Zahlungsformen usw. sein.
Um die Mehrfachauswertung zu vermeiden, welche Daten in den abgeleiteten Tabellen (auf Basis von FK) synchronisiert werden sollen, sollte die Tabelle POS.SentObjects verwendet werden.
Beispiel: Export von kundenbezogenen Steuerdefinitionen
(select ven.Id as [@Id], ven.ActivityId as [@ActivityId], ven.VendorId as [@VendorId] from Implementations.VendorActivityConnectionsEcoTax ven inner join Implementations.ActivityEcoTax ac on ven.ActivityId = ac.Id inner join Implementations.SettingsEcoTax sett on ac.Id = sett.CompanyActivityId and sett.CompanyId = @companyUnitId inner join POS.SentObjects so on so.ObjectId = ven.VendorId and so.SyncTypeId = 14 and so.POSId = @pointOfSaleId where ven.Timestamp > @rowVersion for xml path('VendorActivityConnectionsEcoTax'), type)
Der Wert des Typs des synchronisierten Objekts ist in der Tabelle POS.SyncTypes zu finden.
Für nicht synchronisierte Tabellen
Der Synchronisierungsprozess muss selbst implementiert werden, damit die Tabelle aus der Erweiterung kommt.
Daten löschen
In Comarch ERP Standard
- Fügen Sie der Tabelle DeletionTypes einen Eintrag mit Id >= 1000 und einem eindeutigen Namen für den Typ der Objekte, die gelöscht werden sollen, hinzu.
- Fügen Sie im AFTER DELETE-Trigger der Tabelle, aus der die Löschung von Daten in POS synchronisiert werden soll, die Einträge DeletedObjects mit gelöschten Objekten ein. Spalten, die gefüllt werden sollen:
- DeletionTypeId – ID des im Punkt a) definierten Typs
- Ident – ID des gelöschten Objekts Dies kann eine Zahl (int), eine GUID (uniqueidentifier), nvarchar oder ein Wertsatz, der mit ‘|’ getrennt ist, z. B. „3428|654”. Siehe auch der folgende Punkt „In Comarch POS“ (Spalten IdentColumnName, IdentColumnType).
- POSId – POS-ID (Synchronization.PointsOfSales) – sollte ausgefüllt werden, wenn das Objekt nur an einer bestimmten Stelle gelöscht werden soll, oder als NULL gelassen werden, wenn es an allen Stellen gelöscht werden soll.
In Comarch POS
Fügen Sie der Tabelle Synchronization.DeletionTypes eine Zeile hinzu, die definiert, wie die Informationen über das Löschen von Objekten, die aus dem ERP-System gesendet werden, durch den Synchronisierungsmechanismus verarbeitet werden sollen.
Das Löschen von Daten kann auf zwei Arten erfolgen: automatisch und benutzerdefiniert.
- Automatisch: der Synchronisierungsmechanismus löscht die Daten aus der angegeben Tabelle automatisch, wobei die Zeilen anhand der angegebenen Spaltennamen identifiziert werden (die Werte in den Spalten TableName, IdentColumnName, IdentColumnType und NULL in Spalte CustomProcName sollen ausgefüllt werden). Es wird verwendet, um fast alle Arten von löschbaren Objekten in ERP an einer POS-Stelle zu löschen (siehe Standardeinträge in der Tabelle Synchronization.DeletionTypes).
- Benutzerdefiniert: es muss eine Prozedur angegeben werden, mit der Daten von einem bestimmten Typ gelöscht werden (die Spalte CustomProcName muss ausgefüllt werden). Es wird verwendet, wenn die Löschbedingung etwa komplizierter ist und der automatische Mechanismus nicht verwendet werden kann bzw. wenn beim Löschen zusätzliche Vorgänge durchgeführt werden müssen.
Die Tabelle Synchronization.DeletionTypes enthält folgende Spalten:
- DelType – Name, wie in der ERP-Standard-Datenbank in der DeletionTypes-Tabelle.
- Order – Zahl, die die Reihenfolge bestimmt, in der die Objekttypen gelöscht werden sollen.
- TableName [nur im automatischen Modus] – Name der Tabelle, aus der Objekte innerhalb des ausgewählten DelTyp automatisch gelöscht werden sollen.
- IdentColumnName [nur im automatischen Modus] – Namen der Spalten (mit dem Symbol „|” getrennt), nach denen die automatische Identifizierung der Zeilen, die gelöscht werden sollen, erfolgt, z. B. „Id”, „GUID”, „PriceTypeId|CustomerGroupId”. Die Zahl und die Reihenfolge muss mit dem Wert in der ERP-Standard-Datenbank in der Spalte POS.DeletedObjects.Ident übereinstimmen.
- IdentColumnType [nur im automatischen Modus] – Typen von Spalten, die als IdentColumnName definiert wurden, in der gleichen Menge und Reihenfolge, z. B. „int”, „uniqueidentifier”, „int|int”. Im Falle von nvarchar(x) geben Sie „nvarchar” ein.
- CustomProcName [nur im benutzerdefinierten Modus] – Name der Prozedur, mit der die Objekte des ausgewählten Typs gelöscht werden sollen. Sie soll Daten aus der temporären Tabelle #DeletedObjects verwenden. Siehe bestehende Prozeduren Synchronization.DeleteCustomerPriceTypes, Synchronization.DeleteWarehouseDocuments.