ORDA : Comparer minutieusement deux sélections d’entités

Traduit automatiquement de Deepl

Puisque ORDA vous permet de travailler avec plusieurs sélections d’entités simultanément, nous sommes sûrs que vous en profitez en passant les sélections d’entités comme paramètre aux méthodes du projet ou aux fonctions des classes du modèle de données ORDA.

Pour travailler efficacement avec la programmation orientée objet en utilisant le moins de lignes de code possible, vous avez besoin de fonctions robustes et optimisées. C’est pourquoi avec 4D v19 R3, nous livrons une nouvelle fonction disponible sur l’objet entitySelection : la fonction selected() fonction.

Grâce à cela, vous serez en mesure d’inspecter et de comparer deux sélections d’entités. Voyons les détails !

La nouvelle fonction selected()

Étant donné deux sélections d’entités entitySel1 et entitySel2, cette fonction retourne les indices des entités de entitySel2 dans entitySel1.

Vous avez compris ? Voici un exemple :

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

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

La fonction selected() renvoie un objet avec une propriété ranges qui est une collection d’objets.

Ces objets désignent une plage d’entités (début # fin) ou une seule entité (début = fin).

Les entités Invoices ayant le paiement = « Cash » parmi toutes les factures sont celles avec les indices :

  • 1
  • 9 à 12
  • 18
  • 21 à 25

un cas d’utilisation concret

Imaginez une bibliothèque avec des livres sur différents sujets (Histoire, Art, Science, …). Voici la table des livres :

Sur une page HTML, nous voulons mettre en évidence les livres sur un sujet donné.

Pour cela, nous avons une méthode de projet highlight appelée comme une 4DACTION avec un paramètre sujet.

highlight code de la méthode projet :

var $index : Integer
var $subject ; $text: Text
var $onSubject : cs
.BooksSelection
var $indices; : $range Objet
: : ( ; 0) ( ; 0 ( ; ) := ( ; "sujet") 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:= .. ("subject = :1" ; ) dsBooksquery $subject

//Get ranges of books about the subject

$indices:= .. . ( ) := . . . ( ; . ) ( ; . ; . ) [ ]:="<b>"+ [ ]+"</b>" := . ("<br/>") dsBooksall()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)

Exécutons maintenant 4DACTION/highlight?subject=History dans un navigateur.

Voici le résultat :

blank

Écrivons maintenant du code optimisé avec des sélections d’entités!

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert a rejoint l'équipe de 4D Product en tant que Product Owner en 2017. En tant que Product Owner, elle est en charge de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation de la fonctionnalité livrée répond au besoin du client.Marie-Sophie est diplômée de l'école d'ingénieur ESIGELEC et a commencé sa carrière en tant qu'ingénieur chez IBM en 1995. Elle a participé à divers projets (projets de maintenance ou de construction) et a travaillé en tant que développeur Cobol. Elle a ensuite travaillé en tant que concepteur UML et développeur Java. Dernièrement, ses principaux rôles étaient d'analyser et de rédiger des exigences fonctionnelles, de coordonner les équipes commerciales et de développement.