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

Een berekende uitdrukking (formule) plaatsen in LinesEditor

0000002165     -      21-04-2017

In het object LinesEditor (ingaverooster) van de schermen 'commerciële beheersdocumenten' of 'boekingen in de boekhouding' is het erg eenvoudig om een berekende expression toe te voegen.

Dat doet u door de standaardinstellingen van de kolommen te wijzigen, door eenvoudigweg bijkomende informatie toe te voegen in de eigenschap Formula. U kan er een formule volgens syntax c# ingeven. Op deze plek beschikt u over alle variabelen die horen bij de kolommen van de lijnentabel (naam in kleine letters), van billingEngine/bookingEngine en van de cel die herberekend wordt (variabele cel).

Een berekende kolom kan in de tabel worden opgeslagen. Daartoe volstaat het om een formule en een bron te plaatsen.

Tip: door een fout te maken in de formule bij het weergeven van de compilatieresultaten, is het mogelijk om het C#-script te zien zoals deze in de assembly wordt opgeslagen.

Hierbij graag een voorbeeld van de formule voor de weergave van de naam van de te beleveren klant per lijn:

MercatorController.xFunctions.xNom("CLI", id_cli_liv)

Belangrijke opmerking:

Deze formule maakt geen deel uit van de 'client-server'-filosofie. Bij elke 'repaint' van elke cel, wordt deze functie immers opgeroepen en wordt er dus een verbinding gemaakt met de SQL-server. Het gebruik van alle niet-client-server-functies zou dus verboden of sterk verminderd moeten worden:

  • xLookup
  • xNom
  • xUser
  • xDev
  • xRep
  • xGamEnum
  • xGamTyp

Het coherente gebruik van deze formules zal zich logisch gezien beperken tot berekeningen tussen de plaatselijk beschikbare velden.

Indien het inderdaad nodig is om de gegevens aanwezig in de SQL-server te raadplegen (uitleg hier in vergelijking met het voorbeeld naam van de te beleveren klant per lijn), moet de formule wat opgesmukt worden om, bijvoorbeeld de laatst gelezen waarden in cache te plaatsen. In onderstaande formule worden de 20 laatste resultaten van de functie xNom in cache geplaatst. Merk daarbij op dat in onderstaande syntax de laatste sluitaccolade ontbreekt. Dat is ook normaal aangezien deze door Mercator toegevoegd wordt.

xNomWithCache(id_cli_liv);
}

private static MercatorController.SmartDictionary<string, string> dicoCache = new MercatorController.SmartDictionary<string, string>("cacheXnom");

private static string xNomWithCache(string id_cli_liv)
{
    if (dicoCache.ContainsKey(id_cli_liv))
    {
        return dicoCache[id_cli_liv];
    }
    else
    {
        if (dicoCache.Count >= 20)
            dicoCache.RemoveFirst();
        string ret = MercatorController.xFunctions.xNom("CLI", id_cli_liv);
        dicoCache.Add(id_cli_liv, ret);
        return ret;
    }