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