Wat is het correcte patroon om de waarde van Api.IsWeb te wijzigen?

0000003312     -      20-08-2025

Api.IsWeb is een statische eigenschap die bepaalt of de webmodus, d.w.z. stille modus (dus zonder dialoogvensters), moet worden geactiveerd. Standaard staat deze eigenschap in Mercator op false. In webapplicaties of MercatorPenguinServer staat ze op true. Omdat het een statische eigenschap is, geldt ze voor het hele AppDomain en alle threads die daarin draaien. Het wijzigen van deze eigenschap moet vermeden worden, want in de meeste gevallen is dat niet nodig.

Het zonder voorzorg op false zetten in een customizer zonder de oorspronkelijke waarde correct terug te plaatsen, is schadelijk in een webapplicatie of MercatorPenguinServer, omdat processen daar kunnen worden geblokkeerd door onverwachte dialoogvensters.

Het op true zetten kan tot gevolg hebben dat Mercator desktop verder werkt zonder bepaalde dialoogvensters die de gebruiker normaal verwacht.

Men moet er rekening mee houden dat een customizer die deze waarde wijzigt, in beide contexten kan draaien: Mercator desktop en MercatorPenguinServer, elk met een andere standaardwaarde van Api.IsWeb.

Als een wijziging echt noodzakelijk is, bijvoorbeeld om in bepaalde omstandigheden het tonen van dialoogvensters uit te schakelen, dan moet verplicht onderstaand patroon gebruikt worden:

Zoom
bool previousApiIsWeb = Api.IsWeb;
try
{
    Api.IsWeb = false of true;
    ...
}
finally
{
    Api.IsWeb = previousApiIsWeb;
}

 

Let op het try / finally blok, wat betekent dat het niet uitmaakt hoe je de code onder try afsluit:

  • door een return in de code,
  • of door een exception,

de code in finally zal altijd worden uitgevoerd. 

Het gebruik van het hierboven beschreven patroon is verplicht.


In het geval van toepassingen met meerdere threads (bijvoorbeeld webapplicaties), is het waarschijnlijk nodig om bescherming op te zetten tegen gelijktijdige toegang die de andere waarde van Api.IsWeb zou vereisen. Dit kan eenvoudig worden geïmplementeerd via deze enkele statische eigenschap voor alle code:

Zoom
public static object lockApiIsWeb = new object();

en het instellen van de lock in de code:

Zoom
lock (lockApiIsWeb)
{
    bool previousApiIsWeb = Api.IsWeb;
    try
    {
        Api.IsWeb = false;
        ...
}
    finally
    {
        Api.IsWeb = previousApiIsWeb;
    }
}

Er moet worden opgemerkt dat de bovenstaande code een wachtrijsysteem creëert dat de prestaties van de applicaties negatief kan beïnvloeden.



Functionele cookies: Cookies die nodig zijn voor het gebruik van de website en voorkeurscookies. Ze bevatten geen persoonsgegevens. (Meer informatie)

Analytische cookies: Verzamelen van statistieken met betrekking tot het gedrag van internetgebruikers. (Meer informatie)

Marketingcookies: Om bezoekers op verschillende websites te volgen voor advertentiedoeleinden. (Meer informatie)