V tomto nejnovějším díle seriáluORDA se podíváme na to, jak mohou nové koncepty ORDA spolupracovat se stávajícími objekty a kolekcemi. Ve skutečnosti je možné přeměnit entity a výběry entit na objekty a kolekce a také vytvářet entity a výběry entit z objektů a kolekcí. Tímto způsobem můžete kód ORDA snadno integrovat do stávajícího kódu. Můžete plně využít výhod systému ORDA, aniž byste museli přepisovat svůj kód!
Dnes použijete SELECTION TO ARRAY a ARRAY TO SELECTION pro práci odděleně od serveru, ale musíte spravovat tolik polí jako polí. A pro aktuální záznam neexistuje způsob, jak ho v nějaké podobě vytáhnout. Pomocí ORDA můžete snadno exportovat entity a výběry entit z databáze a pracovat s nimi samostatně. A to není vše, do databáze můžete importovat dříve vytvořené objekty a kolekce. To vše jedinou a snadno použitelnou metodou!
To je velmi užitečné pro efektivní práci v režimu klient-server, pro komunikaci s jinými aplikacemi nebo pro import dat pomocí dávkových procesů.
ORDA: práce s objekty a kolekcemi
EXPORT OBJEKTŮ A SEKCÍ OBJEKTŮ DO OBJEKTŮ A KOLEKCÍ
Následující příklady vycházejí z této struktury. Pojďme si zašpinit ruce!
EXPORT DO OBJEKTŮ
Entitu lze extrahovat jako objekt pomocí příkazu toObject(). Zde extrahujeme entitu $pupil jako objekt. Můžeme si vybrat, které vlastnosti chceme extrahovat.
Poté můžeme použít příkaz JSON Stringify příkaz k převodu hodnoty tohoto objektu na řetězec JSON a odeslat jej například prostřednictvím sítě. C_OBJECT($pupil;$pupilObject)
C_TEXT ($pupilString)
//Get the first pupil whose last name is "Dunaway"
$pupil :=ds.Pupil.query("lastName=:1"; "Dunaway").first()
If ($pupil#Null)
// Turn the entity to an object
$pupilObject :=$pupil.toObject("firstName, lastName, email")
$pupilString :=JSON Stringify($pupilObject) // Stringify the object
End if
Objekt $pupilObject bude:
{ "firstName": "Cecil", "lastName": "Dunaway", "email": "Dunaway@echo" }
EXPORT DO KOLEKCÍ
Výběr entit lze exportovat do kolekce pomocí příkazu toCollection(). Zde exportujeme výběr entit $pupils (který obsahuje 2 entity) jako kolekci. Rozhodneme se extrahovat pouze studenta lastName and firstName spolu se všemi vlastnostmi související entity school .
Poté můžeme použít metodu JSON Stringify příkaz převést hodnoty této kolekce na řetězec JSON a odeslat jej například po síti.
C_OBJECT($pupils)
C_COLLECTION ($pupilsCollection)
C_TEXT ($pupilsString)
// Get the pupils whose first name starts with "L"
$pupils :=ds.Pupil.query("firstName=:1"; "L@")
//Turn the entity selection to a collection of objects
$pupilsCollection :=$pupils.toCollection("lastName,firstName,school.*")
$pupilsString :=JSON Stringify($pupilsCollection)
Kolekce $pupilsCollection bude mít následující podobu:
[ { "firstName": "Lauren", "lastName": "Bouchard", "school": { "ID": 45, "name": "jméno": "umělecké školy", "state": "New Jersey" } }, { "firstName": "Laurie", "lastName": "Valenti", "school": { "ID": 46, "name": "Matematická škola", "state": "New Jersey"} } ]
Další možnosti pro toObject() a toCollection() jsou k dispozici, více informací najdete v dokumentaci!
DOVOZ PŘÍSLUŠENSTVÍ A VÝBĚR PŘÍSLUŠENSTVÍ Z OBJEKTŮ A KOLEKCÍ.
import z Objects
Entitu lze vytvořit z objektu pomocí příkazu fromObject() metodou. Zde vytvoříme novou entitu $pupil z daného objektu:
C_OBJECT($pupil;$pupilObject)
$pupilObject :=New object("firstName"; "Mary"; "lastName"; "Smith"; "email"; "Mary.Smith@whisky")
//Create a new empty entity
$pupil:=ds.Pupil.new(
)
//Fill entity
$pupil.fromObject($pupilObject)
import from collections
Výběr entity lze vytvořit z kolekce pomocí metody fromCollection(). Zde sestavíme výběr entit $pupils z dané kolekce.
Všimněte si, že tento mechanismus lze použít pro vytváření nových entit nebo aktualizaci stávajících. Záleží pouze na přítomnosti primárního klíče v objektech.
C_OBJECT($pupils)
C_TEXT($txtPupils)
C_COLLECTION ($pupilsCollection)
$txtPupils :=Document to text(Get 4D folder(Current resources folder)+"pupils_data.json")
//Get a collection of objects
$pupilsCollection:=JSON Parse($txtPupils)
$pupils :=ds.Pupil.fromCollection($pupilsCollection)
a zde je $pupilsCollection collection:
[ { // Primární klíč entity není zadán. Vytvoří se nová entita "firstName": "Mark", "lastName": "Mac Arthur", "email": "Mark.MacArthur@yankee", "school": { "__KEY": "45" } }, { // Je uveden primární klíč entity. Tato entita bude aktualizována (pokud existuje). "__KEY": 3436, "firstName": "Victor", "lastName": "Valenti", "email": "Valenti@NEWSCHOOL", "school": { "__KEY": "45" } } ]