U bevindt zich nu op een technische pagina over de software Mercator. Deze pagina bevat specifieke informatie die bestemd is voor professionals van de software Mercator. Wenst u naar algemenere informatie over Mercator door te gaan?


   Deze vraag niet meer stellen

De Mercator engines in de variabelen van .net-sessie houden

0000002244     -      19-09-2018

Als dusdanig kunnen de verschillende motoren van Mercator niet geserialiseerd worden gebruikt en dus kunnen ze rechtstreeks worden opgeslagen in variabelen van de ASP.net-sessie. (Dit kan worden verklaard door de complexe structuur van de klassen evenals door het mechanisme van oproep door deserialisering, wat ongeschikt zou zijn)

Wanneer Mercator niet opgeroepen kan worden voor een gebruik vanaf een externe applicatie, zoals het geval is wanneer Mercator gekoppeld is aan een ASP.net-site; dan bevat de statische klasse MercatorUi.Globals een woordenboek die het mogelijk maakt om alle open engines (in gebruik) terug te vinden. EnginesUsedByExtApp bepaalt dit als volgt: System.Collections.Concurrent.ConcurrentDictionary<string, MercatorUi.Interfaces.IEngine> (ConcurrentDictionary is thread-safe, wat vereist is voor een ASP.net-applicatie die multi-thread is)

Dit betreft deze verschillende engines:

  • MercatorUi.Engine.Cpta.BookingEngine
  • MercatorUi.Engine.Crm.ActionEngine
  • MercatorUi.Engine.Gescom.BillingEngine
  • MercatorUi.Engine.Gescom.TransferEngine
  • MercatorUi.Engine.Gescom.InventoryEngine

Wanneer een van deze engines gestart wordt vanaf een externe applicatie

  • voor deze engine wordt de eigenschap UniqueIdForExtApp aangevuld met een unieke karaktersequentie
  • deze engine wordt toegevoegd aan de woordenboek MercatorUi.Globals.EnginesUsedByExtApp met deze unieke tekensequentie als sleutel

Het volstaat dan ook om deze unieke sleutel in een sessievariabele op te slaan. De dictionary zal vervolgens worden gebruikt om de engine op basis van deze sleutel terug te vinden.

Voorbeeld:

1. Bij het starten van BillingEngine (caddie) voor een internetgebruiker (sessie):

Zoom
MercatorUi.Engine.Gescom.BillingEngine billingEngine = MercatorUi.Engine.Gescom.BillingEngine.InitNew(MercatorUi.Engine.Gescom.Billing.TypeVAEnum.V, 3, "Comm");
if (billingEngine.DataSet != null)
{
    Session["CurrentEngineKey"] = billingEngine.UniqueIdForExtApp;
}

Let op: de notatie met using mag hier niet worden gebruikt, dit zou de Dispose-methode van deze BillingEngine activeren en het zou het uit de EnginesUsedByExtApp halen.

2. Op een andere pagina en om deze BillingEngine te hervatten en te kunnen gebruiken:

Zoom
MercatorUi.Interfaces.IEngine engine;
if ((Session["CurrentEngineKey"] != null) && MercatorUi.Globals.EnginesUsedByExtApp.TryGetValue(Session["CurrentEngineKey"].ToString(), out engine))
{
    MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)engine;
    ...
}

3. Wanneer de gebruiker van de website uitlogt, wanneer BillingEngine niet langer nodig is of na gebruik te hebben gemaakt van de Save-methode:

Zoom
MercatorUi.Interfaces.IEngine engine;
if ((Session["CurrentEngineKey"] != null) && MercatorUi.Globals.EnginesUsedByExtApp.TryGetValue(Session["CurrentEngineKey"].ToString(), out engine))
{
    MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)engine;
    billingEngine.Dispose();
    Session.Remove("CurrentEngineKey");
}

Het is absoluut noodzakelijk beroep te doen op de Dispose-methode om de BillingEngine (Close) te sluiten en om deze uit de EnginesUsedByExtApp te halen. Indien dit niet correct wordt uitgevoerd, loopt uw ASP.net-applicatie het gevaar geheugenproblemen te krijgen.

Opmerkingen:

Aangezien de opgeslagen informatie erg klein is (een eenvoudige tekenreeks), kan deze in de ViewState worden opgeslagen in plaats van in de sessievariabelen. Zo kan dit makkelijk worden beheerd indien een internetgebruiker verschillende tabbladen opent in zijn of haar browser, met verschillende klantenrekeningen en dus verschillende BillingEngines.

Zoom
Session["CurrentEngineKey"]

wordt

Zoom
ViewState["CurrentEngineKey"]

 

De hier vermelde bronbestanden zijn enkel beschikbaar in de versie Mercator Ui.dll samengesteld voor Framework.net 4.0. (De ConcurrentDictionaries bestaan niet in de vorige versies)