Zpracování entit ve výběru entit

Automaticky přeloženo z Deepl

PRVNÍ ZÁZNAM, POSLEDNÍ ZÁZNAM, DALŠÍ ZÁZNAM, PŘEDCHOZÍ ZÁZNAM; říká vám to něco? Vsadím se, že ano. Už jste je používali k manipulaci s výběry! ORDA poskytuje užitečné a známé metody pro navigaci po entitách ve výběru entit – a samozřejmě i některé výhody!

Pro začátek můžete zpracovávat několik výběrů entit najednou a procházet jimi nezávisle na sobě, zatímco běžně můžete spravovat pouze jeden „aktuální výběr“ pro každou tabulku. Právě to si ukážeme v tomto příspěvku.

Již jsme viděli, že dotaz na datové úložiště vrací výběr entit. ORDA poskytuje prostředky pro velmi snadný přístup k entitám ve výběru entit.

ORDA: Zacházení s entitami ve výběrech entit

VYTVÁŘENÍ A VYPLŇOVÁNÍ VÝBĚRŮ ENTIT

Prázdný výběr entit je vytvořen pomocí příkazu newSelection() metodou. Můžete do něj také přidávat entity pomocí metody add() metodou.

PŘÍKLAD

C_OBJECT($employee;$es)
C_TEXT ($name)

//Create a new empty entity selection
$es :=ds.Employee.newSelection()
Repeat
$name :=Request("Který zaměstnanec?")
If (ok=1)
//Get the first employee whose last name is $name
$employee :=ds.Employee.query("lastName=:1";$name).first()
//Add the entity to the new entity selection $es
If ($employee#Null)
$es .add($employee)
End if
End if
Until (ok=0)
alert (String($es.length) + " zaměstnanci byli přidáni do výběru nového subjektu").

PŘÍSTUP K ENTITÁM VE VÝBĚRU ENTIT

Nezapomeňte, že entity ve výběru entit můžete iterovat pomocí metody for each smyčky. Zde je rychlý příklad, ale podívejte se také na tento blogpost.

C_OBJECT($employeesParis;$employee;$status)

// Get employees working in Paris
$employeesParis :=ds.Employee.query("city='Paris'")
//Iterate through each employee
For each ($employee;$employeesParis)
$employee.lastName:=Uppercase($employee.lastName)
$status:=$employee.save()
End for each

Do výběru entit můžete také načíst entitu s jejím indexem (index začíná od 0). Zde je příklad:

C_OBJECT($gamers)
//Get all the gamers sorted by rank
$gamers :=ds.Gamer.all().orderBy("rank")
if ($gamers.length >=3)
ALERT ("První tři jsou: "+Char(13) \
+$gamers[0].lastName+Char(13)+$gamers[1].lastName+Char(13)+$gamers[2]
.lastName)
End if

PRVNÍ A POSLEDNÍ ENTITY

Stránka first() a last() umožňují získat první nebo poslední entitu z výběru entit. Tyto metody mohou vrátit adresu Null, pokud je výběr entit prázdný.

V následujícím příkladu získáme první entitu z výběru entit $gamers:

C_OBJECT($gamers;$first)
// Get the gamers whose last name starts with "H"
$gamers :=ds.Gamer.query("lastName='H@'")
// Get the first entity of the $gamers entity selection
$first :=$gamers.first()
If ($first#Null)
ALERT ("První hráč byl nalezen")
Else
ALERT ("Výběr entit $gamers je prázdný")
End if

Předchozí a následující ENTITY

Entita může patřit do výběru entit. V takovém případě můžete iterovat přes entity výběru entit pomocí metody previous() a next() metodami.

V tomto příkladu používáme formulář pro zobrazení seznamu hráčů. Uživatel může procházet detaily jednotlivých hráčů pomocí tlačítek Předchozí a Další.

Tlačítko Další má následující objektovou metodu:

//Form.gamer is an entity, edited on the form. It belongs to an entity selection which is the entire list of gamers.
If ( . . ()# ) . := . . () FormgamernextNull
//Edit the next entity of the entity selection to which the Form.gamer entity belongs.
FormgamerFormgamernext
End if

informace o entitě

A to ještě není všechno! Pro jakoukoli danou entitu můžete získat výběr entity, ze které pochází. Ještě něco je dobré vědět, existují také metody pro získání kontextových informací o entitě, např. zjistit, zda patří do daného výběru entit, získat její pozici ve výběru entit atd.

Zde máme dva výběry entit ($employeesParis a $employeesNY). Metoda selectedEmployee vybere zaměstnance v jedné z nich. Poté můžeme určit, do kterého výběru entit tento zaměstnanec patří, pomocí metody contains() metodou:

C_OBJECT($employeesParis;$employeesNY;$employee)
// Get employees working in Paris
$employeesParis :=ds.Employee.query("city='Paris'")
// Get employees working in New York
$employeesNY :=ds.Employee.query("city='New York'")
// The method selectedEmployee returns an employee in one of the two given entity selections
$employee :=selectedEmployee($employeesParis;$employeesNY)

Case of
: ($employeesParis.contains($employee))
ALERT ("Zaměstnanec patří do výběru entit $employeesParis")
: ($employeesNY.contains($employee))
ALERT ("Zaměstnanec patří do výběru entit $employeesNY")
End case

Zde máme výběr entit ($employeesParis). Metoda selectedEmployee z něj vybere zaměstnance. Index zaměstnance ve výběru entit můžeme získat pomocí metody indexOf() metodou:

C_OBJECT($employeesParis;$employee)
// Get employees working in Paris
$employeesParis :=ds.Employee.query("city='Paris'")
// The method selectedEmployee returns an employee in the given entity selection
$employee :=selectedEmployee ($employeesParis)
ALERT ("Index vybraného zaměstnance je " + String($employee.indexOf()))

Podívejte se na příklad databáze a budete o tomto tématu vědět vše!

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.