Erweiterung der Datensynchronisierung mit POS – Option 1

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

 

Czy ten artykuł był pomocny?