Estensibilità della sincronizzazione dei dati da POS: opzione 2

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

}

}


 

Czy ten artykuł był pomocny?