Contenuti
Aggiunta e aggiornamento dei dati
Attività in ERP Standard
Nel database del sistema ERP Standard esiste la procedura POS.ExportCustomObjects. Bisogna sovrascriverla perché essa scarichi dal database i dati che devono trovarsi in un dato POS e perché li restituisca nel formato XML.
Alla procedura vengono trasferiti i parametri che consentono di limitare e adattare i set di dati inviati a un POS specifico:
- @rowVersion (bigint): valore che consente di eseguire la sincronizzazione differenziale. Questo è un valore che si trova in XML generato da questa procedura durante l’ultima sincronizzazione riuscita (nell’attributo RowVersion).
- @companyUnitId (int): ID del centro in cui è definito POS (CompanyStructure.CompanyUnits)
- @pointOfSaleId (int): ID di POS (Synchronization.PointsOfSales)
- @languageId (int): ID della lingua dei dati (Dictionaries.Languages)
Durante l’esportazione dei dati dalle colonne del tipo bit e datetime bisogna utilizzare la funzione GetBitString e POS.GetDatetimeString.
Attività in POS
Nel database POS esiste la procedura Synchronization.ImportCustomObjects. Bisogna sovrascriverla perché questa aggiorni nel database POS le tabelle in base ai dati ricevuti da ERP Standard in formato XML, cioè i dati generati dalla procedura POS.ExportCustomObjects.
Esempio
L’esempio dimostra la sincronizzazione differenziale dei dati da due tabelle: esportazione dal database ERP Standard e importazione verso il database POS:
- Dic_PaymentForms → Configuration.CustomPaymentForms
- Dic_Country → Configuration
a) Procedura di esportazione
ALTER PROCEDURE [POS].[ExportCustomObjects] @rowVersion bigint, @companyUnitId int, @pointOfSaleId int, @languageId int AS BEG+IN 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) Procedura di importazione
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
Gestione dei dizionari generali
Aggiornamento della procedura di esportazione
Nella procedura POS.ExportGenericDirectories, nella clausola WHERE bisogna includere InternalName del dizionario che anche va sincronizzato.
Nella procedura POS.ExportGenericDirectoryValues, nella clausola WHERE bisogna includere InternalName del dizionario che anche va sincronizzato.
Chiavi esterne per lo schema Standard
Per le tabelle sincronizzate
La disponibilità degli oggetti, sincronizzazioni ecc. possono, al livello della riga in una data tabella, influire i dati che saranno sincronizzato. L’esempio costituiscono i clienti, i gruppi di clienti, i magazzini, i registri, le modalità di pagamento ecc.
Per evitare la valutazione multipla riguardante i dati da sincronizzare nelle tabelle derivanti, bisogna ricorrere alla tabella POS.SentObjects.
Esempio: Esportazione della definizione delle tasse associate a un cliente
(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)
il valore del tipo dell’oggetto sincronizzato può essere trovato nella tabella POS.SyncTypes.
Per le tabelle non sincronizzate
Bisogna implementare da soli il processo di sincronizzazione, come se la tabella provenisse da una parte aggiunta del sistema aggiunta.
Eliminazione dei dati
Attività in ERP Standard
a) Alla tabella DeletionTypes bisogna aggiungere l’inserzione con Id >= 1000 e il nome unico del tipo degli oggetti eliminati.
b) Nel trigger AFTER DELETE della tabella dalla quale i dati eliminati vanno sincronizzati verso POS bisogna aggiungere alla tabella POS.DeletedObjects le inserzioni riguardanti gli oggetti eliminati. Colonne da completare:
- DeletionTypeId: identificatore del tipo definito nel punto a)
- Ident: identificatore dell’oggetto eliminato. Questo può essere un numero (int), GUID (uniqueidentifier), nvarchar o l’insieme di valori separati dal simbolo “|”, per es. „3428|654”. Vedi anche i punti riguardanti le attività in POS (colonne IdentColumnName, IdentColumnType).
- POSId: identificatore di POS (Synchronization.PointsOfSales): bisogna completarlo se l’oggetto va eliminato soltanto da una postazione POS specifica o lasciare NULL se dovrebbe essere eliminato da tutte le postazioni.
Attività in POS
Ala tabella Synchronization.DeletionTypes bisogna aggiungere la riga che definisce il metodo di gestione dal meccanismo di sincronizzazione dell’informazione riguardante l’eliminazione degli oggetti provenienti dal sistema ERP.
Sono disponibili due modi di eliminazione: automatico e personalizzato.
- Nella modalità automatica il meccanismo di sincronizzazione eliminerà automaticamente i dati da una tabella specifica, identificando le righe in base ai nomi delle colonne inseriti (i valori nelle colonne TableName, IdentColumnName, IdentColumnType devono essere completate e anche NULL nella colonna CustomProcName). Utilizzato per l’eliminazione in POS di quasi tutti i tipi di oggetti possibil da eliminare in ERP (vedi: inserzioni standard nella tabella Synchronization.DeletionTypes).
- Invece la modalità personalizzata richiede la specificazione della procedura che gestirà l’eliminazione degli oggetti di un dato tipo (la colonna CustomProcName deve essere completata). La modalità viene utilizzata quando la condizione di eliminazione è più complicata e non è possibile utilizzare il meccanismo automatico o quando durante l’eliminazione bisogna eseguire operazioni aggiuntive.
La tabella Synchronization.DeletionTypes contiene le seguenti colonne:
- DelType: lo stesso nome che nel database ERP Standard, nella tabella DeletionTypes.
- Order: numero che indica l’ordine di eliminazione dei tipi di oggetti.
- TableName [soltanto la modalità automatica]: nome della tabella da cui gli oggetti vanno eliminati automaticamente nell’ambito di un dato tipo DelType.
- IdentColumnName [soltanto la modalità automatica]: nomi delle colonne (separate dal simbolo “|”) secondo cui va eseguita l’identificazione automatica delle righe eliminate. „Id”, „GUID”, „PriceTypeId|CustomerGroupId”. Il loro numero e l’ordine deve essere conforme al valore inserito nel database ERP Standard, nella colonna POS.DeletedObjects.Ident.
- IdentColumnType [soltanto la modalità automatica]: tipi di colonne definite come IdentColumnName, nella stessa quantità e nello stesso ordine, per es. „int”, „uniqueidentifier”, „int|int”. Nel caso del tipo nvarchar(x) bisogna inserire “nvarchar”.
- CustomProcName [soltanto la modalità personalizzata]: nome della procedure responsabile per l’eliminazione degli oggetti di un dato tipo. Dovrebbe utilizzare i dati provenienti dalla tabella temporanea #DeletedObjects. Vedi: procedure esistenti Synchronization.DeleteCustomerPriceTypes, Synchronization.DeleteWarehouseDocuments.