Esportazione in POS
Esiste la possibilità di sincronizzare i dati non associati agli oggetti creati in POS e sincronizzati verso il sistema ERP. Per farlo bisogna utilizzare la procedura Synchronzation.ExportCustoms. Bisogna ricordare di mantenere la struttura nel corpo della procedura <Customs><Custom>, invece la struttura sotto il nodo <Custom> è pienamente libera.
Si raccomanda che la struttura delle tabelle da cui vengono selezionati i dati da trasferire sia un albero e la tabella principale possieda le colonne:
- GUID: assicurerà l’identificazione dell’oggetto tra POS e ERP
- Id: per la relazione nella struttura
- Type: se l’utente vuole differenziare i dati su DS, soprattutto se esistessero parti create separatamente dell’applicazione
- WasSentToERP: per filtrare i dati già inviati
Contrassegno dei dati inviati
Esiste la possibilità di utilizzare il metodo standard per contrassegnare gli oggetti inviati per contrassegnare gli oggetti non standard.
Per farlo bisogna sovraccaricare il metodo del servizio ISynchronizationRepository (quest’area non possiede punti di estensioni)
Contrassegno dei dati inviati
Esiste la possibilità di utilizzare il metodo standard per contrassegnare gli oggetti inviati per contrassegnare gli oggetti non standard.
Per farlo bisogna sovraccaricare il metodo del servizio ISynchronizationRepository (quest’area non possiede punti di estensioni)
public class SynchronizationRepositoryExt : SynchronizationRepository { public override void MarkIfWasSentToERP(string xml) { base.MarkIfWasSentToERP(xml); using (var context = new POSDBContext()) { context.ExecuteProcedure("Synchronization.MarkSentCustomData", xml); } } } All’interno è possibile, per esempio, chiamare la procedura che contrassegnerà gli elementi inviati. CREATE PROCEDURE [Synchronization].[MarkSentCustomData] @p0 xml AS BEGIN UPDATE CustomSchema.CustomRootTable SET WasSentToERP = 1 Where GUID in (SELECT xmlData.Col.value('@GUID','varchar(max)') FROM @p0.nodes('/Customs/Custom') xmlData(Col)) END GO
Esempio di esportazione
CREATE PROCEDURE [Synchronization].[ExportCustoms] AS BEGIN SET NOCOUNT ON; select pad.GUID as [@GUID], pad.Type as [@Type], pad.Data1 as [@Data1], Synchronization.GetDatetimeString(pad.ChangeDate) as [@ChangeDate], ( select td.Number as [@NumberString], td.Status as [@Status], td.Value as [@Value] from CustomSchema.Table1 td where pad.Id = td.RootId for xml path('Table1'), root('Tables1'), type ), ( select ti.ToPayNet as [@ToPayNet], ti.Points as [@Points], ti.ToPay as [@ToPay] from CustomSchema.Table2 ti where pad.Id = ti.RootId for xml path('Table2'), root('Tables2'), type ) from CustomSchema.RootData pad where pad.WasSentToERP = 0 for xml path('Custom'), root('Customs') END GO
Importazione in DataService
L’importazione viene eseguita con l’utilizzo del servizio IdataCustomService e sovraccarico del metodo SaveCustom. Il metodo, come argomento, riceve ogni riga Custom sotto forma di un oggetto XElement.
Per gestire più elementi aggiunti all’applicazione POS bisogna utilizzare i punti di estensione per DataService.
Snippet per l’importazione
[DataServiceBusinessModule] public static class Module { [MethodInitializer] public static void Initialize() { var dataCustomService = IoC.Container.Resolve<IDataCustomExtensionPointService>(); dataCustomService.OnSaveCustomEvent += DataCustomService_OnSaveCustomEvent; } private static void DataCustomService_OnSaveCustomEvent (object sender, XEEventArgs e) { //deserializzazione + salvataggio dei dati } }