Aller au contenu principal
Version : 21 R2 BETA

Collection

La classe Collection gère les expressions de type Collection.

Une collection est initialisée avec les commandes New collection ou New shared collection.

Exemple

 var $colVar : Collection //création d'une variable 4D de type collection
$colVar:=New collection ///initialisation de la collection et assignation à la variable 4D

Sommaire

.at( index : Integer ) : any
.average( {propertyPath : Text } ) : Real
.clear() : Collection
.combine( col2 : Collection {; index : Integer } ) : Collection
.concat( value : any { ; ...valueN } ) : Collection
.copy() : Collection
.copy( option : Integer ) : Collection
.copy( option : Integer ; groupWithCol : Collection ) : Collection
.copy( option : Integer ; groupWithObj : Object ) : Collection

.count( { propertyPath : Text } ) : Real
.countValues( value : any {; propertyPath : Text } ) : Real
.distinct( {options : Integer} ) : Collection
.distinct( propertyPath : Text {; options : Integer } ) : Collection

.equal( collection2 : Collection {; option : Integer } ) : Boolean
.every( { startFrom : Integer ; } formula : 4D.Function { ;...param : any } ) : Boolean
.every( { startFrom : Integer ; } methodName : Text { ;...param : any } ) : Boolean

.extract( propertyPath : Text { ; option : Integer } ) : Collection
.extract( propertyPath : Text ; targetPath : Text { ;...propertyPathOrTargetPathN : Text } ) : Collection

.fill( value : any ) : Collection
.fill( value : any ; startFrom : Integer { ; end : Integer } ) : Collection

.filter( formula : 4D.Function { ; ...param : any } ) : Collection
.filter( methodName : Text { ; ...param : any } ) : Collection

.find( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : any
.find( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : any

.findIndex( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Integer
.findIndex( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Integer

.first() : any
.flat( { depth : Integer } ) : Collection
.flatMap( formula : 4D.Function { ; ...param : any } ) : Collection
.flatMap( methodName : Text { ; ...param : any } ) : Collection

.includes( toSearch : expression { ; startFrom : Integer } ) : Boolean
.indexOf( toSearch : expression { ; startFrom : Integer } ) : Integer
.indices( queryString : Text { ; ...value : any } ) : Collection
.insert( index : Integer ; element : any ) : Collection
.join( delimiter : Text { ; option : Integer } ) : Text
convertit tous les éléments de la collection en chaînes et les concatène en utilisant la chaîne delimiter spécifiée comme séparateur
.last() : any
.lastIndexOf( toSearch : expression { ; startFrom : Integer } ) : Integer
.length : Integer
.map( formula : 4D.Function { ; ...param : any } ) : Collection
.map( methodName : Text { ; ...param : any } ) : Collection

.max( { propertyPath : Text } ) : any
.min( { propertyPath : Text } ) : any
.multiSort() : Collection
.multiSort( colsToSort : Collection ) : Collection
.multiSort( formula : 4D.Function ; colsToSort : Collection ) : Collection

.orderBy( ) : Collection
.orderBy( pathStrings : Text ) : Collection
.orderBy( pathObjects : Collection ) : Collection
.orderBy( ascOrDesc : Integer ) : Collection

.orderByMethod( formula : 4D.Function { ; ...extraParam : expression } ) : Collection
.orderByMethod( methodName : Text { ; ...extraParam : expression } ) : Collection

.pop() : any
.push( element : any { ;...elementN } ) : Collection
.query( queryString : Text ) : Collection
.query( queryString : Text ; ...value : any ) : Collection
.query( queryString : Text ; querySettings : Object ) : Collection

.reduce( formula : 4D.Function { ; initValue : any { ; ...param : expression }} ) : any
.reduce( methodName : Text { ; initValue : any { ; ...param : expression }} ) : any

applique la callback formula ou methodName à un accumulateur et à chaque élément de la collection (de gauche à droite) pour la réduire à une valeur unique
.reduceRight( formula : 4D.Function { ; initValue : any { ; ...param : expression }} ) : any
.reduceRight( methodName : Text { ; initValue : any { ; ...param : expression }} ) : any

applique la callback formula ou methodName à un accumulateur et à chaque élément de la collection (de droite à gauche) pour la réduire à une valeur unique
.remove( index : Integer { ; howMany : Integer } ) : Collection
supprime un ou plusieurs élément(s) à partir de la position index spécifiée dans la collection et retourne la collection modifiée
.resize( size : Integer { ; defaultValue : any } ) : Collection
redéfinit la longueur de la collection à partir de la nouvelle taille spécifiée et retourne la collection redimensionnée
.reverse( ) : Collection
retourne une copie profonde de la collection avec tous ses éléments dans l'ordre inverse
.shift() : any
supprime le premier élément de la collection et le retourne comme résultat de la fonction
.slice( startFrom : Integer { ; end : Integer } ) : Collection
retourne une partie d'une collection dans une nouvelle collection
.some( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Boolean
.some( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Boolean

retourne true si au moins un élément de la collection a réussi un test implémenté dans formula ou methodName
.sort() : Collection
.sort( ascOrDesc : Integer ) : Collection
.sort( formula : 4D.Function { ; ...extraParam : any } ) : Collection
.sort( methodName : Text { ; ...extraParam : any } ) : Collection

trie les éléments de la collection d'origine et retourne également la collection triée
.sum( { propertyPath : Text } ) : Real
retourne la somme de toutes les valeurs de l'instance de collection
.unshift( value : any { ;...valueN : any } ) : Collection
insère value au début de la collection

.at()

Historique
ReleaseModifications
20Ajout

.at( index : Integer ) : any

ParamètresTypeDescription
indexInteger->Indice de l'élément à renvoyer
Résultatany<-L'élément à cet indice

Description

Différent de

Cette fonction ne modifie pas la collection d'origine.

Les nombres entiers négatifs déterminent la position à partir du dernier élément de la collection.

Voici un exemple :

Exemple

var $col : Collection
$col:=New collection(10; 20; 30; 40; 50)
$element:=$col.at(0) // 10
$element:=$col.at(1) // 20
$element:=$col.at(-1) // 50
$element:=$col.at(-2) // 40
$element:=$col.at(10) // undefined

.average()

Historique
ReleaseModifications
v16 R6Ajout

.average( {propertyPath : Text } ) : Real

ParamètresTypeDescription
propertyPathText->Chemin de propriété d'objet à utiliser pour évaluer les valeurs
RésultatReal, Undefined<-où :

Description

Différent de

Seuls les éléments ayant une valeur numérique sont pris en compte pour le calcul (les autres types d'éléments sont ignorés).

Les positions sont retournées dans un ordre croissant.

Vous pouvez passer tout type d'élément accepté par les collections, y compris une autre collection.

  • la collection est vide,
  • la collection ne contient pas d'éléments numériques,
  • Egal à

Exemple 1

 var $col : Collection
$col:=New collection(10;20;"Monday";True;6)
$vAvg:=$col.average() //12

Exemple 2

 var $col : Collection
$col:=New collection
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Gross";"salary";10500))
$vAvg:=$col.average("salary") //23500

.clear()

Historique
ReleaseModifications
v16 R6Ajout

.clear() : Collection

ParamètresTypeDescription
RésultatCollection<-Collection d'origine dont tous les éléments ont été supprimés

Description

Vous devez prêter attention aux problèmes de conversion suivants :

Cette fonction modifie la collection d'origine.

Exemple

var $col : Collection
$col:=New collection(1;2;5)
$col.clear()
$vSize:=$col.length //$vSize=0

.combine()

Historique
ReleaseModifications
v16 R6Ajout

.combine( col2 : Collection {; index : Integer } ) : Collection

ParamètresTypeDescription
col2Collection->Collection à combiner
indexInteger->Emplacement où insérer les éléments à combiner (défaut=length+1)
RésultatCollection<-Collection d'origine incluant les éléments combinés

Description

Vous pouvez passer : Vous pouvez passer :

Cette fonction modifie la collection d'origine.

Nom de méthode Exemples :

Exemple 1

  • Exemple 2
  • Inclus parmi
  • Vous souhaitez un tri croissant des première et troisième collections, et une synchronisation pour la deuxième collection :

Exemple

var $c; $fruits : Collection
$c:=New collection(1;2;3;4;5;6)
$fruits:=New collection("Orange";"Banana";"Apple";"Grape")
$c.combine($fruits;3) //[1,2,3,"Orange","Banana","Apple","Grape",4,5,6]

.concat()

Historique
ReleaseModifications
v16 R6Ajout

.concat( value : any { ; ...valueN } ) : Collection

ParamètresTypeDescription
valueany->Valeur(s) à concaténer. Si value est une collection, tous ses éléments sont ajoutés comme de nouveaux éléments à la fin de la collection d'origine.
RésultatCollection<-En cas d'incohérence, les règles suivantes sont appliquées :

Description

Par exemple :

Cette fonction ne modifie pas la collection d'origine.

La collection retournée contient l'élément spécifié par startFrom et tous les éléments suivants jusqu'à l'élément spécifié par end (mais non compris). Si seul le paramètre startFrom est spécifié, la collection retournée contient tous les éléments de startFrom au dernier élément de la collection d'origine.

Exemple

var $c : Collection
$c:=New collection(1;2;3;4;5)
$fruits:=New collection("Orange";"Banana";"Apple";"Grape")
$fruits.push(New object("Intruder";"Tomato"))
$c2:=$c.concat($fruits) //[1,2,3,4,5,"Orange","Banana","Apple","Grape",{"Intruder":"Tomato"}]
$c2:=$c.concat(6;7;8) //[1,2,3,4,5,6,7,8]

.copy()

Historique
ReleaseModifications
18 R3Les dates sont stockées sous la forme de date « aaaa-mm-jj » ou des chaînes au format « AAAA-MM-JJTHH: ss.SSSZ: mm » , selon la configuration actuelle « dates à l'intérieur des objets » de la base de données. Cet exemple retourne des personnes embauchées il y a plus de 90 jours :
v16 R6Ajout

.copy() : Collection
.copy( option : Integer ) : Collection
.copy( option : Integer ; groupWithCol : Collection ) : Collection
.copy( option : Integer ; groupWithObj : Object ) : Collection

ParamètresTypeDescription
optionInteger->Exemple 3
groupWithColCollection->Collection partagée à grouper avec la collection résultante
groupWithObjObject->Objet partagé à grouper avec la collection résultante
RésultatCollection<-pathStrings contient une formule constituée de 1 à N chemin(s) de propriété(s) et (optionnellement) ordres de tri, séparés par des virgules.

Description

Lorsque vous utilisez une valeur constante, les règles suivantes doivent être respectées :

Cette fonction ne modifie pas la collection d'origine.

Utilisation de guillemets

optionDescription
ck resolve pointersSi la collection d'origine contient des valeurs de type pointeur, par défaut la copie contient également les pointeurs. Si la collection d'origine contient des valeurs de type pointeur, par défaut la copie contient également les pointeurs. Dans ce cas, chaque pointeur contenu dans la collection est évalué lors de la copie et sa valeur déréférencée est utilisée.
ck sharedPrise en charge des formules Symbole(s) L'évaluation est sensible à la casse et différencie les caractères accentués.

Par défaut si omis, une évaluation non diacritique est effectuée

note

Les objets Datastore, dataclass et entity ne sont pas copiables. Collection mise à plat

Exemple 1

Inférieur ou égal à Null

var $sharedObject : Object
var $lastnames;$sharedLastnames : Collection
var $text : Text

$sharedObject:=New shared object

$text:=Document to text(Get 4D folder(Current resources folder)+"lastnames.txt")
$lastnames:=JSON Parse($text) //$lastnames est un collection standard

$sharedLastnames:=$lastnames.copy(ck shared) //$sharedLastnames est une collection partagée

//Nous pouvons désormais placer $sharedLastnames dans $sharedObject
Use($sharedObject)
$sharedObject.lastnames:=$sharedLastnames
End use

Exemple 2

Null Etant donné qu'ils appartiennent à différents groupes partagés, une combinaison directe pourrait générer une erreur. Etant donné qu'ils appartiennent à différents groupes partagés, une combinaison directe pourrait générer une erreur.

var $sharedColl1;$sharedColl2;$copyColl : Collection

$sharedColl1:=New shared collection(New shared object("lastname";"Smith"))
$sharedColl2:=New shared collection(New shared object("lastname";"Brown"))

//$copyColl appartient au nouveau groupe partagé comme $sharedColl2
$copyColl:=$sharedColl1.copy(ck shared;$sharedColl2)
Use($sharedColl2)
$sharedColl2.combine($copyColl)
End use

Exemple 3

Supérieur ou égal à Paramètre querySettings

var $lastnames;$sharedLastnames : Collection
var $text : Text

$text:=Document to text(Get 4D folder(Current resources folder)+"lastnames.txt")
$lastnames:=JSON Parse($text) //$lastnames est une collection standard

$sharedLastnames:=$lastnames.copy(ck shared) // copie partagée

Use(Storage)
Storage.lastnames:=$sharedLastnames
End use

Exemple 4

Collection d'origine dont tous les éléments ont été supprimés

Résultat

.count()

Historique
ReleaseModifications
v16 R6Ajout

.count( { propertyPath : Text } ) : Real

ParamètresTypeDescription
propertyPathText->Chemin de propriété d'objet à utiliser pour évaluer les valeurs
RésultatReal<-La recherche d'une personne nommée "smith OR status='private"' échouera simplement.

Description

Ajout

Exemple 2 Tri d'une collection de nombres par ordre croissant ou décroissant :

Exemple

 var $col : Collection
var $count1;$count2 : Real
$col:=New collection(20;30;Null;40)
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Gross";"salary";10500))
$col.push(New object("lastName";"Henry";"salary";12000))
$count1:=$col.count() //$count1=7
$count2:=$col.count("name") //$count2=3

.countValues()

Historique
ReleaseModifications
v16 R6Ajout

.countValues( value : any {; propertyPath : Text } ) : Real

ParamètresTypeDescription
valueany->Valeur à compter
propertyPathText->Chemin de propriété d'objet à utiliser pour évaluer les valeurs
RésultatReal<-Par défaut, copy() retourne une collection standard (non partagée), même si la commande est appliquée à une collection partagée.

Description

Lorsque vous utilisez des placeholders, le contournement des options de sécurité n'est pas possible :

L'ordre dans lequel les propriétés sont passées détermine la priorité de tri des éléments de la collection.

  • une valeur scalaire (texte, numérique, booléen, date),
  • une référence d'objet ou de collection.

La callback reçoit les paramètres suivants :

Comparaison

Cette fonction ne modifie pas la collection d'origine.

Exemple 1

 var $col : Collection
var $vCount : Integer
$col:=New collection(1;2;5;5;5;3;6;4)
$vCount:=$col.countValues(5) // $vCount=3

Exemple 2

 var $col : Collection
var $vCount : Integer
$col:=New collection
$col.push(New object("name";"Smith";"age";5))
$col.push(New object("name";"Wesson";"age";2))
$col.push(New object("name";"Jones";"age";3))
$col.push(New object("name";"Henry";"age";4))
$col.push(New object("name";"Gross";"age";5))
$vCount:=$col.countValues(5;"age") //$vCount=2

Exemple 3

 var $numbers; $letters : Collection
var $vCount : Integer

$letters:=New collection("a";"b";"c")
$numbers:=New collection(1;2;$letters;3;4;5)

$vCount:=$numbers.countValues($letters) //$vCount=1

.distinct()

Historique
ReleaseModifications
20Vous souhaitez créer une nouvelle collection puis ajouter un élément :
v16 R6Ajout

.distinct( {options : Integer} ) : Collection
.distinct( propertyPath : Text {; options : Integer } ) : Collection

ParamètresTypeDescription
propertyPathText->Chemin de l'attribut dont vous souhaitez obtenir les valeurs distinctes
optionsInteger->ck diacritical, ck count values
RésultatCollection<-Commentaire

Description

Nom de méthode

Cette fonction ne modifie pas la collection d'origine.

La collection retournée est automatiquement triée. Vous souhaitez créer une collection pré-remplie :

Cette recherche semble sécurisée puisque les données non publiques sont filtrées.

Exemple 2

ConstanteValeurCommentaire
ck diacritical8L'évaluation est sensible à la casse et différencie les caractères accentués. Par défaut si omis, une évaluation non diacritique est effectuée
ck count values32Renvoie le nombre d'éléments pour chaque valeur distincte. Prise en charge des formules

Exemples

 var $c; $c2; $c3 : Collection
$c:=New collection
$c.push("a";"b";"c";"A";"B";"c";"b";"b")
$c.push(New object("size";1))
$c.push(New object("size";3))
$c.push(New object("size";1))
$c2:=$c.distinct() //$c2=["a","b","c",{"size":1},{"size":3},{"size":1}]
$c2:=$c.distinct(ck diacritical) //$c2=["a","A","b","B","c",{"size":1},{"size":3},{"size":1}]
$c2:=$c.distinct("size") //$c2=[1,3]
$c3:=$c.distinct("size";ck count values) //$c3=[{value:1,count:2},{value:3,count:1}]

.equal()

Historique
ReleaseModifications
v16 R6Ajout

.equal( collection2 : Collection {; option : Integer } ) : Boolean

ParamètresTypeDescription
collection2Collection->Collection à comparer
optionInteger->La formule reçoit les paramètres suivants :
RésultatBoolean<-Cet exemple illustre l'utilisation de l'option ck resolve pointers :

Description

Ajout

Notes
  • Historique La callback reçoit les paramètres suivants :
  • Par exemple, imaginez une chaîne de recherche du type :

Par défaut, une évaluation non diacritique est effectuée. L'évaluation est sensible à la casse et différencie les caractères accentués.

tip

dans $2 : param Modifications

Exemple

 var $c; $c2 : Collection
var $b : Boolean

$c:=New collection(New object("a";1;"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"orange");2;3;4)
$b:=$c.equal($c2) // false

$c:=New collection(New object("1";"a";"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"orange");2;3)
$b:=$c.equal($c2) // false

$c:=New collection(New object("a";1;"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"ORange");2;3)
$b:=$c.equal($c2) // true

$c:=New collection(New object("a";1;"b";"orange");2;3)
$c2:=New collection(New object("a";1;"b";"ORange");2;3)
$b:=$c.equal($c2;ck diacritical) //false

.every()

Historique
ReleaseModifications
19 R6Prise en charge des formules
v16 R6Ajout

.every( { startFrom : Integer ; } formula : 4D.Function { ;...param : any } ) : Boolean
.every( { startFrom : Integer ; } methodName : Text { ;...param : any } ) : Boolean

ParamètresTypeDescription
startFromInteger->Elément à partir duquel débuter l'évaluation
formula4D.Function->Objet formule
methodNameText->Nom de méthode
paramany->Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
RésultatBoolean<-Paramètres

Description

Ajout

Vous désignez le code de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :

  • Par défaut, une évaluation non diacritique est effectuée.
  • Vous souhaitez trier la collection obtenue :

Exemple 2 Par défaut, les propriétés sont triées pas ordre croissant. Modifications

La callback reçoit les paramètres suivants :

  • Nouvelle taille de la collection
  • Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
  • Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.

Elle peut définir le(s) paramètre(s) suivant(s) :

  • Collection à combiner
  • Elément à insérer dans la collection La valeur retournée est la dernière calculée.

Prise en charge des formules

Objet formule Les propriétés suivantes sont prises en charge :

  • Prise en charge des formules
  • Prise en charge des formules
  • Commentaire

Exemple 1

Comparaison

Exemple 2

Cet exemple vérifie que tous les éléments de la collection sont de type réel :

var $c : Collection
var $b : Boolean
var $f : 4D.Function

$f:=Formula(Value type($1.value)=$2
$c:=New collection
$c.push(5;3;1;4;6;2)
$b:=$c.every($f;Is real) //$b=true
$c:=$c.push(New object("name";"Cleveland";"zc";35049))
$c:=$c.push(New object("name";"Blountsville";"zc";35031))
$b:=$c.every($f;Is real) //$b=false

.extract()

Historique
ReleaseModifications
v16 R6Ajout

.extract( propertyPath : Text { ; option : Integer } ) : Collection
.extract( propertyPath : Text ; targetPath : Text { ;...propertyPathOrTargetPathN : Text } ) : Collection

ParamètresTypeDescription
propertyPathText->Chemin de propriété d'objet dont les valeurs doivent être extraites dans la nouvelle collection
targetpathText->Chemin ou nom de propriété cible
optionInteger->Prise en charge des formules Sommaire
RésultatCollection<-$1.stop (booléen, optionnel) : true pour stopper le rétroappel.

Description

OU

Cette fonction ne modifie pas la collection d'origine.

Exemple

  • Prise en charge des formules

    Exemple 2 Exemple

  • Exemple Par exemple, vous pouvez organiser une recherche de la manière suivante :

Exemple 1

var $c : Collection
$c:=New collection
$c.push(New object("name";"Cleveland"))
$c.push(New object("zip";5321))
$c.push(New object("name";"Blountsville"))
$c.push(42)
$c2:=$c.extract("name") // $c2=[Cleveland,Blountsville]
$c2:=$c.extract("name";ck keep null) //$c2=[Cleveland,null,Blountsville,null]

Exemple 2

var $c : Collection
$c:=New collection
$c.push(New object("zc";35060))
$c.push(New object("name";Null;"zc";35049))
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$c2:=$c.extract("name";"City") //$c2=[{City:null},{City:Cleveland},{City:Blountsville},{City:Adger},{City:Clanton},{City:Clanton}]
$c2:=$c.extract("name";"City";"zc";"Zip") //$c2=[{Zip:35060},{City:null,Zip:35049},{City:Cleveland,Zip:35049},{City:Blountsville,Zip:35031},{City:Adger,Zip:35006},{City:Clanton,Zip:35046},{City:Clanton,Zip:35045}]

.fill()

Historique
ReleaseModifications
v16 R6Ajout

.fill( value : any ) : Collection
.fill( value : any ; startFrom : Integer { ; end : Integer } ) : Collection

ParamètresTypeDescription
valueany->Valeur de remplissage
startFromInteger->Indice l'élément de départ (inclus)
endInteger->Indice de fin (non inclus)
RésultatCollection<-Vous pouvez modifier ce comportement en utilisant le sélecteur Dates inside objects de la commande SET DATABASE PARAMETER.

Description

Exemples

Cette fonction modifie la collection d'origine.

  • nombres
  • Exemple 2
  • Exemple 3

En cas d'incohérence, les règles suivantes sont appliquées :

  • Exemple 3 nombres
  • Prise en charge de querySettings
  • La profondeur à laquelle une structure de collection imbriquée doit être mise à plat.

Exemple

 var $c : Collection
$c:=New collection(1;2;3;"Lemon";Null;"";4;5)
$c.fill("2") // $c:=[2,2,2,2,2,2,2,2]
$c.fill("Hello";5) // $c=[2,2,2,2,2,Hello,Hello,Hello]
$c.fill(0;1;5) // $c=[2,0,0,0,0,Hello,Hello,Hello]
$c.fill("world";1;-5) //-5+8=3 -> $c=[2,"world","world",0,0,Hello,Hello,Hello]

.filter()

Historique
ReleaseModifications
19 R6Prise en charge des formules
v16 R6Ajout

.filter( formula : 4D.Function { ; ...param : any } ) : Collection
.filter( methodName : Text { ; ...param : any } ) : Collection

ParamètresTypeDescription
formula4D.Function->Objet formule
methodNameText->Nom de méthode
paramany->Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
RésultatCollection<-Résultat

Description

Utilisation de placeholders Modifications Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.

Cette fonction ne modifie pas la collection d'origine.

Vous désignez le code de rétroappel (callback) à exécuter pour filtrer les éléments de la collection en utilisant soit :

  • Par défaut, une évaluation non diacritique est effectuée.
  • Vous souhaitez trier la collection obtenue :

Exemple 4 Par exemple, si vous exécutez la recherche suivante :

La callback reçoit les paramètres suivants :

  • Nouvelle taille de la collection
  • Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
  • Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.

Elle peut définir le(s) paramètre(s) suivant(s) :

  • Nom de méthode
  • Elément à insérer dans la collection La valeur retournée est la dernière calculée.
note

Lors de la conversion de dates 4D en texte avant de les stocker dans la collection, par défaut le programme prend en compte le fuseau horaire local.

Exemple 1

Vous voulez obtenir la collection des éléments de type texte dont la longueur est inférieure à 6 :

var $col;$colNew : Collection
$col:=New collection("hello";"world";"red horse";66;"tim";"san jose";"miami")
$colNew:=$col.filter(Formula((Value type($1.value)=Is text) && (Length($1.value)<$2)); 6)
//$colNew=["hello","world","tim","miami"]

Exemple 2

Vous voulez filtrer les éléments de la collection en fonction de leur type :

 var $c;$c2;$c3 : Collection
var $f : 4D.Function

$f:=Formula(OB Get type($1;"value")=$2)
$c:=New collection(5;3;1;4;6;2)
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c2:=$c.filter($f;Is real) // $c2=[5,3,1,4,6,2]
$c3:=$c.filter($f;Is object)
// $c3=[{name:Cleveland,zc:35049},{name:Blountsville,zc:35031}]

.find()

Historique
ReleaseModifications
19 R6Prise en charge des formules
v16 R6Ajout

.find( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : any
.find( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : any

ParamètresTypeDescription
startFromInteger->Indice d'élément à partir duquel débuter la recherche
formula4D.Function->Objet formule
methodNameText->Nom de méthode
paramany->Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
Résultatany<-Pour cela, nous devons créer une copie partagée de la collection ($sharedLastnames).

Description

Exemple

Cette fonction ne modifie pas la collection d'origine.

Vous désignez le code de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :

  • Par défaut, une évaluation non diacritique est effectuée.
  • Vous souhaitez trier la collection obtenue :

Exemple 2 La callback peut effectuer n'importe quel test, avec ou sans le(s) paramètre(s) et doit retourner true pour chaque élément remplissant le test. Modifications

La callback reçoit les paramètres suivants :

  • Nouvelle taille de la collection
  • Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
  • Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.

Elle peut définir le(s) paramètre(s) suivant(s) :

  • Collection d'origine redimensionnée
  • Elément à insérer dans la collection La valeur retournée est la dernière calculée.

Exemple 2 Exemple 2

  • Tri avec un chemin de propriété :
  • Séparateur à utiliser entre les éléments Vous pouvez utiliser un des opérateurs logiques suivants (le nom ou le symbole peut être passé) :
  • Commentaire

Exemple 1

Vous souhaitez obtenir le premier élément de texte dont la taille est inférieure à 5 caractères :

var $col : Collection
$col:=New collection("hello";"world";4;"red horse";"tim";"san jose")
$value:=$col.find(Formula((Value type($1.value)=Is text) && (Length($1.value)<$2)); 5) //$value="tim"

Exemple 2

Vous souhaitez trouver un nom de ville dans une collection :

var $c : Collection
var $c2 : Object
$c:=New collection
$c.push(New object("name"; "Cleveland"; "zc"; 35049))
$c.push(New object("name"; "Blountsville"; "zc"; 35031))
$c.push(New object("name"; "Adger"; "zc"; 35006))
$c.push(New object("name"; "Clanton"; "zc"; 35046))
$c.push(New object("name"; "Clanton"; "zc"; 35045))

$c2:=$c.find(Formula($1.value.name=$2); "Clanton") //$c2={name:Clanton,zc:35046}

.findIndex()

Historique
ReleaseModifications
19 R6Prise en charge des formules
v16 R6Ajout

.findIndex( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Integer
.findIndex( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Integer

ParamètresTypeDescription
startFromInteger->Indice d'élément à partir duquel débuter la recherche
formula4D.Function->Objet formule
methodNameText->Nom de méthode
paramany->Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
RésultatInteger<-Etant donné qu'ils appartiennent à différents groupes partagés, une combinaison directe pourrait générer une erreur.

Description

Exemple

Cette fonction ne modifie pas la collection d'origine.

Vous désignez le code de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :

  • Par défaut, une évaluation non diacritique est effectuée.
  • Collection partagée à grouper avec la collection résultante

Exemple 2 La callback peut effectuer n'importe quel test, avec ou sans le(s) paramètre(s) et doit retourner true pour chaque élément remplissant le test. Modifications

La callback reçoit les paramètres suivants :

  • Nouvelle taille de la collection
  • Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
  • Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.

Elle peut définir le(s) paramètre(s) suivant(s) :

  • Collection d'origine redimensionnée
  • Elément à insérer dans la collection La valeur retournée est la dernière calculée.

Les parenthèses sont obligatoires lorsque NOT est utilisé avant une déclaration contenant plusieurs opérateurs. Exemple 2

  • Tri avec un chemin de propriété :
  • Séparateur à utiliser entre les éléments Vous pouvez utiliser un des opérateurs logiques suivants (le nom ou le symbole peut être passé) :
  • Commentaire

Exemple

Vous souhaitez trouver la position du premier nom de ville dans la collection :

var $c : Collection
var $val2;$val3 : Integer
$c:=New collection
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$val2:=$c.findIndex(Formula($1.value.name=$2);"Clanton") // $val2=3
$val3:=$c.findIndex($val2+1;Formula($1.value.name=$2);"Clanton") //$val3=4

.first()

Historique
ReleaseModifications
20Ajout

.first() : any

ParamètresTypeDescription
Résultatany<-$1.stop (booléen, optionnel) : true pour stopper le rétroappel.

Description

Ajout

Cette fonction ne modifie pas la collection d'origine.

La fonction renvoie Undefined si la collection est vide.

Exemple

var $col; $emptyCol : Collection
var $first : Variant
$col:=New collection(10; 20; 30; "hello"; 50)
$first:=$col.first() // 10

$emptyCol:=New collection() //vide
// $first:=$emptyCol[0] //retournerait une erreur
$first:=$emptyCol.first() // retourne Undefined

.flat()

Historique
ReleaseModifications
20Ajout

.flat( { depth : Integer } ) : Collection

ParamètresTypeDescription
depthInteger->La profondeur à laquelle une structure de collection imbriquée doit être mise à plat. Par défaut=1
RésultatCollection<-$1.result (booléen): true si $1.value < $1.value2, false sinon

Description

Exemple 2

Exemple avec une référence d'objet :

Cette fonction ne modifie pas la collection d'origine.

Exemple

$col:=New collection(1; 2; New collection(3; 4))
$col.flat()
// [1, 2, 3, 4]

$col:=New collection(1; 2; New collection(3; 4; New collection(5; 6)))
$col.flat()
// [1, 2, 3, 4, [5, 6]]

$col:=New collection(1; 2; New collection(3; 4; New collection(5; 6)))
$col.flat(2)
// [1, 2, 3, 4, 5, 6]

$col:=New collection(1; 2; New collection(3; 4; 5; 6; New collection(7; 8; New collection(9; 10))))
$col.flat(MAXLONG)
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

.flatMap()

Historique
ReleaseModifications
20Ajout

.flatMap( formula : 4D.Function { ; ...param : any } ) : Collection
.flatMap( methodName : Text { ; ...param : any } ) : Collection

ParamètresTypeDescription
formula4D.Function->Objet formule
methodNameText->Nom de méthode
paramany->Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
RésultatCollection<-Note : Même si startFrom est négatif, la recherche est effectuée de la droite vers la gauche.

Description

Exemple Collection d'origine modifiée ne contenant plus les éléments supprimés

Résultat de la valeur de l'accumulateur

Cette fonction ne modifie pas la collection d'origine.

Vous désignez le code de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :

  • Par défaut, une évaluation non diacritique est effectuée.
  • Vous souhaitez trier la collection obtenue :

Exemple 2 La callback peut effectuer n'importe quelle opération, avec ou sans le(s) paramètre(s), et doit renvoyer une nouvelle valeur transformée à ajouter à la collection résultante. Modifications

La callback reçoit les paramètres suivants :

  • Nouvelle taille de la collection
  • Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
  • Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.

Elle peut définir le(s) paramètre(s) suivant(s) :

  • Propriété
  • Elément à insérer dans la collection La valeur retournée est la dernière calculée.

Exemple 1

var $col ; $result : Collection
$col:=New collection(1; 2; 3; 4)

$result:=$col.map(Formula(New collection($1.value*2)))
// [[2],[4],[6],[8]]

$result:=$col.flatMap(Formula(New collection($1.value*2)))
// [2,4,6,8]

Exemple 2

var $col; $result : Collection
$col:=New collection("Hello how"; ""; "are you ?")

$result:=$col.map(Formula(Split string($1.value; " ")))
// [["Hello", "how"], [], ["are", "you", "?"]]

$result:=$col.flatMap(Formula(Split string($1.value; " ")))
// ["Hello", "how", "are", "you", "?"]

Exemple 3

Vous souhaitez calculer le pourcentage de chaque valeur de la collection par rapport au total :

var $c; $c2 : Collection
var $f : 4D.Function
$c:=New collection(1; 4; 9; 10; 20)
$f:=Formula(New collection($1.value;Round(($1.value/$2)*100; 2)))
$c2:=$c.flatMap($f; $c.sum())
//$c2=[1, 2.27, 4, 9.09,9, 20.45,10, 22.73, 20, 45.45]

.includes()

Historique
ReleaseModifications
20Ajout

.includes( toSearch : expression { ; startFrom : Integer } ) : Boolean

ParamètresTypeDescription
toSearchExpression->Expression à rechercher dans la collection
startFromInteger->Indice d'élément à partir duquel débuter la recherche
RésultatBoolean<-Exemple 1

Description

Exemple

Cette fonction ne modifie pas la collection d'origine.

Exemple 1 Vous pouvez passer :

  • une valeur scalaire (texte, numérique, booléen, date),
  • la valeur null,
  • une référence d'objet ou de collection.

La callback reçoit les paramètres suivants :

Exemple 2

  • Exemple
  • Séparateur à utiliser entre les éléments Note: Même si startFrom est négatif, la collection est toujours recherchée de gauche à droite.
  • Commentaire

Exemple

 var $col : Collection
var $in : Boolean
var $obj : Object
$obj:=New object("value"; 10)
$col:=New collection(1;2;"Henry";5;3;"Albert";6;4;"Alan";5;$obj)
$in:=$col.includes(3) //True
$in:=$col.includes(5;6) //True
$in:=$col.includes("al@") //True
$in:=$col.includes("Hello") //False
$in:=$col.includes($obj) //True
$in:=$col.includes(New object("value"; 10)) //False

.indexOf()

Historique
ReleaseModifications
v16 R6Ajout

.indexOf( toSearch : expression { ; startFrom : Integer } ) : Integer

ParamètresTypeDescription
toSearchExpression->Expression à rechercher dans la collection
startFromInteger->Indice d'élément à partir duquel débuter la recherche
RésultatInteger<-Indice de la première occurrence de toSearch dans la collection, -1 si non trouvée

Description

Exemple

Cette fonction ne modifie pas la collection d'origine.

Exemple 1 Vous pouvez passer :

  • une valeur scalaire (texte, numérique, booléen, date),
  • la valeur null,
  • une référence d'objet ou de collection.

La callback reçoit les paramètres suivants :

Exemple 2

  • Tri avec un chemin de propriété :
  • Séparateur à utiliser entre les éléments Vous pouvez utiliser un des opérateurs logiques suivants (le nom ou le symbole peut être passé) :
  • Commentaire

Exemple

 var $col : Collection
var $i : Integer
$col:=New collection(1;2;"Henry";5;3;"Albert";6;4;"Alan";5)
$i:=$col.indexOf(3) //$i=4
$i:=$col.indexOf(5;5) //$i=9
$i:=$col.indexOf("al@") //$i=5
$i:=$col.indexOf("Hello") //$i=-1

.indices()

Historique
ReleaseModifications
v16 R6Ajout

.indices( queryString : Text { ; ...value : any } ) : Collection

ParamètresTypeDescription
queryStringText->Critère(s) de recherche
valueany->Valeur(s) à comparer lors de l'utilisation de paramètre(s) dans la chaîne
RésultatCollection<-Indice(s) d'élément(s) de la collection répondant aux critères de queryString

Description

Exemple 3 Les positions sont retournées dans un ordre croissant.

Cette fonction ne modifie pas la collection d'origine.

Le paramètre queryString doit respecter la syntaxe suivante :

propertyPath comparator value {logicalOperator propertyPath comparator value}

Les éléments sont triés par ordre décroissant

Exemple

 var $c; $icol : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))

$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$icol:=$c.indices("name = :1";"Cleveland") // $icol=[0]
$icol:=$c.indices("zc > 35040") // $icol=[0,3,4]

.insert()

Historique
ReleaseModifications
v16 R6Ajout

.insert( index : Integer ; element : any ) : Collection

ParamètresTypeDescription
indexInteger->Où insérer l'élément
elementany->Elément à insérer dans la collection
RésultatCollection<-Résultat

Description

Nom de méthode

Cette fonction modifie la collection d'origine.

Cet exemple retourne des personnes dont l'âge n'est pas connu (propriété définie sur null ou indéfinie) :

Exemple 1

  • Exemple 2
  • Exemple 3
  • Si la valeur recalculée est négative, index prend la valeur 0.

Vous pouvez passer tout type d'élément accepté par les collections, y compris une autre collection.

Exemple

 var $col : Collection
$col:=New collection("a";"b";"c";"d") //$col=["a","b","c","d"]
$col.insert(2;"X") //$col=["a","b","X","c","d"]
$col.insert(-2;"Y") //$col=["a","b","X","Y","c","d"]
$col.insert(-10;"Hi") //$col=["Hi","a","b","X","Y","c","d"]

.join()

Historique
ReleaseModifications
v16 R6Ajout

.join( delimiter : Text { ; option : Integer } ) : Text

ParamètresTypeDescription
delimiterText->Séparateur à utiliser entre les éléments
optionInteger->collection partagée
RésultatText<-Exemple 3

Description

La fonction .join() convertit tous les éléments de la collection en chaînes et les concatène en utilisant la chaîne delimiter spécifiée comme séparateur.

Cette fonction ne modifie pas la collection d'origine.

Par défaut, les éléments null ou vides de la collection sont inclus dans la chaîne résultante. Exemple avec une référence de collection :

Exemple

 var $c : Collection
var $t1;$t2 : Text
$c:=New collection(1;2;3;"Paris";Null;"";4;5)
$t1:=$c.join("|") //1|2|3|Paris|null||4|5
$t2:=$c.join("|";ck ignore null or empty) //1|2|3|Paris|4|5

.last()

Historique
ReleaseModifications
20Ajout

.last() : any

ParamètresTypeDescription
Résultatany<-$1.result (booléen) : true si $1.value < $1.value2, false sinon.

Description

Ajout

Cette fonction ne modifie pas la collection d'origine.

La fonction renvoie Undefined si la collection est vide.

Exemple

Nom de méthode

.lastIndexOf()

Historique
ReleaseModifications
v16 R6Ajout

.lastIndexOf( toSearch : expression { ; startFrom : Integer } ) : Integer

ParamètresTypeDescription
toSearchExpression->Elément à chercher dans la collection
startFromInteger->Indice d'élément à partir duquel débuter la recherche
RésultatInteger<-Commentaire

Description

Exemple

Cette fonction ne modifie pas la collection d'origine.

Exemple 1 Vous pouvez passer :

  • une valeur scalaire (texte, numérique, booléen, date),
  • la valeur null,
  • une référence d'objet ou de collection.

la collection est vide,

Exemple 2

  • Exemple 3
  • Exemple 3 Si la position calculée est négative, -1 est retourné (la collection n'est pas évaluée). Exemple 3
  • Modifications

Exemple

heure (stockée en nombre de milliseconds - réel)

.length

Historique
ReleaseModifications
v16 R5Ajout

.length : Integer

Description

Exemple 2

Avec la méthode Flatten suivante : Elle est automatiquement mise à jour en cas d'ajout ou de suppression d'éléments. Exemple 2

Exemple

Nom de méthode

.map()

Historique
ReleaseModifications
19 R6Prise en charge des formules
v16 R6Ajout

.map( formula : 4D.Function { ; ...param : any } ) : Collection
.map( methodName : Text { ; ...param : any } ) : Collection

ParamètresTypeDescription
formula4D.Function->Objet formule
methodNameText->Nom de méthode
paramany->Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
RésultatCollection<-toSearch doit correspondre exactement à l'élément à trouver (les mêmes règles que l'opérateur d'égalité du type de données sont appliquées).

Description

Exemple Collection d'origine modifiée ne contenant plus les éléments supprimés Où insérer l'élément

Cette fonction ne modifie pas la collection d'origine.

Vous désignez le code de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :

  • Par défaut, une évaluation non diacritique est effectuée.
  • Vous souhaitez trier la collection obtenue :

Exemple 2 La callback peut effectuer n'importe quelle opération, avec ou sans le(s) paramètre(s), et doit renvoyer une nouvelle valeur transformée à ajouter à la collection résultante. Modifications

La callback reçoit les paramètres suivants :

  • Nouvelle taille de la collection
  • Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.
  • Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.

Elle peut définir le(s) paramètre(s) suivant(s) :

  • Propriété
  • Elément à insérer dans la collection La valeur retournée est la dernière calculée.

Exemple

var $c; $c2 : Collection
$c:=New collection(1; 4; 9; 10; 20)
$c2:=$c.map(Formula(Round(($1.value/$2)*100; 2)); $c.sum())
//$c2=[2.27,9.09,20.45,22.73,45.45]

.max()

Historique
ReleaseModifications
v16 R6Ajout

.max( { propertyPath : Text } ) : any

ParamètresTypeDescription
propertyPathText->Chemin de propriété d'objet à utiliser pour évaluer les valeurs
Résultatany<-Cet exemple renvoie les personnes dont le nom contient "in" :

Description

Exemple 3

Cette fonction ne modifie pas la collection d'origine.

Ajout

Modifications

Modifications

Exemple

 var $col : Collection
$col:=New collection(200;150;55)
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Alabama";"salary";10500))
$max:=$col.max() //{name:Alabama,salary:10500}
$maxSal:=$col.max("salary") //50000
$maxName:=$col.max("name") //"Wesson"

.min()

Historique
ReleaseModifications
v16 R6Ajout

.min( { propertyPath : Text } ) : any

ParamètresTypeDescription
propertyPathText->Chemin de propriété d'objet à utiliser pour évaluer les valeurs
Résultatany<-formula (syntaxe recommandée), un objet Formula qui peut encapsuler toute expression exécutable, y compris des fonctions et des méthodes projet;

Description

Ajout

Cette fonction ne modifie pas la collection d'origine.

Ajout

Modifications

Modifications

Exemple

 var $col : Collection
$col:=New collection(200;150;55)
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Alabama";"salary";10500))
$min:=$col.min() //55
$minSal:=$col.min("salary") //10000
$minName:=$col.min("name") //"Alabama"

.multiSort()

Historique
ReleaseModifications
20 R3Ajout

.multiSort() : Collection
.multiSort( colsToSort : Collection ) : Collection
.multiSort( formula : 4D.Function ; colsToSort : Collection ) : Collection

ParamètresTypeDescription
formula4D.Function->Objet formule
colsToSortCollection->Exemple 2
RésultatCollection<-Optionnellement, vous pouvez passer des paramètres à formula ou methodName en utilisant le(s) paramètre(s) param.

Description

Exemple 2

Exemple

Exemple

Historique Les types sont renvoyés dans l'ordre suivant :

  1. Null
  2. booléens
  3. chaînes
  4. nombres
  5. objets
  6. collections
  7. dates

booléens

Valeur Les valeurs sont exprimées sous forme de paires propriété / valeur, où propriété est le nom du placeholder inséré pour une valeur dans queryString (":placeholder") et où valeur correspond à la valeur à comparer. Valeur à compter

note

Cela permet l'utilisation de variables ou d'expressions dans les arguments de recherche.

Si vous souhaitez trier les collections dans un ordre autre que croissant, vous devez fournir formula (objet Formula) qui définit l'ordre de tri. Nom de méthode Contrairement aux collections standard (non partagées), les collections partagées ne prennent pas en charge les images, les pointeurs et les objets ou collections non partagés.

Sinon, vous pouvez ajouter ou modifier des éléments ultérieurement par affectation.

  • $1 (object), où :
    • La nouvelle collection
    • Collection d'origine triée
  • $2...$N (tout type) : paramètres supplémentaires (extraParam)

Elle est automatiquement mise à jour en cas d'ajout ou de suppression d'éléments.

Exemple

Exemple 1

note

Élément à partir duquel la suppression peut commencer

Exemple 1

Résultat

var $col;$col2;$col3 : Collection
$col:=["A"; "C"; "B"]
$col2:=[1; 2; 3]
$col3:=[["Jim"; "Philip"; "Maria"]; ["blue"; "green"]; ["11"; 22; "33"]]

$col.multiSort([$col2; $col3])
//$col=["A","B","C"]
//$col2=[1,3,2]
//$col3[0]=["Jim","Philip","Maria"]
//$col3[1]=["11",22,"33"]
//$col3[2]=["blue","green"]

Exemple 2

= Les valeurs Null ne sont pas retournées.

var $city : Collection
var $country : Collection
var $continent : Collection

$city:=["Paris"; "Lyon"; "Rabat"; "Eching"; "San Diego"]
$country:=["France"; "France"; "Morocco"; "Germany"; "US"]
$continent:=["Europe"; "Europe"; "Africa"; "Europe"; "America"]

$continent.multiSort([$country; {collection: $city; order: ck ascending}])
//$continent=["Africa","America","Europe","Europe","Europe"]
//$country=["Morocco","US","France","France","Germany"]
//$city=["Rabat","San Diego","Lyon","Paris","Eching"]

Exemple 3

Si la valeur calculée est négative, startFrom prend la valeur 0.

var $name : Collection
var $address : Collection
$name:=[]
$name.push({firstname: "John"; lastname: "Smith"})
$name.push({firstname: "Alain"; lastname: "Martin"})
$name.push({firstname: "Jane"; lastname: "Doe"})
$name.push({firstname: "John"; lastname: "Doe"})
$address:=[]
$address.push({city: "Paris"; country: "France"})
$address.push({city: "Lyon"; country: "France"})
$address.push({city: "Eching"; country: "Germany"})
$address.push({city: "Berlin"; country: "Germany"})

$name.multiSort(Formula($1.value.firstname<$1.value2.firstname); [$address])
//"Alain Martin","Jane Doe","John Smith","John Doe"
//"Lyon France","Eching Germany","Paris France","Berlin Germany"

.orderBy()

Historique
ReleaseModifications
v16 R6Ajout

.orderBy( ) : Collection
.orderBy( pathStrings : Text ) : Collection
.orderBy( pathObjects : Collection ) : Collection
.orderBy( ascOrDesc : Integer ) : Collection

ParamètresTypeDescription
pathStringsText->Chemin(s) de propriété(s) à utiliser pour trier la collection
pathObjectsCollection->Collection d'objets critère
ascOrDescInteger->Exemple 1
RésultatCollection<-Les éléments avec des valeurs null ne sont pas égaux aux éléments Undefined.

Description

Exemple

Prise en charge de ck count values Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.

Cette fonction ne modifie pas la collection d'origine.

Si vous ne passez aucun paramètre, la fonction classe les valeurs scalaires de la collection dans un ordre croissant (les autres types d'éléments tels que les objets ou les collections sont renvoyés avec un ordre interne). Exemple 1

Vous pouvez également passer des critères afin de configurer le tri des éléments de la collection. Trois syntaxes sont prises en charge pour ce paramètre :

  • Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée. Null Résultat de la valeur de l'accumulateur L'ordre dans lequel les propriétés sont passées détermine la priorité de tri des éléments de la collection. Par défaut, les propriétés sont triées pas ordre croissant. Vous pouvez définir l'ordre de tri de chaque propriété dans la formule de critère, séparée du chemin de propriété par un simple espace : passez "asc" pour trier par ordre croissant ou "desc" pour un ordre décroissant.

  • pathObjects : Collection. Résultat Par défaut, les propriétés sont triées par ordre croissant ("descending" est faux). Chaque élément de la collection contient un objet structuré de la manière suivante :

{
"propertyPath": string,


"descending": boolean

}
  • ascOrDesc : Integer. Résultat

    ConstanteTypeValeurCommentaire
    ck ascendingInteger0Les éléments sont triés par ordre croissant (défaut)
    ck descendingInteger1Les éléments sont triés par ordre décroissant

    Cette syntaxe trie uniquement les valeurs scalaires de la collection (les autres types d'éléments comme les objets ou les collections sont retournés non triés).

Si la collection contient des éléments de différents types, ils sont d'abord groupés par type et triés par la suite. Les types sont renvoyés dans l'ordre suivant :

  1. Null
  2. booléens
  3. chaînes
  4. nombres
  5. objets
  6. collections
  7. dates

Exemple 1

Tri d'une collection de nombres par ordre croissant ou décroissant :

 var $c; $c2; $c3 : Collection
$c:=New collection
For($vCounter;1;10)
$c.push(Random)
End for
$c2:=$c.orderBy(ck ascending)
$c3:=$c.orderBy(ck descending)

Exemple 2

Tri d'une collection d'objets basé sur une formule de texte avec noms de propriétés :

 var $c; $c2 : Collection
$c:=New collection
For($vCounter;1;10)
$c.push(New object("id";$vCounter;"value";Random))
End for
$c2:=$c.orderBy("value desc")
$c2:=$c.orderBy("value desc, id")
$c2:=$c.orderBy("value desc, id asc")

Tri d'une collection d'objets sur des propriétés :

 var $c; $c2 : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"phones";New object("p1";"01";"p2";"02")))
$c.push(New object("name";"Blountsville";"phones";New object("p1";"00";"p2";"03")))

$c2:=$c.orderBy("phones.p1 asc")

Exemple 3

Tri d'une collection d'objets via une collection d'objets critères :

 var $crit; $c; $c2 : COllection
$crit:=New collection
$c:=New collection
For($vCounter;1;10)
$c.push(New object("id";$vCounter;"value";Random))
End for
$crit.push(New object("propertyPath";"value";"descending";True))
$crit.push(New object("propertyPath";"id";"descending";False))
$c2:=$c.orderBy($crit)

Tri avec un chemin de propriété :


var $crit; $c; $c2 : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"phones";New object("p1";"01";"p2";"02")))
$c.push(New object("name";"Blountsville";"phones";New object("p1";"00";"p2";"03")))
$crit:=New collection(New object("propertyPath";"phones.p2";"descending";True))
$c2:=$c.orderBy($crit)

.orderByMethod()

Historique
ReleaseModifications
19 R6Prise en charge des formules
v16 R6Ajout

.orderByMethod( formula : 4D.Function { ; ...extraParam : expression } ) : Collection
.orderByMethod( methodName : Text { ; ...extraParam : expression } ) : Collection

ParamètresTypeDescription
formula4D.Function->Objet formule
methodNameText->Nom de méthode
extraParamany->Paramètre(s) à passer
RésultatCollection<-|startFrom |Integer|->|Index pour démarrer le test| |formula|4D.Function|->|Objet formule| |methodName|Text|->|Nom d'une méthode| |param |any |->|Paramètre(s) à passer| |Resultat|Boolean|<-|Vrai si au moins un élément a réussi le test|

Description

Exemple

Prise en charge de ck count values Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.

Cette fonction ne modifie pas la collection d'origine.

Vous désignez le code de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :

  • Par défaut, une évaluation non diacritique est effectuée.

  • Vous souhaitez trier la collection obtenue :

Collection contenant des éléments ajoutés Chaque élément de la collection contient un objet structuré de la manière suivante :

La callback reçoit les paramètres suivants :

  • $1 (object), où :
    • La nouvelle collection
    • Collection d'origine triée
    • $2...$N (tout type) : paramètres supplémentaires (extraParam)

Si vous avez utilisé une méthode, elle doit définir le paramètre suivant :

  • Vous pouvez également passer des critères afin de configurer le tri des éléments de la collection.

Exemple 1

Vous souhaitez trier une collection de chaînes contenant des nombres par valeur plutôt que par ordre alphabétique :

Conjonction

Exemple 2

Vous souhaitez trier une collection de chaînes de caractères en fonction de leur longueur :

 var $fruits; $c2 : Collection
$fruits:=New collection("Orange";"Apple";"Grape";"pear";"Banana";"fig";"Blackberry";"Passion fruit")
$c2:=$fruits.orderByMethod(Formula(Length(String($1.value))>Length(String($1.value2))))
//$c2=[Passion fruit,Blackberry,Orange,Banana,Apple,Grape,pear,fig]

Exemple 3

Vous souhaitez trier une collection par code de caractère ou par langage :

var $strings1; $strings2 : Collection
$strings1:=New collection("Alpha";"Charlie";"alpha";"bravo";"Bravo";"charlie")

//using the character code:
$strings2:=$strings1.orderByMethod(Formula(sortCollection);sk char codes)
// result : ["Alpha","Bravo","Charlie","alpha","bravo","charlie"]

//using the language:
$strings2:=$strings1.orderByMethod(Formula(sortCollection);sk strict)
// result : ["alpha","Alpha","bravo","Bravo","charlie","Charlie"]

booléens

#DECLARE ($toSort : Object ; $option : Integer)

$toSort.result:=(Compare strings($toSort.value;$toSort.value2;$option2)<0)

.pop()

Historique
ReleaseModifications
v16 R6Ajout

.pop() : any

ParamètresTypeDescription
Résultatany<-$1.result (booléen) : true si $1.value < $1.value2, false sinon.

Description

Exemple 1

Cette fonction modifie la collection d'origine.

Modifications

Exemple

Recherche de valeurs null

Chemin ou nom de propriété cible

.push()

Historique
ReleaseModifications
v16 R6Ajout

.push( element : any { ;...elementN } ) : Collection

ParamètresTypeDescription
elementany->Élément(s) à ajouter à la collection
RésultatCollection<-$1.stop (booléen, optionnel) : true pour stopper le rétroappel de la méthode.

Description

Nom de méthode

Cette fonction modifie la collection d'origine.

Exemple 1

 var $col : Collection
$col:=New collection(1;2) //$col=[1,2]
$col.push(3) //$col=[1,2,3]
$col.push(6;New object("firstname";"John";"lastname";"Smith"))
//$col=[1,2,3,6,{firstname:John,lastname:Smith}

Exemple 2

Vous souhaitez trier la collection obtenue :

 var $col; $sortedCol : Collection
$col:=New collection(5;3;9) //$col=[5,3,9]
$sortedCol:=$col.push(7;50).sort()
//$col=[5,3,9,7,50]
//$sortedCol=[3,5,7,9,50]

.query()

Historique
ReleaseModifications
20 R6Par défaut=1
17 R5Prise en charge de querySettings
v16 R6Ajout

.query( queryString : Text ) : Collection
.query( queryString : Text ; ...value : any ) : Collection
.query( queryString : Text ; querySettings : Object ) : Collection

ParamètresTypeDescription
queryStringText->Critère(s) de recherche
valueany->Valeur(s) à comparer lors de l'utilisation de paramètre(s) dans la chaîne
querySettingsObject->Options de requête : paramètres, attributs
RésultatCollection<-Null

Description

Exemple Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.

Modifications

Cette fonction ne modifie pas la collection d'origine.

paramètre queryString

Le paramètre queryString doit respecter la syntaxe suivante :

propertyPath comparator value {logicalOperator propertyPath comparator value}

où :

  • Modifications Ce paramètre peut contenir un nom simple (par exemple "pays") ou un chemin d'attribut valide (par exemple "pays.nom"). Dans le cas d'un chemin d'accès à un attribut dont le type est Collection, la notation [] est utilisée pour traiter toutes les occurrences (par exemple children[].age).

  • Premier élément de collection Les symboles suivants sont pris en charge :

ComparaisonSymbole(s)Commentaire
Egal à=, ==Retourne les données correspondantes, prend en charge le joker de recherche (@), ne tient pas compte de la casse et est non diacritique.
===, ISRetourne les données correspondantes, considère le @ comme un caractère standard, ne tient pas compte de la casse et est non diacritique
Différent de#, !=Prend en charge le joker de recherche (@). Équivalent à "Condition Not appliquée à une assertion").
!==, IS NOTConsidère le @ comme un caractère standard
Condition Not appliquée à une assertionNOTLes parenthèses sont obligatoires lorsque NOT est utilisé avant une déclaration contenant plusieurs opérateurs. Équivalent à "Non égal à" ).
Inférieur à<
Supérieur à>
Inférieur ou égal à<=
Supérieur ou égal à> =
Inclus parmiINRetourne les données égales à au moins une des valeurs d'une collection ou d'un ensemble de valeurs, prend en charge le joker de recherche (@)
  • Ajout La callback reçoit les paramètres suivants : Lorsque vous utilisez une valeur constante, les règles suivantes doivent être respectées :

    • Les valeurs constantes de type texte peuvent être passées avec ou sans guillemets (voir Utilisation des guillemets ci-dessous). Pour rechercher une chaîne dans une chaîne (recherche de type "contient"), utilisez le symbole joker (@) dans valeur pour isoler la chaîne à chercher, comme dans cet exemple : "@Smith@". Les mots-clés suivants sont interdits pour des constantes de type texte : true, false.
    • Valeurs constantes de type booléen: true or false (sensible à la casse).
    • Valeurs constantes de type numérique : les décimales doivent être séparées par un '.'
    • Constantes de type date : "YYYY-MM-DD" format
    • Constantes null : en utilisant le mot-clé "null", la recherche trouvera les propriétés ayant la valeur null et undefined.
    • dans le cas d'une recherche avec un comparateur IN, value doit être une collection ou des valeurs correspondant au type de l'attribut path entre [ ] séparés par des virgules (pour les chaînes, les caractères " doivent être échappés avec \).
  • logicalOperator : utilisé pour relier des conditions multiples dans la recherche (optionnel). Vous pouvez utiliser un des opérateurs logiques suivants (le nom ou le symbole peut être passé) :

ConjonctionSymbole(s)
AND&, &&, and
OU|,||, or

Utilisation de guillemets

Lorsque vous utilisez des guillemets dans des recherches, vous devez utiliser des guillemets simples ' ' à l'intérieur de la requête et des guillemets doubles " " pour encadrer la requête, sinon une erreur est renvoyée. Par exemple :

"employee.name = 'smith' AND employee.firstname = 'john'"

Les guillemets simples (') ne sont pas pris en charge dans les valeurs recherchées car ils casseraient la chaîne de recherche. Par exemple, "comp.name = 'John's pizza' " génèrera une erreur. Si vous devez rechercher des valeurs contenant des guillemets simples, il est nécessaire d'utiliser des placeholders (voir ci-dessous).

Utilisation de parenthèses

Vous pouvez utiliser des parenthèses dans la recherche afin de prioriser les calculs. Par exemple, vous pouvez organiser une recherche de la manière suivante :

"(employee.age >= 30 OR employee.age <= 65) AND (employee.salary <= 10000 OR employee.status = 'Manager')"

Utilisation de placeholders

Exemple Un placeholder est un paramètre que vous insérez dans des chaines de recherche et qui est remplacé par une autre valeur au moment où la chaîne de recherche est évaluée. La valeur des placeholders est évaluée une seule fois, au début de la requête ; elle n'est pas évaluée pour chaque élément.

Résultat

  • Résultat dans queryString et leurs valeurs correspondantes sont fournies par la séquence de paramètres value. dans queryString et leurs valeurs correspondantes sont fournies par la séquence de paramètres value.

Voici un exemple :

$c:=$myCol.query(":1=:2";"city";"Chicago")
  • La fonction renvoie la chaîne résultante.

Voici un exemple :

$o.attributes:={att:"city"}
$o.parameters:={name:"Chicago")
$c:=$myCol.query(":att=:name";$o)

Vous pouvez combiner tous les types d'arguments dans queryString. Vous pouvez combiner tous les types d'arguments dans queryString.

  • des valeurs directes (pas de placeholders)
  • des placeholders indexés et/ou nommés.

L'utilisation de placeholders dans les recherches est recommandée pour les raisons suivantes :

  1. Cela empêche l'injection de code malveillant : si vous utilisez dans la chaîne de recherche des variables dont le contenu provient directement de la saisie de l'utilisateur, celui-ci pourrait modifier les conditions de recherche en saisissant des arguments de recherche supplémentaires. Par exemple, imaginez une chaîne de recherche du type :
 $vquery:="status = 'public' & name = "+myname //l'utilisateur saisit son nom
$result:=$col.query($vquery)

Cette recherche semble sécurisée puisque les données non publiques sont filtrées. Cependant, si l'utilisateur saisit dans la zone myname une chaîne du type "smith OR status='private', la chaîne de recherche sera modifiée à l'étape de l'interprétation et pourra retourner des données privées.

Lorsque vous utilisez des placeholders, le contournement des options de sécurité n'est pas possible :

 $result:=$col.query("status='public' & name=:1";myname)

Dans ce cas, si l'utilisateur saisit smith OR status='private' dans la zone myname, cela ne sera pas interprété dans la chaîne de recherche, mais uniquement passé en tant que valeur. La recherche d'une personne nommée "smith OR status='private"' échouera simplement.

  1. Objet partagé à grouper avec la collection résultante

  2. Cela permet l'utilisation de variables ou d'expressions dans les arguments de recherche. Exemples :

$result:=$col.query("address.city = :1 & name =:2";$city;$myVar+"@")
$result2:=$col.query("company.name = :1";"John's Pizzas")

Exemple objet partagé

Recherche de valeurs null

Lorsque vous recherchez les valeurs null, vous ne pouvez pas utiliser la syntaxe placeholder car le moteur de recherche considère la valeur null comme une valeur de comparaison invalide. Par exemple, si vous exécutez la recherche suivante :

Elément à partir duquel débuter l'évaluation

Vous n'obtiendrez pas le résultat souhaité car la valeur null sera évaluée par 4D comme une erreur résultant de l'évaluation du paramètre (pouvant être, par exemple, un attribut provenant d'une autre recherche). Pour ce type de recherche, vous devez utiliser la syntaxe de recherche directe :

Si vous passez une heure, elle est stockée sous la forme d'un nombre de millisecondes (Réel).

Lorsque vous utilisez des guillemets dans des recherches, vous devez utiliser des guillemets simples ' ' à l'intérieur de la requête et des guillemets doubles " " pour encadrer la requête, sinon une erreur est renvoyée.

Par exemple, "comp.name = 'John's pizza' " génèrera une erreur. Modifications

Optionnellement, vous pouvez passer le numéro de l'élément auquel démarrer la recherche dans startFrom.

ComparaisonSymbole(s)
Egal à=, ==
Différent de#, !=

Exemple La collection originale sera triée par ordre croissant et toutes les collections colsToSort seront triées de manière synchronisée.

Nouvelle option *ck shared*.

$1.stop (booléen, optionnel) : true pour stopper le rétroappel de la méthode.

Indice de fin (non inclus)

Paramètre querySettings

Exemple 1 Les propriétés suivantes sont prises en charge :

PropriétéTypeDescription
parametersObjectExemple 1 Vous pouvez passer un nombre illimité de collections. Vous pouvez combiner, dans une même recherche, des placeholders indexés (valeurs passées directement dans les paramètres value) et les valeurs des placeholders nommés.
attributesObjectUne comparaison récursive de collections peut prendre beaucoup de temps si la collection est de grande taille et comporte de nombreux niveaux. Modifications Résultat L'utilisation d'une collection permet de rechercher des attributs dont les noms ne sont pas compatibles avec la notation à points, par exemple ["4Dv17.1", "en/fr"]
Vous pouvez mélanger des placeholders indexés (valeurs passées directement dans les paramètres value) et des valeurs de placeholders nommés dans la même requête.
note

Utiliser ce paramètre est obligatoire si vous voulez interroger une collection en utilisant une référence de collection ou une référence d'objet.

Exemple 1

 var $c; $c2; $c3 : Collection
$c:=New collection
$c.push(New object("name";"Cleveland";"zc";35049))
$c.push(New object("name";"Blountsville";"zc";35031))
$c.push(New object("name";"Adger";"zc";35006))
$c.push(New object("name";"Clanton";"zc";35046))
$c.push(New object("name";"Clanton";"zc";35045))
$c2:=$c.query("name = :1";"Cleveland") //$c2=[{name:Cleveland,zc:35049}]
$c3:=$c.query("zc > 35040") //$c3=[{name:Cleveland,zc:35049},{name:Clanton,zc:35046},{name:Clanton,zc:35045}]

Exemple 2

 var $c : Collection
$c:=New collection
$c.push(New object("name";"Smith";"dateHired";!22-05-2002!;"age";45))
$c.push(New object("name";"Wesson";"dateHired";!30-11-2017!))
$c.push(New object("name";"Winch";"dateHired";!16-05-2018!;"age";36))

$c.push(New object("name";"Sterling";"dateHired";!10-5-1999!;"age";Null))
$c.push(New object("name";"Mark";"dateHired";!01-01-2002!))

Cet exemple renvoie les personnes dont le nom contient "in" :

 $col:=$c.query("name = :1";"@in@")
//$col=[{name:Winch...},{name:Sterling...}]

Cet exemple retourne des personnes dont le nom ne commence pas par une chaine dont la valeur provient d'une variable (saisie par l'utilisateur, par exemple) :

 $col:=$c.query("name # :1";$aString+"@")
//si $astring="W"
//$col=[{name:Smith...},{name:Sterling...},{name:Mark...}]

Cet exemple retourne des personnes dont l'âge n'est pas connu (propriété définie sur null ou indéfinie) :

 $col:=$c.query("age=null") //placeholders non permis avec "null"
//$col=[{name:Wesson...},{name:Sterling...},{name:Mark...}]

Cet exemple retourne des personnes embauchées il y a plus de 90 jours :

 $col:=$c.query("dateHired  :1";(Current date-90))
//$col=[{name:Smith...},{name:Sterling...},{name:Mark...}] si la date du jour est 01/10/2018

Exemple 3

Recherche avec des dates :


$entitySelection:=ds.Employee.query("birthDate > :1";"1970-01-01")
$entitySelection:=ds.Employee.query("birthDate <= :1";Current date-10950)
info

Vous trouverez d'autres exemples de requêtes dans la page dataClass.query(). Notez cependant que les formules ne sont pas prises en charge par la fonction collection.query(), ni dans le paramètre queryString ni en tant que paramètre objet formula.

.reduce()

Historique
ReleaseModifications
19 R6Prise en charge des formules
v16 R6Ajout

.reduce( formula : 4D.Function { ; initValue : any { ; ...param : expression }} ) : any
.reduce( methodName : Text { ; initValue : any { ; ...param : expression }} ) : any

ParamètresTypeDescription
formula4D.Function->Objet formule
methodNameText->Nom de méthode
initValueany->Valeur à utiliser comme premier argument du premier appel de formula ou methodName*
paramExpression->Paramètre(s) à passer
Résultatany<-Résultat de la valeur de l'accumulateur

Description

La fonction .reduce() applique la callback formula ou methodName à un accumulateur et à chaque élément de la collection (de gauche à droite) pour la réduire à une valeur unique.

Cette fonction ne modifie pas la collection d'origine.

Vous désignez le code de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :

  • Par défaut, une évaluation non diacritique est effectuée.
  • Vous souhaitez trier la collection obtenue :

La callback prend chaque élément de la collection et effectue toutes les opérations souhaitées pour accumuler le résultat dans $1.accumulator, qui est retourné dans $1.value.

Vous pouvez passer la valeur pour initialiser l'accumulateur dans initValue. Si elle est omise, $1.accumulator commence par Undefined.

La callback reçoit les paramètres suivants :

  • dans $1.value : valeur d'élément à évaluer
  • dans $2: param
  • dans $N...: paramN...

Elle peut définir le(s) paramètre(s) suivant(s) :

  • $1.accumulator: valeur à modifier par la fonction et qui est initialisée par initValue.
  • $1.stop (booléen, optionnel) : true pour stopper le rétroappel de la méthode. La valeur retournée est la dernière calculée.

Exemple 1

var $c : Collection
$c:=New collection(5;3;5;1;3;4;4;6;2;2)
$r:=$c.reduce(Formula($1.accumulator*=$1.value); 1) //retourne 86400

Exemple 2

Cet exemple permet de réduire plusieurs éléments de collections en une seule :

 var $c;$r : Collection
$c:=New collection
$c.push(New collection(0;1))
$c.push(New collection(2;3))
$c.push(New collection(4;5))
$c.push(New collection(6;7))
$r:=$c.reduce(Formula(Flatten)) //$r=[0,1,2,3,4,5,6,7]

Avec la méthode Flatten suivante :

 If($1.accumulator=Null)
$1.accumulator:=New collection
End if
$1.accumulator.combine($1.value)

.reduceRight()

Historique
ReleaseModifications
20Ajout

.reduceRight( formula : 4D.Function { ; initValue : any { ; ...param : expression }} ) : any
.reduceRight( methodName : Text { ; initValue : any { ; ...param : expression }} ) : any

ParamètresTypeDescription
formula4D.Function->Objet formule
methodNameText->Nom de méthode
initValueany->Valeur à utiliser comme premier argument du premier appel de formula ou methodName*
paramExpression->Paramètre(s) à passer
Résultatany<-Résultat de la valeur de l'accumulateur

Description

La fonction .reduceRight() applique la callback formula ou methodName à un accumulateur et à chaque élément de la collection (de droite à gauche) pour la réduire à une valeur unique.

Cette fonction ne modifie pas la collection d'origine.

Vous désignez le code de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :

  • Par défaut, une évaluation non diacritique est effectuée.
  • Vous souhaitez trier la collection obtenue :

La callback prend chaque élément de la collection et effectue toutes les opérations souhaitées pour accumuler le résultat dans $1.accumulator, qui est retourné dans $1.value.

Vous pouvez passer la valeur pour initialiser l'accumulateur dans initValue. Si elle est omise, $1.accumulator commence par Undefined.

La callback reçoit les paramètres suivants :

  • dans $1.value : valeur d'élément à évaluer
  • dans $2: param
  • dans $N...: paramN...

Elle peut définir le(s) paramètre(s) suivant(s) :

  • $1.accumulator: valeur à modifier par la fonction et qui est initialisée par initValue.
  • $1.stop (booléen, optionnel) : true pour stopper le rétroappel de la méthode. La valeur retournée est la dernière calculée.

Exemple 1

var $c : Collection
$c:=New collection(5;3;5;1;3;4;4;6;2;2)
$r:=$c.reduceRight(Formula($1.accumulator*=$1.value); 1) //retourne 86400

Exemple 2

Cet exemple permet de réduire plusieurs éléments de collections en une seule :

 var $c;$r : Collection
$c:=New collection
$c.push(New collection(0;1))
$c.push(New collection(2;3))
$c.push(New collection(4;5))
$c.push(New collection(6;7))
$r:=$c.reduceRight(Formula(Flatten)) //$r=[6,7,4,5,2,3,0,1]

Avec la méthode Flatten suivante :

	//méthode projet Flatten
If($1.accumulator=Null)
$1.accumulator:=New collection
End if
$1.accumulator.combine($1.value)

.remove()

Historique
ReleaseModifications
v16 R6Ajout

.remove( index : Integer { ; howMany : Integer } ) : Collection

ParamètresTypeDescription
indexInteger->Élément à partir duquel la suppression peut commencer
howManyInteger->Nombre d'éléments à supprimer, ou 1 élément si omis
RésultatCollection<-Collection modifiée ne contenant plus le ou les élément(s) supprimé(s)

Description

La fonction .remove() supprime un ou plusieurs élément(s) à partir de la position index spécifiée dans la collection et retourne la collection modifiée.

Cette fonction modifie la collection d'origine.

Dans index, passez la position à partir de laquelle vous souhaitez supprimer des éléments de la collection.

Exemple 1 Si startFrom < 0, la fin de la collection est considérée comme point de départ du calcul de la position (startFrom:=startFrom+length).

  • Inclus parmi
  • Si la valeur calculée < 0, index est défini à 0.
  • Si la valeur calculée > la longueur de la collection, index est défini à cette longueur.

Dans howMany, passez le nombre d'éléments à supprimer à partir de index. Si howMany n'est pas spécifié, alors un seul élément est supprimé.

Si vous essayez de supprimer un élément d'une collection vide, la méthode ne fait rien (aucune erreur n'est générée).

Exemple

 var $col : Collection
$col:=New collection("a";"b";"c";"d";"e";"f";"g";"h")
$col.remove(3) // $col=["a","b","c","e","f","g","h"]
$col.remove(3;2) // $col=["a","b","c","g","h"]
$col.remove(-8;1) // $col=["b","c","g","h"]
$col.remove(-3;1) // $col=["b","g","h"]

.resize()

Historique
ReleaseModifications
v16 R6Ajout

.resize( size : Integer { ; defaultValue : any } ) : Collection

ParamètresTypeDescription
sizeInteger->Nouvelle taille de la collection
defaultValueany->Valeur par défaut pour remplir de nouveaux éléments
RésultatCollection<-Collection d'origine redimensionnée

Description

La fonction .resize() redéfinit la longueur de la collection à partir de la nouvelle taille spécifiée et retourne la collection redimensionnée.

Cette fonction modifie la collection d'origine.

  • Si size < longueur de la collection, les éléments excédentaires sont supprimés de la collection.
  • Si size > longueur de la collection, la longueur de la collection est étendue à size.

Par défaut, les nouveaux éléments sont remplis par des valeurs null. Vous pouvez indiquer la valeur de remplissage à utiliser dans les éléments ajoutés à l'aide du paramètre defaultValue.

Exemple

 var $c : Collection
$c:=New collection
$c.resize(10) // $c=[null,null,null,null,null,null,null,null,null,null]

$c:=New collection
$c.resize(10;0) // $c=[0,0,0,0,0,0,0,0,0,0]

$c:=New collection(1;2;3;4;5)
$c.resize(10;New object("name";"X")) //$c=[1,2,3,4,5,{name:X},{name:X},{name:X},{name:X},{name:X}]

$c:=New collection(1;2;3;4;5)
$c.resize(2) //$c=[1,2]

.reverse()

Historique
ReleaseModifications
v16 R6Ajout

.reverse( ) : Collection

ParamètresTypeDescription
RésultatCollection<-Copie inversée de la collection

Description

La fonction .reverse() retourne une copie profonde de la collection avec tous ses éléments dans l'ordre inverse. Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.

Cette fonction ne modifie pas la collection d'origine.

Exemple

 var $c; $c2 : Collection
$c:=New collection(1;3;5;2;4;6)
$c2:=$c.reverse() //$c2=[6,4,2,5,3,1]

.shift()

Historique
ReleaseModifications
v16 R6Ajout

.shift() : any

ParamètresTypeDescription
Résultatany<-$1.stop (booléen, optionnel) : true pour stopper le rétroappel.

Description

La fonction .shift() supprime le premier élément de la collection et le retourne comme résultat de la fonction.

Cette fonction modifie la collection d'origine.

Si la collection est vide, cette méthode ne fait rien.

Exemple

 var $c : Collection
var $val : Variant
$c:=New collection(1;2;4;5;6;7;8)
$val:=$c.shift()
// $val=1
// $c=[2,4,5,6,7,8]

.slice()

Historique
ReleaseModifications
v16 R6Ajout

.slice( startFrom : Integer { ; end : Integer } ) : Collection

ParamètresTypeDescription
startFromInteger->Indice l'élément de départ (inclus)
endInteger->Indice de fin (non inclus)
RésultatCollection<-Nouvelle collection contenant des éléments découpés (copie superficielle)

Description

La fonction .slice() retourne une partie d'une collection dans une nouvelle collection, sélectionnée de la position startFrom à la position end (end non incluse). Cette fonction retourne une copie superficielle (shallow copy) de la collection. Si la collection d'origine est une collection partagée, la collection retournée est également une collection partagée.

Cette fonction ne modifie pas la collection d'origine.

La collection retournée contient l'élément spécifié par startFrom et tous les éléments suivants jusqu'à l'élément spécifié par end (mais non compris). Si seul le paramètre startFrom est spécifié, la collection retournée contient tous les éléments de startFrom jusqu'au dernier élément de la collection d'origine.

  • Exemple 3
  • Si la valeur calculée < 0, startFrom est mis à 0.
  • Prise en charge de querySettings
  • Si end < startFrom (valeurs passées ou calculées), la méthode ne fait rien.

Exemple

 var $c; $nc : Collection
$c:=New collection(1;2;3;4;5)
$nc:=$c.slice(0;3) //$nc=[1,2,3]
$nc:=$c.slice(3) //$nc=[4,5]
$nc:=$c.slice(1;-1) //$nc=[2,3,4]
$nc:=$c.slice(-3;-2) //$nc=[3]

.some()

Historique
ReleaseModifications
19 R6Prise en charge des formules
v16 R6Ajout

.some( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Boolean
.some( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Boolean

ParamètresTypeDescription
startFromInteger->Elément à partir duquel débuter l'évaluation
formula4D.Function->Objet formule
methodNameText->Nom de méthode
paramany->Paramètre(s) à passer
RésultatBoolean<-Vrai si au moins un élément a réussi le test

Description

La fonction .some() retourne true si au moins un élément de la collection a réussi un test implémenté dans formula ou methodName.

Vous désignez le code 4D de rétroappel (callback) à exécuter pour évaluer les éléments de la collection en utilisant soit :

  • Par défaut, une évaluation non diacritique est effectuée.
  • Vous souhaitez trier la collection obtenue :

Exemple 2 Par défaut, les propriétés sont triées pas ordre croissant. Modifications

La callback reçoit les paramètres suivants :

  • dans $1.value : valeur d'élément à évaluer
  • dans $2: param
  • dans $N...: paramN...

Elle peut définir le(s) paramètre(s) suivant(s) :

  • (obligatoire si vous avez utilisé une méthode) $1.result (booléen) : true si l'évaluation de la valeur de l'élément est à vrai, false sinon.
  • $1.stop (booléen, optionnel) : true pour stopper le rétroappel de la méthode. La valeur retournée est la dernière calculée.

Dans tous les cas, au moment où la fonction .some() rencontre le premier élément de la collection retournant true, elle arrête d'appeler la callback et retourne true.

Par défaut, .some() évalue l'ensemble de la collection. Optionnellement, vous pouvez passer la position de l'élément auquel démarrer le test dans startFrom.

  • Si startFrom >= la longueur de la collection, False est retourné, ce qui signifie que la collection n'est pas testée.

  • Si startFrom < 0, il est considéré comme un décalage par rapport à la fin de la collection.

  • Commentaire

Exemple

Vous voulez savoir si au moins une valeur de la collection est >0.

 var $c : Collection
var $b : Boolean
$c:=New collection
$c.push(-5;-3;-1;-4;-6;-2)
$b:=$c.some(Formula($1.value>0)) // $b=false
$c.push(1)
$b:=$c.some(Formula($1.value>0)) // $b=true

$c:=New collection
$c.push(1;-5;-3;-1;-4;-6;-2)
$b:=$c.some(Formula($1.value>0)) //$b=true
$b:=$c.some(1;Formula($1.value>0)) //$b=false

.sort()

Historique
ReleaseModifications
19 R6Prise en charge des formules
v16 R6Ajout

.sort() : Collection
.sort( ascOrDesc : Integer ) : Collection
.sort( formula : 4D.Function { ; ...extraParam : any } ) : Collection
.sort( methodName : Text { ; ...extraParam : any } ) : Collection

ParamètresTypeDescription
ascOrDescInteger->Exemple 1
formula4D.Function->Objet formule
methodNameText->Nom de méthode
extraParamany->Paramètre(s) à passer à la méthode
RésultatCollection<-Optionnellement, vous pouvez passer des paramètres à formula ou methodName en utilisant le(s) paramètre(s) param.

Description

La fonction .sort() trie les éléments de la collection d'origine et retourne également la collection triée.

Cette fonction modifie la collection d'origine.

Si .sort() est appelé sans paramètres, seules les valeurs scalaires (nombres, textes, dates, booléens) sont triées. Les éléments sont triés par défaut par ordre croissant, en fonction de leur type. Vous pouvez également passer une des constantes suivantes dans le paramètre ascOrDesc :

ConstanteTypeValeurCommentaire
ck ascendingInteger0Les éléments sont triés par ordre croissant (défaut)
ck descendingInteger1Les éléments sont triés par ordre décroissant

Cette syntaxe trie uniquement les valeurs scalaires de la collection (les autres types d'éléments comme les objets ou les collections sont retournés non triés).

Si la collection contient des éléments de différents types, ils sont d'abord groupés par type et triés par la suite. Les types sont renvoyés dans l'ordre suivant :

  1. Null
  2. booléens
  3. chaînes
  4. nombres
  5. objets
  6. collections
  7. dates

Si vous souhaitez trier les éléments de la collection dans un autre ordre ou trier n'importe quel type d'élément, vous devez fournir dans *formula * (objet Formula) ou methodName (Text) une callback qui définit l'ordre de tri. Nom de méthode Vous pouvez fournir des paramètres supplémentaires à la callback si nécessaire.

La callback reçoit les paramètres suivants :

  • $1 (object), où :
    • La nouvelle collection
    • Collection d'origine triée
  • $2...$N (tout type) : paramètres supplémentaires (extraParam)

Si vous avez utilisé une méthode, vous devez définir le paramètre suivant :

  • Nouvelle collection contenant des éléments scindées (copie superficielle)

Exemple 1

 var $col; $col2 : Collection
$col:=New collection("Tom";5;"Mary";3;"Henry";1;"Jane";4;"Artie";6;"Chip";2)
$col2:=$col.sort() // $col2=["Artie","Chip","Henry","Jane","Mary","Tom",1,2,3,4,5,6]
// $col=["Artie","Chip","Henry","Jane","Mary","Tom",1,2,3,4,5,6]

Exemple 2

 var $col; $col2 : Collection
$col:=New collection(10;20)
$col2:=$col.push(5;3;1;4;6;2).sort() //$col2=[1,2,3,4,5,6,10,20]

Exemple 3

var $col; $col2; $col3 : Collection
$col:=New collection(33;4;66;1111;222)
$col2:=$col.sort() //numerical sort: [4,33,66,222,1111]
$col3:=$col.sort(Formula(String($1.value)<String($1.value2))) //tri alphabétique : [1111,222,33,4,66]

.sum()

Historique
ReleaseModifications
v16 R6Ajout

.sum( { propertyPath : Text } ) : Real

ParamètresTypeDescription
propertyPathText->Chemin de propriété d'objet à utiliser pour évaluer les valeurs
RésultatReal<-Somme des valeurs de la collection

Description

La fonction .sum() retourne la somme de toutes les valeurs de l'instance de collection.

Seuls les éléments ayant une valeur numérique sont pris en compte pour le calcul (les autres types d'éléments sont ignorés).

Les positions sont retournées dans un ordre croissant.

.sum() retourne 0 si :

  • la collection est vide,
  • la collection ne contient pas d'éléments numériques,
  • Egal à

Exemple 1

 var $col : Collection
var $vSum : Real
$col:=New collection(10;20;"Monday";True;2)
$vSum:=$col.sum() //32

Exemple 2

 var $col : Collection
var $vSum : Real
$col:=New collection
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Gross";"salary";10500,5))
$vSum:=$col.sum("salary") //$vSum=70500,5

.unshift()

Historique
ReleaseModifications
v16 R6Ajout

.unshift( value : any { ;...valueN : any } ) : Collection

ParamètresTypeDescription
valueany->Valeur(s) à insérer au début de la collection
RésultatCollection<-Collection contenant des éléments ajoutés

Description

La fonction .unshift() insère value au début de la collection et retourne la collection modifiée.

Cette fonction modifie la collection d'origine.

Si plusieurs valeurs sont passées, elles sont insérées toutes en même temps, ce qui signifie qu'elles apparaissent dans la collection résultante dans le même ordre que dans la liste d'arguments.

Exemple

 var $c : Collection
$c:=New collection(1;2)
$c.unshift(4) // $c=[4,1,2]
$c.unshift(5) //$c=[5,4,1,2]
$c.unshift(6;7) // $c=[6,7,5,4,1,2]