Rozszerzalność synchronizacji danych z POS – opcja 1

Przykład procedury eksportującej

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

Eksport danych z POS

Istnieje możliwość aby do obiektów tworzonych na POS i synchronizowanych do systemu ERP dołączyć własne dane. W tym celu należy nadpisać na bazie POS funkcję Synchronization.GetCustomData. Funkcja zwraca XMLa, a jako argumenty przyjmuje typ synchronizowanego obiektu (int) oraz jego identyfikator (int). Funkcja uruchamiana jest osobno dla każdego obiektu jaki ma zostać przesłany do systemu ERP.

Import po stronie DataService

Import danych odbywa się w kodzie C#. Każdy przetwarzany obiekt posiada property CustomData, typu XElement. Dane należy zdeserializować i samemu przetworzyć.
Przydatne informacje można pobrać ze statycznej klasy WebServiceHelper. Dla każdego wywołania metody kontraktu DataService-u można uzyskać informację o instancji POSa:

– kod POSa

– GUID POSa

– kod profilu

– wersja

Przykład importu na DataService-ie

[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?