Table des matières
Exportation sur POS
Il est possible de synchroniser les données non-associées aux objets créés dans POS et synchronisés avec le système ERP. À ces fins, il faut utiliser la procédure Synchronization.ExportCustoms. Il ne faut pas oublier que la structure dans le corps de la procédure <Customs><Custom> doit être conservée, mais la structure sous le nœud <Custom> peut être librement modifiée.
Il est souhaitable que la structure des tableaux à partir desquels nous sélectionnons les données à télécharger soit sous forme d’arbre et que le tableau principal contient les colonnes suivantes :
- GUID – assure l’identification de l’objet entre POS et ERP
- Id – à la relation dans la structure
- Type – si nous voulons différencier les données sur DataService, d’autant plus s’il existe des extensions individuelles
- WasSentToERP – pour filtrer les données qui ont déjà été envoyées
Marquer les données envoyées
Il est possible d’utiliser une méthode standarde du marquage des objets envoyés pour marquer les objets personnalisés.
À ces fins, nous surchargeons la méthode du service ISynchronizationRepository (cette zone n’a pas de points de branchement)
public class SynchronizationRepositoryExt : SynchronizationRepository
{
public override void MarkIfWasSentToERP(string xml)
{
base.MarkIfWasSentToERP(xml);
using (var context = new POSDBContext())
{
context.ExecuteProcedure("Synchronization.MarkSentCustomData", xml);
}
}
}
À l’intérieur, nous pouvons par exemple appeler une procédure qui marquera les objets envoyés.
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
Exemple d’exportation
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
Importation du côté de DataService
L’importation des données se fait en utilisant le service IDataCustomService et en surchargeant la méthode SaveCustom. L’argument pour la méthode est chaque ligne Custom sous forme d’objet XElement.
Pour prendre en charge plusieurs extensions, il faut utiliser les points de branchement pour DataService.
Snippet pour l’importation
[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)
{
//désérialisation + enregistrement des données
}
}