Manusear entidades numa selecção de entidades

Tradução automática de Deepl

PRIMEIRO GRAVO, ÚLTIMO GRAVO, PRÓXIMO GRAVO, ANTERIOR GRAVO; isso soa a algum sino? Aposto que sim. Já os tem usado para tratar de selecções! A ORDA fornece métodos úteis e familiares para navegar através de entidades numa selecção de entidades – e obviamente, algumas regalias!

Para começar, pode manusear várias selecções de entidades ao mesmo tempo e navegar através delas independentemente, enquanto que normalmente só pode gerir uma única ‘selecção actual’ por tabela. É precisamente isso que vamos ver neste post do blogue.

Já vimos que consultar o datastore devolve uma selecção de entidade. A ORDA fornece os meios para aceder muito facilmente às entidades de uma selecção de entidade.

ORDA: Manusear entidades em selecções de entidades

CRIAR E PREENCHER SELECÇÕES DE ENTIDADES

Uma selecção de entidade vazia é criada utilizando o newSelection() método. Também pode adicionar entidades a ele com o add() método.

EXEMPLO

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

//Create a new empty entity selection
$es :=ds.Employee.newSelection()
Repeat $name
ok :=Request("Qual empregado?")
If ( =1)
//Get the first employee whose last name is $name
$employee :=ds.Employee.query("lastName=:1";$name).firstString()
//Add the entity to the new entity selection $es
If ($employee#Null)
$es .add($employee)
End if

End if (ok=0)
alert (Until ($es.length) + " empregados foram adicionados à nova selecção da entidade")

ACESSO A ENTIDADES NUMA SELECÇÃO DE ENTIDADES

Lembre-se, pode iterar através de entidades numa selecção de entidades com o for each laço. Aqui está um exemplo rápido, mas também dê uma vista de olhos a este post do blogue.

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

Também pode carregar uma entidade com o seu índice numa selecção de entidade (o índice começa em 0). Aqui está um exemplo:

C_OBJECT($gamers)
//Get all the gamers sorted by rank
$gamers :=ds.Gamer.all. ().orderBy("classificação")
if ($gamers.length >=3)
ALERT ("Os três primeiros são: "+Char(13) \
+$gamers[0].lastName+Char(13)+$gamers[1].lastName+Char(13)+$gamers[2]
.lastName)
End if

PRIMEIRA E ÚLTIMA ENTIDADES

O first() e last() permitem-lhe obter a primeira ou última entidade de uma selecção de entidade. Estes métodos podem retornar Null se a selecção da entidade estiver vazia.

No exemplo abaixo, obtemos a primeira entidade da selecção da entidade $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 ("O primeiro jogador foi encontrado")
Else
ALERT ("A selecção da entidade $gamers está vazia")
End if

ENTIDADES Anteriores E Próximas

Uma entidade pode pertencer a uma selecção de entidade. Neste caso, pode iterar através das entidades de uma selecção de entidade com o previous() e next() métodos.

Neste exemplo, utilizamos um formulário para exibir uma lista de jogadores. O utilizador pode navegar através dos detalhes de cada jogador com os botões Anterior e Seguinte.

O botão Próximo tem o seguinte método de objecto:

//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

informação sobre uma entidade

E isso não é tudo! Para qualquer entidade, é possível obter a selecção da entidade de onde provém. Outra coisa boa de saber, há também métodos para obter informação contextual sobre uma entidade, por exemplo, verificar se pertence a uma determinada selecção de entidade, obter a sua posição numa selecção de entidade, etc.

Aqui, temos duas selecções de entidades ($employeesParis e $employeesNY). O método seleccionadoO método do empregado selecciona um empregado num deles. Podemos então determinar a que entidade seleccionamos este empregado com o método contains() método:

C_OBJECT($employeesParis;$employeesNY;$employee)
// Get employees working in Paris
$employeesParis :=ds.Employee.$employeesParis.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
: ( .contains($employee))
ALERT ("O funcionário pertence à selecção da entidade $employeesParis")
: ($employeesNY.contains($employee))
ALERT ("O funcionário pertence à selecção da entidade $employeesNY")
End case

Aqui, temos uma selecção de entidade ($employeesParis). O método do empregado seleccionado selecciona um empregado a partir dele. Podemos obter o índice do empregado na selecção da entidade com o método indexOf() método:

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 ("O índice do empregado seleccionado é " + String($employee
.indexOf()))

Dê uma olhada no exemplo da base de dados e saberá tudo sobre este assunto!

Avatar
• Proprietário do produto - Marie-Sophie Landrieu -Yvert entrou ao time 4D Product como Proprietária do Produto em 2017. Como tal, está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais. Seu papel também é garantir que a implementação da funcionalidade entregue cumpra com as necessidades do cliente. Marie-sophie se formou na Escola de Engenharia de ESIGELEC e começou sua carreira como engenheira da IBM em 1995. Participou em vários projetos (de manutenção e criação) e trabalhou como desenvolvedora de Cobol. Depois trabalhou como designer de UML e desenvolvedora de Java. Suas principais funções foram analisar e redigir requisitos funcionais, coordenar os times de negócio e de desenvolvimento.