ORDA: Comparar exaustivamente duas selecções de entidades

Tradução automática de Deepl

Uma vez que a ORDA lhe permite trabalhar com várias selecções de entidades simultaneamente, temos a certeza de que tira partido disto ao passar as selecções de entidades como parâmetro para métodos de projecto ou para funções das classes de modelos de dados ORDA.

Para trabalhar eficientemente com programação orientada a objectos usando o menor número possível de linhas de código, é preciso funções robustas e optimizadas. É por isso que com 4D v19 R3, estamos a enviar uma nova função disponível no objecto entitySelection: o selected() função.

Graças a ela, poderá inspeccionar e comparar duas selecções de entidades. Vamos ver os detalhes!

a nova função seleccionada()

Dadas duas selecções de entidades entitySel1 e entitySel2, esta função retorna os índices de entidades de entitySel2 dentro de entitySel1.

Percebeu? Aqui está um exemplo:

var $invoices; $selection: cs.InvoicesSelection
var $result : Object

$invoices :=ds.Invoices.all()
$selection :=ds.Invoices.query("pagamento = :1"; "Dinheiro")
$result :=$invoices.selected($selection)
// $result = {ranges:[{start:1,end:1},{start:9,end:12},{start:18,end:18},{start:21,end:25}]}

O selected() A função devolve um objecto com uma propriedade ranges que é uma colecção de objectos.

Estes objectos designam uma série de entidades (início # fim) ou uma única entidade (início = fim).

As entidades Invoices que têm pagamento = “Dinheiro” entre todas as facturas são as que têm índices:

  • 1
  • 9 a 12
  • 18
  • 21 a 25

um caso de utilização concreta

Imagine uma biblioteca com livros sobre diferentes assuntos (História, Arte, Ciência, …). Aqui está a tabela dos Livros:

Numa página HTML, queremos destacar os livros sobre um determinado assunto.

Para isso, temos um método de projecto highlight chamado como uma ACÇÃO 4D com um parâmetro de assunto.

highlight código do método do projecto:

var $index : Integer
var $subject ; $text: Text
var $onSubject : cs.BooksSelection
var $indices; : $range Objecto
: : ( ; 0) ( ; 0 ( ; ) := ( ; "assunto") var $titles Collection
var $i Integer

ARRAY TEXT$anames
ARRAY TEXT$avalues

WEB GET VARIABLES$anames $avalues

//Get the subject
$indexFind in array$anames
$subject := { } $avalues$index

//Search books about the given $subject
$onSubject:= .. ("assunto = :1"; ) := .. . ( ) := . . . . ( ; . ) ( ; . ; . ) [ ]:="<b>"+ [ ]+"</b>" := . ("<br/>") dsBooksquery $subject

//Get ranges of books about the subject
$indicesdsBooksall()selected$onSubject

//Build a collection with all the titles
$titlesdsBooksall()title

// Loop on the $indices.ranges collection of objects

// $indices.ranges is [{start:0,end:0},{start:2,end:4},{start:7,end:9},{start:11,end:11}]
For each$range $indicesranges
For$i $rangestart $rangeend
$titles$i$titles$i
End for
End for each
// Build a text with carriage returns
$text$titlesjoin

WEB SEND TEXT ($text)

Agora vamos correr 4DACTION/highlight?subject=Historia num browser.

Aqui está o resultado:

blank

Agora vamos escrever código optimizado com selecções de entidades!

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.