Beispiel für die Exportprozedur
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Synchronization].[GetCustomData]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT')) DROP FUNCTION [Synchronization].[GetCustomData] GO CREATE FUNCTION [Synchronization].[GetCustomData] ( @syncType int, @documentId int ) RETURNS XML AS BEGIN declare @data XML; set @data = (select [Implementations].[GetSpecificData](@syncType, @documentId) for xml path('SpecificElements'), root('CustomData'), type) return @data END GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Implementations].[GetSpecificData]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT')) DROP FUNCTION [Implementations].[GetSpecificData] GO CREATE FUNCTION [Implementations].[GetSpecificData] ( @syncType int, @documentId int ) RETURNS XML AS BEGIN declare @specifics XML; set @specifics = (select el.OrdinalNumber as [@OrdinalNumber], el.SpecificCode as [@SpecificCode], el. SpecificTypeId as [@SpecificTypeId] from ExtensionSchema.SpecificDataTable el inner join Documents.TradeDocuments doc on el.DocumentId = doc.Id where el.DocumentId = @documentId and @syncType = 45 for xml path('row')) return @specifics END GO
Daten von POS exportieren
Es ist möglich, eigene Daten den Objekten einzufügen, die in POS erstellt und mit dem ERP-System synchronisiert werden. Dazu soll die Funktion Synchronization.GetCustomData an der POS-Datenbank überschrieben werden. Die Funktion gibt XML zurück und nimmt als Argumente den Typ des synchronisierten Objekts (int) und seinen Bezeichner (int) an. Die Funktion wird für jedes Objekt, das in das ERP-System übertragen werden soll, separat ausgeführt.
Import in DataService
Der Datenimport erfolgt in C#. Jedes Objekt, das bearbeitet wird, verfügt über Property Data, Typ XElement. Die Daten sollten deserialisiert und selbst verarbeitet werden.
Nützliche Informationen können über die statische Klasse WebServiceHelper abgerufen werden. Für jeden Abruf einer DataService-Kontraktmethode können Informationen über die POS-Instanz abgerufen werden:
- POS-Code
- POS-GUID
- Profilcode
- Release
Beispiel für Import in DateService
[DataServiceBusinessModule] public static class Module { [MethodInitializer] public static void Initialize() { var customerService = IoC.Container.Resolve<IDataCustomerExtensionPointService>(); customerService.AfterSaveCustomerEvent += CustomerServiceEx_AfterSaveCustomerEvent; } private static void CustomerServiceEx_AfterSaveCustomerEvent(object sender, DTOResultEventArgs<Queue.DTO.CustomerDTO, string, int> e) { Console.WriteLine("{0}: {1}", e.Argument, e.EntityRow.CustomData.Name); var xe = e.EntityRow.CustomData; // XElement } }