Jazyk 4D podporuje koncept tříd, a tedy i koncept constructor.
Na druhé straně abstrakční vrstva ORDA prostřednictvím tříd datového modelu poskytuje velký obchodní přínos. Umožňuje psát obchodně orientovaný kód a „publikovat“ jej stejně jako API. Datový sklad, datové třídy, výběry entit a entity jsou k dispozici jako objekty tříd, které mohou obsahovat funkce i vypočtené atributy a aliasy.
To vede k tomu, že vaše aplikace snadno dodržují principy MVC s výkonným a optimalizovaným kódem.
Aby bylo možné pracovat s kompletním objektovým přístupem, mohou mít nyní od verze 4D 20 R10 třídy entit k dispozici constructor(). Potřebujete nastavit počáteční hodnoty při instanci nové entity? Nyní je to možné! Čtěte dále a dozvíte se více …
U tříd datového modelu ORDA se s daty pracuje prostřednictvím entit, které jsou instancemi tříd Entity, které máte ve své Struktuře.
4D 20 R10 přináší možnost, abyste pro objekty entit implementovali constructor().
Konstruktor entit
Aby bylo možné pracovat s kompletním objektovým přístupem, mohou mít nyní třídy entit od verze 4D 20 R10 k dispozici constructor(), který se spouští při jejich instanci.
To je ideální způsob, jak inicializovat některé výchozí hodnoty, jako je například razítko nebo atribut createdBy.
Dříve jste za tímto účelem pravděpodobně implementovali funkci createNew() v příslušné datové třídě. Vzhledem k datové třídě Products musí vaši vývojáři vědět, že v této třídě existuje funkce createNew() a že ji musí použít místo přirozené instancilace entity Products pomocí ds.Products.new().
Pro vytvoření nového produktu provedou následující kroky:
Form.product:=ds.Products.createNew()
jak implementovat konstruktor
Stačí implementovat constructor() ve třídě entit.
Zde je třída ProductsEntity:
Class extends Entity
Class constructor()
This.stamp:=Timestamp()
This.createdBy:=Current user()
A volací kód je tak logický. Například při kliknutí na tlačítko Vytvořit produkt ve formuláři stačí provést:
Form.product:=ds.Products.new()
a entita Form.product přijde se správně vyplněnými atributy stamp a createdBy!

. constructor() se spouští nejen voláním příkazu new() funkce. Ať už je entita instancována jakýmkoli způsobem, spustí se konstruktor.
Může být také:
– průzkumník dat (při vytváření nové entity)
– funkce fromCollection()
– volání rozhraní REST API vytvářející novou entitu na serveru(např. $method=update)
– kód běžící na serveru REST a zpracovávající entitu instancovanou na klientovi, například na front-endu aplikace Qodly nebo na klientovi 4D využívajícím vzdálené datové úložiště.
další příklady
Vzhledem k tomuto požadavku REST:
127.0.0.1/rest/Products?method=update
spustit pomocí POST s tělem:
[
{"name": "Red pack", "price": 50}
]
Zde je výsledek v průzkumníku dat. Všimněte si hodnot atributů stamp a createdBy.

Při importu produktů pomocí funkce fromCollection():
var $products : cs.ProductsSelection
var $data:=New collection({name: "Red pack"; price: 50}; {name: "Green pack"; price: 10})
$products:=ds.Products.fromCollection($data)
Zde je výsledek. Všimněte si hodnot pro atributy stamp a createdBy.

Tento blogpost vysvětluje, jak implementovat funkci constructor().
Pokud se po přečtení potřebujete dozvědět více o tom, jak se constructor() chová v C/S nebo při použití 4D Qodly pro nebo při práci se vzdáleným datovým úložištěm, přečtěte si tento blogpost.
Podívejte se do dokumentace, abyste se dozvěděli více a pohráli si s HDI!
K tomuto příspěvku zatím nelze přidávat komentáře.