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
}
}