ORDA: práce s objekty a kolekcemi

Automaticky přeloženo z Deepl

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"
 }
}
 ]

Avatar
• Product Owner • Marie-Sophie Landrieu-Yvert se připojila k programovému týmu 4D jako Product Owner v roce 2017. Jako Product Owner má na starosti psaní uživatelských příběhů a jejich převod do funkčních specifikací. Její úlohou je také zajistit, aby implementovaná funkce odpovídala potřebám zákazníka. Marie-Sophie vystudovala inženýrskou školu ESIGELEC a svou kariéru zahájila jako inženýrka v IBM v roce 1995. Podílela se na různých projektech (projekty údržby nebo výstavby) a pracovala jako vývojářka Cobol. Poté pracovala jako UML designer a Java developer. V poslední době byly jejími hlavními rolí analyzovat a psát funkčních požadavky a koordinovat obchodní a vývojové týmy.