Daten in POS exportieren
Es ist möglich, nicht zusammenhängende Daten mit Objekten zu synchronisieren, die in POS erstellt und mit dem ERP-System synchronisiert wurden. Dazu muss die Prozedur Synchronization.ExportCustoms ausgeführt werden. Es ist zu beachten, dass die Struktur in <Customs><Custom> beizubehalten ist, während die Struktur unter dem Knoten <Customs> frei gestaltet werden kann.
Es ist gut, wenn die Struktur der Tabellen, aus denen die Daten ausgewählt werden, die hochzuladen sind, über die Baumstruktur verfügen und die Haupttabelle über folgende Spalten verfügt:
- GUID – sorgt für Identifikation des Objekts zwischen POS und ERP
- Id – in Bezug auf die Struktur
- Type – wenn Sie Daten in DS unterscheiden wollen, vor allem wenn ggf. separate Erweiterungen vorhanden sind
- WasSentToERP – filtriert Daten, die schon versandt wurden
Gesendete Daten kennzeichnen
Es ist möglich, die Standardmethode zur Kennzeichnung gesendeter Objekte für die Markierung benutzerdefinierter Objekte zu verwenden.
Überladen Sie an dieser Stelle die Service-Methode ISynchronizationRepository (dieser Bereich verfügt über keine Erweiterungspunkte)
public class SynchronizationRepositoryExt : SynchronizationRepository { public override void MarkIfWasSentToERP(string xml) { base.MarkIfWasSentToERP(xml); using (var context = new POSDBContext()) { context.ExecuteProcedure("Synchronization.MarkSentCustomData", xml); } } }
Sie können auch beispielsweise eine Prozedur intern aufrufen, die die gesendeten Objekte markieren wird.
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
Beispiel für Export
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
Import in DataService
Der Datenimport erfolgt über den IDataCustomService und die Überladung der Methode SaveCustom. Die Methode erhält jede Custom-Zeile als Argument in Form eines XElement-Objekts.
Um mehrere Erweiterungen zu verarbeiten, müssen Pin-Points für den DataService verwendet werden.
Snippet für den Import
[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) { //deserialisieren + Daten speichern } }