Jako vývojáři 4D jste již pravděpodobně vytvořili a používali vzorce. Lze je vytvořit pomocí dvou příkazů, Formula a Formula from string. Druhý jmenovaný byl právě v 4D V20 R3 vylepšen, takže jej lze používat bez omezení z komponent!
Vzorce a kontext provádění
Vzorce, ať už je jejich obsah jakýkoli, jsou úzce spjaty s databází, ze které jsou vytvořeny. Při jejich volání se vždy provádějí v kontextu, ve kterém byly vytvořeny.
To platí pro příkazy 4D a funkce jako Structure file, ale také pro vzorce založené na volání metod.
Jednoduchý příklad
Představme si metodu FormatedCurrentDate, která vrací formátovaný řetězec.
#DECLARE($format : Integer)->$formatedDate : Text
$formatedDate:=String(Current date; $format)
Tuto metodu lze použít v rámci vzorce, který lze vytvořit tímto způsobem:
$formula:=Formula from string("FormatedCurrentDate(System date abbreviated)")
V tomto případě vzorec podle očekávání vrátí formátované datum.
$date:=$formula.call()
Pokud se metoda a vzorec nacházejí ve stejném prostředí, je vše v pořádku… pokud se však tato nesdílená metoda nachází v hostitelské databázi a vzorec, který se snaží tuto metodu použít, je vytvořen v rámci komponenty, nebude možné jej spustit.
Nyní je k dispozici nový parametr
Do funkce Formula from string byl přidán nový parametr, který vám dává možnost volby a umožňuje rozhodnout, v jakém kontextu se vzorec provede.
#1) sk spustit v hostitelské databázi
Vrátíme-li se k předchozímu příkladu, kdy nesdílená metoda FormatedCurrentDate patří do hostitelské databáze, bude možné ji i tak spustit z komponenty vytvořením vzorce následujícím způsobem:
$formula:=Formula from string("FormatedCurrentDate(System date abbreviated)";sk execute in host database)
#2) sk execute in current database
Pokud je předána hodnota sk execute in current database (nebo je prostě vynechána), pak se vzorec provede v databázi, která vzorec vytvořila“.
Závěr
Tato nová možnost vám umožní snadno vytvářet vlastní komponenty rozhraní (například pro 4D Write Pro) pomocí metod nebo proměnných z hostitelské databáze.
Větší volnost a větší pravomoci znamenají také větší zodpovědnost, ale tato otevřenost je stále velmi praktická a umožňuje komponentám přistupovat k funkcím jejich hostitelských databází velmi jednoduchým způsobem.
Neváhejte se podělit o své dojmy na fóru!